【问题标题】:How can curl authenticate to Google Cloud based on local gcloud's CLI authentication?curl 如何根据本地 gcloud 的 CLI 身份验证向 Google Cloud 进行身份验证?
【发布时间】:2020-01-16 06:43:15
【问题描述】:

我的脚本使用了一系列gcloud 命令,当然 gcloud 已经过身份验证。我需要使用 curl 来访问 gcloud 不可用的 GCP REST API。我可以通过在 Cloud Console 中生成 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

【问题讨论】:

    标签: authentication curl google-cloud-platform gcloud


    【解决方案1】:

    在您通过 Cloud SDK 身份验证后,您可以使用 gcloud auth print-access-token 命令获取当前活动帐户的访问令牌,而无需指定 JSON 凭据文件的路径。

    如果您希望为 Cloud SDK 实例激活服务帐户,您仍然需要 credentials.json 文件。不过,我很确定您只需这样做一次。

    编辑:

    我注意到您正在使用gcloud auth application-default print-access-token

    请记住,与gcloud auth print-access-token 命令相反,它使用当前的应用程序默认凭据 (ADC),必须通过使用 GOOGLE_APPLICATION_CREDENTIALS 环境变量指定 credentials.json 文件路径或使用gcloud auth application-default login 命令。

    【讨论】:

    • 如我的问题所示,我已经做了gcloud auth print-access-token。但这仍然失败,除非我使用从 Cloud Console 下载的 JSON,如何避免该手动步骤? (我编辑了问题以显示错误消息。)
    • 错误消息显示您使用的是gcloud auth application-default print-access-token 而不是gcloud auth print-access-token,我将更新我的答案,提供有关两者的更多信息。
    • 谢谢。使用gcloud auth print-access-token其实就是答案。
    猜你喜欢
    • 2020-01-24
    • 2020-07-22
    • 1970-01-01
    • 2015-09-23
    • 2018-02-24
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多