如何通过 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 CLI 命令的输出消息

减少 gcloud Google Compute Platform CLI 冗长

使用 gcloud 连接到 Google Datastore

gcloud cli 无法创建项目 - 您指定的项目 ID 已被另一个项目使用

如何在 gcloud 和 minikube 之间切换 kubectl 集群

我可以完全从 CLI 或脚本创建和配置 GCP 项目 + Firebase 吗?