使用web-uri

时间:2019-07-11 07:34:20

标签: google-cloud-platform virtual-machine google-compute-engine api-key

我在CE上设置了一个VM。我想通过HTTP请求使用instances()。stop和instances()。start方法通过API启动和关闭此VM。

使用API​​资源管理器(https://cloud.google.com/compute/docs/reference/rest/v1/instances/start)并输入项目名称,区域和实例名称,一切正常,我可以启动和停止VM。我被转发到Google登录名->我授权->可以。

但是,当我尝试通过浏览器中提供的html来执行此操作时:https://www.googleapis.com/compute/v1/projects/ {my_projekt} / zones / {my_zone} / instances / {my_instance} / start”,它不起作用。错误:找不到。我发现缺少某种自动处理功能,因此我也尝试添加?key = {my_key}。

在文档中,我发现:   需要以下OAuth范围之一:   https://www.googleapis.com/auth/compute   https://www.googleapis.com/auth/cloud-platform

但是我不知道该如何设置。有人可以帮我吗?甚至有可能我要做什么?

在下一步中,我想允许其他人通过为他们提供IAM角色来启动和停止该虚拟机。他们也可以使用http发布请求吗?

我在与GCP合作方面还很陌生,而自动处理过程让我头疼...

先谢谢了。 问候, 奥利(Oli)

2 个答案:

答案 0 :(得分:0)

好的,您可以通过3种方法来实现这一点,它们在here中有详细记录,我将按照从最简单到最困难的顺序列出它们:

A。-Google Cloud Console。

B。-Google Cloud SDK CLI工具“ gcloud”。

C。-Google Cloud HTTP API调用。

帐户执行实例停止/启动所需的权限为:

compute.instances.stop
compute.instances.start

要重置:

compute.instances.reset

具有这些权限的角色是“ compute.instanceAdmin”,但是您始终可以创建具有所需权限的客户角色。


A。-Google Cloud Console

因为它使用GUI,所以它是最用户友好的方式。在Compute Engine Instances上转到Cloud Console。如果您的实例没有出现在列表中,请确保您选择了正确的项目。

单击要停止/启动的实例,然后根据要执行的操作单击上面的按钮。


B。-Google Cloud SDK CLI工具“ gcloud”

Install CLI工具“ gcloud”,authenticate使用以下工具:

gcloud auth login [ACCOUNT] 

然后,您将可以使用命令Stop / Start / Reset实例

gcloud compute instances stop example-instance-1 example-instance-2

gcloud compute instances start example-instance

gcloud compute instances reset example-instance

C。-Google Cloud HTTP API调用

这是您当前正在尝试使用的方法,您必须向Google Cloud API发出HTTP请求:StartStopReset

您需要将“访问令牌”添加到请求标头上的“身份验证”字段中。使用“授权:承载您的长令牌”。有关here的更多信息。

如何获取“访问令牌”可能会因您使用的语言而异,这是javascript中的示例:

var {google} = require("googleapis");

// Load the service account key JSON file.
var serviceAccount = require("path/to/serviceAccountKey.json");

// Define the required scopes.
var scopes = [
  "https://www.googleapis.com/auth/cloud-platform",
  "https://www.googleapis.com/auth/compute"
];

// Authenticate a JWT client with the service account.
var jwtClient = new google.auth.JWT(
  serviceAccount.client_email,
  null,
  serviceAccount.private_key,
  scopes
);

// Use the JWT client to generate an access token.
jwtClient.authorize(function(error, tokens) {
  if (error) {
    console.log("Error making request to generate access token:", error);
  } else if (tokens.access_token === null) {
    console.log("Provided service account does not have permission to generate access tokens");
  } else {
    var accessToken = tokens.access_token;
    // here you have the token, you can use it on your API request.
  }
});

答案 1 :(得分:0)

我刚刚发现,不可能做我想做的事情:仅使用Uri在gcp上启动或停止实例。 (例如,可以使用Google Maps API。在这里,您只需要API密钥即可。)

也就是说,因为在这种情况下,需要在gcp上访问私有数据,因此必须使用Oauth协议。