Google Compute Engine:无法从 gcloud 终端查询 API

Posted

技术标签:

【中文标题】Google Compute Engine:无法从 gcloud 终端查询 API【英文标题】:Google Compute Engine: Unable to query API from gcloud terminal 【发布时间】:2015-12-09 06:29:09 【问题描述】:

我在我的项目中创建了许多虚拟机,我想从中从 gcloud 终端查询 api。 我在尝试查询任何 API 时收到 401 -“需要登录”错误,即使我已授权/登录到 gcloud 终端。

C:\..\Google\Cloud SDK>gcloud config list
[core]
account = remis.haroon@*****.com
disable_usage_reporting = True
project = <proj-id>
[meta]
active_config = default

C:\..\Google\Cloud SDK>curl https://www.googleapis.com/compute/v1/projects/<proj-id>/aggregated/disks

 "error": 
  "errors": [
   
    "domain": "global",
    "reason": "required",
    "message": "Login Required",
    "locationType": "header",
    "location": "Authorization"
   
  ],
  "code": 401,
  "message": "Login Required"
 

【问题讨论】:

【参考方案1】:

使用 REST API 时需要携带授权令牌:

gcloud auth login

TOKEN=$(gcloud auth print-access-token)

curl -H "Authorization: Bearer $TOKEN" &lt;url&gt;

【讨论】:

【参考方案2】:

正如错误中提到的:

"message": "Login Required",
"locationType": "header",
"location": "Authorization"

由于您正在对 google api 进行 HTTP API 调用,因此您需要将 OAuth 访问令牌放入 header of your HTTP request。

GET compute/v1/projects/<proj-id>/aggregated/disks HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer XXXXXXXXXXXXXXXXXXX

有几种方法可以获取 OAuth 访问令牌。一种简单的方法是通过谷歌的oauthplayground。

    选择所需的 API 范围 点击授权 API 按钮 点击“兑换代币授权码” 您将拥有访问令牌以在 curl 请求标头中使用它

【讨论】:

以上是关于Google Compute Engine:无法从 gcloud 终端查询 API的主要内容,如果未能解决你的问题,请参考以下文章

Cronjob 无法在 Google Compute Engine 上运行

无法在 Google Cloud Compute Engine 上使用 GPU

连接 Google App Engine 和 Google Compute Engine

Google Compute Engine:如何从外部提出请求?

如何更改 Google Compute Engine 服务帐户的范围以将数据写入 Google Cloud Storage 存储桶?

将文件从 Google Compute Engine VM 复制到 Windows 本地主机