在 gitlab CI/CD 中使用 GOOGLE_APPLICATION_CREDENTIALS 的最佳实践

Posted

技术标签:

【中文标题】在 gitlab CI/CD 中使用 GOOGLE_APPLICATION_CREDENTIALS 的最佳实践【英文标题】:Best practices for using GOOGLE_APPLICATION_CREDENTIALS in gitlab CI/CD 【发布时间】: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 密钥文件,然后使用它执行所需的操作。 【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于在 gitlab CI/CD 中使用 GOOGLE_APPLICATION_CREDENTIALS 的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

GitLab CI/CD 的使用

基于GitLab的CI/CD系统重点记要

在 Gitlab CI/CD 管道脚本中使用 shell 变量?

Gitlab CI/CD配置-并发送消息到飞书

GitLab CI/CD中的常用预设变量

CI/CD之搭建私有git仓库gitlab