使用 Terraform 的 Google Cloud 凭据

2023-12-27

这是一个新手问题,但我刚刚开始使用 Terraform / Terragrunt 进行 GCP 配置,并且我发现获取 GCP 凭据的工作流程非常混乱。我以前只使用过 AWS,获取凭证并在 AWS CLI 中配置它们非常简单。

基本上,Google 云提供商文档 https://www.terraform.io/docs/providers/google/provider_reference.html指出你应该定义一个provider像这样阻止:

provider "google" {
  credentials = "${file("account.json")}"
  project     = "my-project-id"
  region      = "us-central1"
  zone        = "us-central1-c"
}

This credentials字段显示我(显然)必须生成一个服务帐户,并在我的文件系统上的某个位置保存 JSON。

但是,如果我运行命令gcloud auth application-default login,这会生成一个位于~/.config/gcloud/application_default_credentials.json;或者我也可以使用gcloud auth login <my-username>。从那里我可以使用命令行从命令行访问 Google API(这也是 Terraform 在幕后所做的事情)gcloud命令。

那么为什么 Terraform 提供程序需要服务帐户的 JSON 文件呢?为什么它不能只使用gcloudCLI 工具已在使用?

顺便说一句,如果我将 Terraform 配置为指向application_default_credentials.json文件,我收到以下错误:

正在初始化模块...

正在初始化后端...

错误:无法获取现有工作区:正在查询 Cloud Storage 失败:获取: 私钥应该是 PEM 或普通 PKCS1 或 PKCS8;解析错误: asn1:语法错误:序列被截断


如果我将 Terraform 配置为指向 application_default_credentials.json 文件,则会收到以下错误:

The credentials field in provider config expects a path to service account key file, not user account credentials file. If you want to authenticate with your user account try omitting credentials and then running gcloud auth application-default login; if Terraform doesn't find your credentials file you can set the GOOGLE_APPLICATION_CREDENTIALS environment variabe to point to ~/.config/gcloud/application_default_credentials.json.

Read 在这里了解更多 https://cloud.google.com/docs/authentication/关于服务帐户与用户帐户的主题。无论如何,Terraform 文档明确建议不要使用application-default login:

不建议使用此方法 - 某些 API 与通过 gcloud 获取的凭据不兼容

相似地GCP docs https://cloud.google.com/docs/authentication/陈述以下内容:

重要提示:对于几乎所有情况,无论您是在本地开发还是在生产应用程序中开发,都应该使用服务帐户,而不是用户帐户或 API 密钥。

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

使用 Terraform 的 Google Cloud 凭据 的相关文章

随机推荐

  • 必需但可能未定义的类型

    我想在 TypeScript 中创建一个类 它以一种需要具有该接口的所有属性 甚至是可选属性 的方式实现一个接口 但允许将可选属性undefined This is Required ish
  • 在开发模式下未获得查看错误的调试输出

    这很奇怪 目前 我的视图中有某种错误 但看不到它是什么 此外 Web 服务器跟踪中没有调试输出 Rails 3 2 2 应用程序是 2 7 10 的升级版 我使用 thin 作为我的开发服务器 当错误发生在其他地方时 我确实得到了正常的调试
  • Subversion 网络界面 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近在 Linux 服务器上安装了 Subversion CentOS http en wikipe
  • 使滚动条不占用空间/防止布局移动

    我正在使用 html 制作一个应用程序 并且需要有一个滚动条 但每当我添加一个时 它都会将所有内容转移到滚动条所需的必要空间 这会搞乱应用程序的布局 因此 我需要一种方法使滚动条简单地覆盖在页面顶部 这意味着页面仍然位于其后面 我已经知道如
  • 用Java从图像文件中读取文本[重复]

    这个问题在这里已经有答案了 可用于从图像 JPEG PNG 文件中提取文本的最佳开源 Java 库是什么 There s GOCR http jocr sourceforge net and 超正方体 http code google co
  • Oracle:使用 Toad 设置 SERVEROUTPUT ON

    I put 将服务器输出设置为大小无限格式包裹 in 登录SQL but Toad貌似没有采用这个配置 换句话说 以下 PL SQL 不会打印输出 BEGIN DBMS OUTPUT PUT LINE Hello World END 如何让
  • Rails 4:将控制器分组到文件夹中

    我想将所有控制器及其视图分组到文件夹中 例如在 admin 下 这就是我所做的 1 我把所有的都搬走了controllers在一个文件夹下admin 2 我把所有的都搬走了views在一个文件夹下admin 3 我在 Rails Guide
  • 模块扩展中不允许导出和导出分配

    import Request as ExpressRequest Response as ExpressResponse from express declare module kvl export kvl declare const kv
  • ASP.NET 中的安全随机数

    据我所知 Random 被初始化为当前时间 如果两个连接在同一秒内命中 我应该得到相同的两个随机数 对于一个大型网站来说这是可能的 锁定不好 我该如何解决 注意 该数字用于会话 ID 编辑 我被困在使用长 缩短128位GUID感觉不对 而不
  • 在引号外用逗号分割

    我的程序从文件中读取一行 该行包含逗号分隔的文本 例如 123 test 444 don t split this more test 1 我希望分割的结果是这样的 123 test 444 don t split this more te
  • 无法在 mysql 中设置线程堆栈大小

    我正在努力增加线程堆栈 https dev mysql com doc refman 5 7 en server system variables html多变的 我可以使用命令行选项成功完成此操作 如下所示 usr sbin mysqld
  • Angular 双向数据绑定并观察父组件的变化

    使用双向数据绑定时 似乎无法观察父组件的变化 我有一个用于收集标签列表的自定义输入组件 双向数据绑定在此组件与其父组件之间设置并运行 the parent component is just a form here is how I m a
  • Bootstrap Modal 位于 Chrome 的背景后面

    我正在使用 Twitter Bootstrap CSS 和 JS 问题来自 Modal 插件 它在 Firefox 和 IE 上工作正常 但在 Chrome 中显示很差 Modal 成功弹出 但隐藏在模态背景后面 这意味着无法填写表单或查看
  • 如何在 Mac 上构建和安装 Valgrind?

    我在 Mac OS X 上使用 codeblocks 10 05 我下载了 Valgrind 并解压了一个文件夹 我完全迷失了方向 不知道如何构建它 我不知道任何终端 控制台命令 并且通常是编程新手 所以我不知道如何 构建 或 编译 它 我
  • 如何使用python删除目录中所有pdf文件的密码?

    我的目录中有一些 pdf 文件 其中一些受密码保护 另一些则不受密码保护 我知道每个受密码保护的文件的密码 如何自动执行从每个 pdf 文件中删除密码的过程 我在想这样的事情 获取受密码保护的文件 尝试从我制作的单词列表中给出的密码 打印出
  • 异步模式 - 在从方法返回某些值之前等待事件

    免责声明 这段代码被简化 很多 以便于阅读 我知道它不符合正常的代码标准 我的问题可以在下面的代码中看到 基本上我有一个解析对象的调用者 我必须等到子组件完成 由事件发出信号 然后才能返回基于子组件上的某些值的值 问题是 对于这种情况 首选
  • 如何使用 FFMPEG 捕获浏览器的选项卡内容

    我正在开发一个项目 需要录制将在不同浏览器选项卡中播放的 HTML5 动画 所以我读了一点 显然可以使用 FFMPEG 来完成 也许使用 gdigrab 设备 https www ffmpeg org ffmpeg devices html
  • 将函数应用于任意长的参数列表

    我想创建一个函数 apply 它接受具有任意数量参数的函数以及整数列表 并返回函数的结果 其中列表中的每个整数都是按顺序排列的参数 我在想这样的事情 apply Int gt Int gt Int gt Int apply f x xs a
  • 使任务栏上的应用程序图标具有透明背景(UWA)

    我正在制作一个通用 Windows 应用程序 我希望任务栏上的应用程序图标具有透明背景 因此它不在彩色框中 很多微软自己的库存应用程序都是这样的 邮件 照片 Xbox 等 我知道它可以做到 因为我是偶然做到的 但我使用的图标太大 当我使用正
  • 使用 Terraform 的 Google Cloud 凭据

    这是一个新手问题 但我刚刚开始使用 Terraform Terragrunt 进行 GCP 配置 并且我发现获取 GCP 凭据的工作流程非常混乱 我以前只使用过 AWS 获取凭证并在 AWS CLI 中配置它们非常简单 基本上 Google