curl 如何基于本地 gcloud 的 CLI 身份验证向 Google Cloud 进行身份验证?

2024-02-16

我的脚本使用了一系列gcloud命令,当然 gcloud 已经过身份验证。我需要使用curl来访问gcloud无法使用的GCP REST API。我可以通过在 Cloud Console 中生成 JSON 凭据文件来完成此操作,但我不想将其作为单独的手动步骤来执行。

[编辑:答案是替换gcloud auth该curl命令中的字符串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 作为此脚本的一部分,我不介意使用 JSON。例如,有没有办法调用gcloud生成这个 JSON,然后我将其设置为GOOGLE_APPLICATION_CREDENTIALS?


一旦您对 Cloud SDK 进行了身份验证,您就可以使用gcloud auth 打印访问令牌 https://cloud.google.com/sdk/gcloud/reference/auth/print-access-token命令获取当前活动帐户的访问令牌,无需指定 JSON 凭证文件的路径。

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

EDIT:

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

请记住,与gcloud auth print-access-token命令,它使用当前的应用程序默认凭据 (ADC),必须通过使用 GOOGLE_APPLICATION_CREDENTIALS 环境变量指定凭据.json 文件路径或使用gcloud auth 应用程序-默认登录 https://cloud.google.com/sdk/gcloud/reference/auth/application-default/login命令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

curl 如何基于本地 gcloud 的 CLI 身份验证向 Google Cloud 进行身份验证? 的相关文章

随机推荐

  • Oracle 19c 安装错误:[INS-35179] 当前可用内存小于创建 DB 所需的可用内存 (1,597MB)

    我正在尝试安装 oracle 19c 在安装过程中遇到了与内存相关的问题 INS 35179 当前可用内存小于创建 DB 所需的可用内存 6 537MB 我仔细检查了所有先决条件 例如2GB free RAM 10 GB free spac
  • 水平调整 ImageView

    我正在开发一种电子书应用程序 并尝试通过以下两种方式显示图像 当屏幕处于portrait 我将图像水平放置并垂直居中 当屏幕处于landscape 我希望图像水平填充屏幕并保持纵横比 由于我使用的图像长于宽 所以我有一个ScrollView
  • React 和 Jest:无法从测试文件中找到模块

    为目录中的 Redux 操作 App js 设置 Jest 测试 App test js app tests 这是 App js 的标头 jest unmock modules actions App js import React fro
  • 如何将具有静态值的字段添加到mongodb查找查询?

    我们可以向 mongodb 添加一些具有静态值的自定义字段吗find query 我正在尝试将 API 请求 UId 添加 附加到我们对 mongodb 进行的所有查询 以便我们可以将请求与来自 mongodb 日志的慢速查询进行映射 我在
  • H2数据库TIMESTAMP列的默认值

    我正在用 H2 数据库编写集成测试 我的数据库 生成的 初始化包括此脚本 因为生成的联接表没有此列 ALTER TABLE INT USR ADD IU INSDTTM TIMESTAMP DEFAULT NOW 这就是我创建记录的方式 I
  • C++14 元编程:在编译/初始化时自动构建类型列表

    使用 C 14 和 Curiously Recurring Template Pattern CRTP 的某种组合以及可能的Boost Hana http www boost org doc libs 1 63 0 libs hana do
  • 将 x86 与 Blazor 结合使用时“无法启动调试适配器”

    我正在尝试使用 x86 中的 ASP NET 托管 只是基本模板应用程序 来调试 Blazor WebAssembly 应用程序 如果我使用 x64 平台进行调试 应用程序可以正常运行 但是 如果我将所有项目 服务器 客户端和共享 切换到
  • Tomcat 是否使用 pl/sql 模块的缓存版本?

    好吧 想象一下这种情况 我对 pl sql 模块进行了更改 重新编译它 一切都很好 没有错误 然后 我尝试访问在 Tomcat 上运行的应用程序上的 GUI 屏幕 该屏幕调用 oracle 数据库中的 pl sql 模块 当我提交应该调用
  • 您可以更改 logback 中 %caller{0} 的输出以模仿 log4j %l 说明符吗?

    我正在从 log4j 迁移到 Logback Log4j 具有 l 格式说明符 它将打印出调用方法的完全限定名称 后跟调用者在括号之间获取文件名和行号 示例 com my company MyClass doSomething MyClas
  • 在同一域上使用 firebase 函数的 oAuth 的跨域状态 cookie 问题

    我正在为 firebase 平台的用户实现 oAuth 登录 一切正常 除非用户has 禁用跨域 cookie 这就是我所做的 从我的域 应用程序 用户被重定向到云功能 can 函数设置statecookie 并将用户重定向到 oAuth
  • 在 R 中打印小于或等号?

    我尝试使用 u2264对于小于或等号 gt names table A1 lt c x P X x P X u2264x gt print table A1 但这出现在输出中 gt x P X x P X x gt 1 2 0 562 0
  • 在 JavaScript 中从字符串生成随机数

    我想制作一个客户端 A B 测试库 每个用户都有一个存储在 cookie 中的随机数 每个测试都有一个测试名称和一系列选项 我需要一个函数 根据用户的随机数 测试名称和选项来选择随机选项 当然 该函数必须始终为给定的一组输入返回相同的选项
  • iTunesConnect Testflight 没有适用于 iOS 的版本?

    我在向我的 iOS 版本之一添加管理员时遇到问题 当我点击我的构建时 它显示我有 2 个人可以测试它 但这不是我所期待的 我期待 3 个人 因为如果我单击 iTunesConnect 用户 我会看到 3 个人 但由于某种原因 我的朋友Yu
  • jQuery 中 HTML 表单标签的有效/无效名称是什么?

    这是我在这里遇到的错误的结果jQuery form serialize 仅返回序列化表单的一个元素 https stackoverflow com questions 1290011 jquery form serialize return
  • JPA 参照完整性约束违规 oneToMany 和批量操作查询

    My domain model diagram looks like this 正如您所看到的 我在学生和出勤之间以及出勤和研讨会之间有一个一对多的关系 下面是学生类和出勤类 以及我的帮助类 初始化程序 package com semina
  • 音频编程入门[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MYSQL LEFT JOIN 与 GROUP BY

    我有 2 个查询 我需要加入它们 我需要将员工根据活动的工作时间与公司在规定时间段内同一活动的总工作时间进行比较 第一个查询是 SELECT u login a article p p article SUM p p going SUM p
  • 创建与时间相关的圆圈动画

    嗨 我尝试制作动画 调用函数时绘制的 3 个圆圈之一应从右向左移动 首先应在画布上绘制一个随机 黄色 蓝色或橙色 圆圈 然后在 3 秒后绘制下一个随机圆圈 然后在 2 秒后 8秒到现在为止 我怎样才能做到这一点 现在 当主循环再次开始运行时
  • 将 init() 设为 NSObject 子类私有

    班上FooClass应该只允许通过其交互sharedInstance 我试图通过不允许任何人访问来防止滥用init of FooClass 我尝试了几种不同的方法 但没有一个有效 使用私有关键字 class FooClass NSObjec
  • curl 如何基于本地 gcloud 的 CLI 身份验证向 Google Cloud 进行身份验证?

    我的脚本使用了一系列gcloud命令 当然 gcloud 已经过身份验证 我需要使用curl来访问gcloud无法使用的GCP REST API 我可以通过在 Cloud Console 中生成 JSON 凭据文件来完成此操作 但我不想将其