如何通过 gcloud cli args 或环境变量将 secretEnv 指定给 cloudbuild.yaml
Posted
技术标签:
【中文标题】如何通过 gcloud cli args 或环境变量将 secretEnv 指定给 cloudbuild.yaml【英文标题】:How to specify secretEnv to cloudbuild.yaml via gcloud cli args or environment variables 【发布时间】:2020-05-17 01:21:34 【问题描述】:如果我关注云构建document,我必须在 cloudbuild.yaml 中指定加密的秘密。
secrets:
- kmsKeyName: projects/[PROJECT-ID]/locations/global/keyRings/[KEYRING-NAME]/cryptoKeys/[KEY-NAME]
secretEnv:
MY_SECRET: <base64-encoded encrypted secret>
即使它是加密的,我也不会在代码中提交秘密值。请告诉我另一种方式。
例如。通过来自 gcloud 的 args 构建提交命令或环境变量,...等
【问题讨论】:
【参考方案1】:您可以改用Google Secret Manager。我们仍在更新文档,但有一个示例说明如何将它与 Cloud Build 一起使用:
首先,创建一个秘密:
$ echo -n "my-secret-data" | gcloud beta secrets create "my-api-key" \
--replication-policy "automatic" \
--data-file -
授予 Cloud Build Service Account 访问您的密钥的权限:
$ gcloud beta secrets add-iam-policy-binding "my-api-key" \
--member "serviceAccount:<project-number>@cloudbuild.gserviceaccount.com" \
--role "roles/secretmanager.secretAccessor"
更新(2021 年 2 月)
然后在构建步骤中检索秘密:
steps:
- name: 'my-step'
args:
- '--secret=$$MY_SECRET'
secretEnv:
- 'MY_SECRET'
availableSecrets:
secretManager:
- env: 'MY_SECRET'
versionName: 'projects/my-project/secrets/my-secret/versions/latest'
旧答案(2021 年 2 月之前)
然后在构建步骤中检索秘密:
steps:
- name: 'gcr.io/cloud-builders/gcloud@sha256:c1dfa4702cae9416b28c45c9dcb7d48102043578d80bfdca57488f6179c2211b'
entrypoint: 'bash'
args:
- '-c'
- |
gcloud beta secrets versions access --secret=my-api-key latest > /secrets/my-api-key
volumes:
- name: 'secrets'
path: '/secrets'
- name: 'my-step'
volumes:
- name: 'secrets'
path: '/secrets'
args: # ... /secrets/my-api-key contains the secret
【讨论】:
我应该如何在 my-step 的容器中指定环境变量? 多个秘密怎么办,我必须一次获取一个吗?为什么不在 Secret Manager 中自动替换值?我可以在哪里提出功能请求? 您可以多次运行该 gcloud 命令(将每个命令放在自己的行上)。已提交更深入的 Cloud Build 集成功能请求。 嘿,Seth,喜欢 GSM 上的工作,谢谢!关于上述内容,是否存在任何安全问题,即 /secrets 卷中的秘密是明文?如果层缓存与 Kaniko 一样使用会怎样? 这绝对是一个问题,也是我们提倡让应用直接与 SM 对话或直接存储在 envvar 中的原因之一。 fs 是当今最好的便携式解决方案,但我们一直在努力改进产品以上是关于如何通过 gcloud cli args 或环境变量将 secretEnv 指定给 cloudbuild.yaml的主要内容,如果未能解决你的问题,请参考以下文章
减少 gcloud Google Compute Platform CLI 冗长
使用 gcloud 连接到 Google Datastore
gcloud cli 无法创建项目 - 您指定的项目 ID 已被另一个项目使用