通过其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"
}
}
我如何进行身份验证?
答案 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"
}
]