【问题标题】:Best practices for using GOOGLE_APPLICATION_CREDENTIALS in gitlab CI/CD在 gitlab CI/CD 中使用 GOOGLE_APPLICATION_CREDENTIALS 的最佳实践
【发布时间】:2020-10-01 13:50:45
【问题描述】:

我正在尝试制作通过GCP terraform provider 部署 GCP 实例的 GitLab 管道。像 AWS 这样的其他平台有环境变量,如 $AWS_ACCESS_KEY_ID$AWS_SECRET_ACCESS_KEY 可用于对请求进行身份验证,但 GCP 似乎使用服务帐户凭据文件。

我可以创建一个 CI gitlab 文件变量来包含我的 GCP 服务帐户凭据文件,但我只能以不安全的方式添加它。如果我尝试在 GitLab ci-cd 设置下屏蔽我的文件变量,则会产生错误消息 This variable can not be masked.

在 GitLab CI/CD 环境变量中存储 GCP 服务帐户凭据文件的最佳做法是什么?

【问题讨论】:

  • Gitlab 在哪里运行?如果在 GCP 中,您可以使用分配给实例的默认服务帐号,并且您的管道中没有机密。
  • 您可以在 GCP VM 或 GKE 中运行 Gitlab 运行程序。将具有所需权限的服务帐户分配给您的 VM。在 GCP 中安装 Gitlab runner 可以在这里找到:about.gitlab.com/solutions/google-cloud-platform
  • 除上述解决方案外,您还必须将 SA 密钥文件保存在安全的地方,您的管道可以使用安全保存在您的 CI 上的凭据访问该位置。然后获取 SA 密钥文件,然后使用它执行所需的操作。

标签: google-cloud-platform gitlab terraform gitlab-ci


【解决方案1】:

一种方法是获取环境变量并将其作为文件写出。当您在较新版本的 Gitlab 中添加变量时,有一个下拉菜单可让您在“变量”和“文件”之间进行选择。如果将内容放在值字段中,则可以使用cp $VARIABLE_NAME name-of-file.bob

你不需要屏蔽它,因为它永远不会写入日志(除非你 cat 它),但我建议你选中“保护”复选框,这意味着它只会用于受保护的分支。

第二种方法是使用受保护变量中的密码对其进行加密和解密。这将需要在构建中获取另一个程序,但这可能对您有用。

第三种是使用age之类的东西来签入加密文件,写出一个SSH作为一个花哨的解密密钥,然后打包SSH。

但是,第一种方法可能是您最好的选择。

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 2021-10-26
    • 2019-11-24
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多