我的脚本使用一系列gcloud
命令,当然,gcloud是经过身份验证的。我需要使用curl来访问GCP,这些API对于gcloud来说是不可用的。我可以通过在云控制台中生成一个JSON凭据文件来做到这一点,但我不希望将其作为单独的手动步骤来完成。
编辑:答案是将curl命令中的gcloud auth
字符串替换为gcloud auth print-access-token
。见下面的回答。
我现在就是这样做的,使用从控制台下载的JSON文件。
GOOGLE_APPLICATION_CREDENTIALS=credentials.json
curl -X POST -H "Authorization: Bearer \"$(gcloud auth application-default print-access-token)\"" \
-H "Content-Type: application/json; charset=utf-8" \
https://cloudresourcemanager.googleapis.com/v1/projects/<MY_PROJECT>:getAncestry
如果没有下载的JSON,我可以得到以下内容:
ERROR: (gcloud.auth.application-default.print-access-token)
The Application Default Credentials are not available. They are available if running in Google Compute Engine.
Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing
to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials
for more information.
{ "error": {
"code": 401,
"message": "Request had invalid authentication credentials.
Expected OAuth 2 access token, login cookie or other valid authentication credential.
See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
}
}
如何利用我的gcloud
身份验证来使用curl?如果我可以自动生成JSON作为这个脚本的一部分,我不介意使用它。例如,是否有一种方法可以调用gcloud
来生成这个JSON,然后我将其设置为GOOGLE_APPLICATION_CREDENTIALS
发布于 2020-01-16 08:57:14
一旦对Cloud进行了身份验证,就可以使用gcloud auth打印访问令牌命令为当前活动帐户获取访问令牌,而无需指定JSON凭据文件的路径。
如果希望激活Cloud实例的服务帐户,仍然需要credentials.json文件。不过,我很肯定你只需要这样做一次。
编辑:
我注意到你在使用gcloud auth application-default print-access-token
。
请记住,与gcloud auth print-access-token
命令相反,它使用当前的应用程序默认凭据(ADC),必须通过使用GOOGLE_APPLICATION_CREDENTIALS env变量指定credentials.json文件路径或使用gcloud auth应用程序-默认登录命令来设置该证书。
https://stackoverflow.com/questions/59764257
复制相似问题