5

如何从 Google Cloud Build Pipeline访问我在Google Secret Manager中定义的变量?

4

1 回答 1

6

您可以使用标准Cloud Builder gcloud从 Cloud Build 访问密钥

但是,有两个问题:

  1. 如果您想在另一个 Cloud Build 步骤中使用密钥值,则必须将您的密钥存储在一个文件中,这是将先前值从一个步骤重用到另一个步骤的唯一方法
  2. 当前的 Cloud Builder gcloud 不是最新的(今天,2020 年 2 月 3 日)。您必须添加 gcloud 组件更新才能使用正确的版本。我为此打开了一个问题。
steps:
    - name: gcr.io/cloud-builders/gcloud
      entrypoint: "bash"
      args:
          - "-c"
          - |
              gcloud components update
              # Store the secret is a temporary file
              gcloud beta secrets versions access --secret=MySecretName latest > my-secret-file.txt
    - name: AnotherCloudBuildStepImage
      entrypoint: "bash"
      args:
          - "-c"
          - |
              # For getting the secret and pass it to a command/script
              ./my-script.sh $(cat my-secret-file.txt)

考虑将角色 Secret Manager Secret Accessor 授予roles/secretmanager.secretAccessorCloud Build 默认服务帐户<PROJECT_ID>@cloudbuild.gserviceaccount.com

编辑

您可以通过安装 gcloud CLI(并使用授权访问密钥的服务帐户进行初始化)或通过 API 调用从任何地方访问密钥

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://secretmanager.googleapis.com/v1beta1/projects/PROJECT_ID/secrets/MySecretName/versions/latest:access

注意:您会在数据字段中以 base64 编码格式收到密钥。使用前别忘了解码!

您必须在授予正确角色的服务帐户上生成访问令牌。这里我再次使用gcloud,因为它更容易。但是根据你的平台,使用最合适的方法。python脚本也可以完成这项工作。


编辑 2

Cloud Build 中现在存在一种获取机密的新方法。样板更少,更安全。现在看看并使用这种方式。

于 2020-02-03T09:45:06.243 回答