PROJECT_ID env 和 Secret Manager 访问权限

PROJECT_ID env and Secret Manager Access

我想在云构建步骤中使用 Secret Manager 将凭据存储到我们的人工制品中。我使用类似于以下的构建来工作:

steps:
- name: 'busybox:glibc'
  entrypoint: 'sh'
  args: ['-c', 'env']
  secretEnv: ['SECRET_VALUE']
availableSecrets:
  secretManager:
  - versionName: "projects/PROJECT_ID/secrets/TEST-SECRET/versions/1"
    env: 'SECRET_VALUE'

一切都很好,没问题 - 然后我尝试稍微改进一下:

steps:
- name: 'busybox:glibc'
  entrypoint: 'sh'
  args: ['-c', 'env']
  secretEnv: ['SECRET_VALUE']
availableSecrets:
  secretManager:
  - versionName: "projects/$PROJECT_ID/secrets/TEST-SECRET/versions/1"
    env: 'SECRET_VALUE'

但随后它抛出错误: ERROR: (gcloud.builds.submit) INVALID_ARGUMENT: failed to get secret name from secret version "projects/$PROJECT_ID/secrets/TEST-SECRET/versions/1"

我已经能够添加一个 TRIGGER 级别的环境变量 (SECRET_MANAGER_PROJECT_ID),而且效果很好。唯一的问题是它是一个触发器环境,它在重建时不可用,这会破坏很多东西。

有谁知道如何在不使用触发器参数的情况下从 CloudBuild 中获取 Secret Manager 的 PROJECT_ID?

目前无法在机密字段中设置动态值。我已经将此反馈直接提供给 Google Cloud PM,它已被考虑在内,但我没有更多信息可以分享,尤其是可用性方面。


编辑 1

(1 月 22 日)。感谢 Seza443 评论,我再次测试,现在它可以使用自动填充的变量(PROJECT_ID 和 PROJECT_NUMBER),但也可以使用客户定义的替换变量!

改用$PROJECT_NUMBER

https://cloud.google.com/build/docs/configuring-builds/substitute-variable-values#using_default_substitutions

Cloud Build 现在似乎允许在构建配置的 availableSecrets 字段中使用替换变量。

来自Google云的documentation on using secrets:

After all the build steps, add an availableSecrets field to specify the secret version and environment variables to use for your secret. You can include substitution variables in the value of the secretVersion field. You can specify more than one secret in a build.

我能够像这样在自己的构建配置中使用 $PROJECT_ID 变量:

...
availableSecrets:
  secretManager:
    - versionName: projects/$PROJECT_ID/secrets/api-key/versions/latest
      env: API_KEY

当然,上面引用的文档与推荐的 configuration file schema 之间似乎(至少目前)存在一些差异。在文档中,他们提到 secretVersion,但似乎已更改为 versionName。在任何一种情况下,它似乎都能正常工作。