如何从外部通过API获取gcp计算实例IP地址列表

时间:2020-06-03 04:27:57

标签: google-cloud-platform google-oauth google-compute-engine

通过其API获取谷歌计算实例的所有IP地址列表的过程以及如何在外部提供OAuth 2访问令牌的过程

当我尝试通过GCP提供的API进行访问

https://compute.googleapis.com/compute/v1/projects/ {project} / zones / {zone} / instances

我遇到以下错误

{
  "error": {
    "code": 401,
    "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "errors": [
      {
        "message": "Login Required.",
        "domain": "global",
        "reason": "required",
        "location": "Authorization",
        "locationType": "header"
      }
    ],
    "status": "UNAUTHENTICATED"
  }
}

我如何进行身份验证?

1 个答案:

答案 0 :(得分:0)

获取对Google Cloud API的curl调用的访问令牌的最简单方法是使用Cloud SDK(前提是您已installed并对其进行了配置)。

一旦确认您使用正确的用户或服务帐户(gcloud auth list)登录,您就可以通过运行以下命令获得该用户帐户的访问令牌:

gcloud auth print-access-token

或针对您已配置为默认的服务帐户:

gcloud auth application-default print-access-token

您需要将该令牌作为“授权”标头传递,以对您的呼叫进行身份验证。您可以像下面这样在curl调用中集成gcloud命令:

curl https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instances -H "Authorization: Bearer $(gcloud auth print-access-token)"

您可以使用jq来解析响应并仅打印IP对象数组,例如:

curl https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instances -H "Authorization: Bearer $(gcloud auth print-access-token)" | jq '[.items | .[] | {ip: .networkInterfaces[].accessConfi
gs[].natIP}]'

它将打印以下形式的回复:

[
  {
    "ip": "XX.XXX.XX.XXX"
  },
  {
    "ip": "XXX.XXX.XX.XXX"
  }
]