【问题标题】:Access GCP Secret during Cloud Build build step在 Cloud Build 构建步骤中访问 GCP Secret
【发布时间】:2022-02-10 02:58:29
【问题描述】:

假设我有一个如下所示的 cloudbuild.yaml 文件:

steps:
  - name: 'gcr.io/cloud-builders/docker'
    id: build
    args: ['build', '-t', 'us.gcr.io/${PROJECT_ID}/image_name', '--build-arg', 'secret=$$SECRET', '.']
    secretEnv: ['SECRET']
 
images:
  - 'us.gcr.io/${PROJECT_ID}/image_name'

availableSecrets:
  secretManager:
  - versionName: projects/project/secrets/my_secret/versions/latest
    env: 'SECRET'

现在,--build-arg 正在为 Docker secret arg 分配值 $SECRET,而不是实际存储在密钥中的值。在此步骤中如何访问秘密值?我可以在网上找到的所有示例都说要添加一个 bash 入口点,但仅适用于实际上并未执行构建调用的步骤。

【问题讨论】:

    标签: google-cloud-platform google-cloud-build


    【解决方案1】:

    这是 Cloud Build 和 Secret Manager 集成的常见问题。您只能在脚本中访问秘密,而不是在入口点和参数中(您的情况)

    试试看

    steps:
      - name: 'gcr.io/cloud-builders/docker'
        id: build
        entrypoint: 'bash'
        args: 
          - -c
          - |
              docker build -t us.gcr.io/${PROJECT_ID}/image_name --build-arg secret=$$SECRET .
        secretEnv: ['SECRET']
    

    【讨论】:

    • 执行此操作时出现错误:Starting Step #0 - "build" Step #0 - "build": Already have image (with digest): gcr.io/cloud-builders/docker Step #0 - "build": bad flag syntax: -----END Step #0 - "build": See 'docker build --help'.
    • 似乎我得到了上述错误,因为我的秘密以“--”开头,这被解释为一个参数
    • 您可以在双引号secret="$$SECRET"之间添加您的秘密
    • 是的,这就是我修复错误的方法。感谢您的帮助!
    【解决方案2】:

    将秘密分配给 docker args 的语法似乎与普通环境变量的语法略有不同。下面的sn-p取自我自己的一个工作项目并正确访问了secret,与普通环境变量相比可以看出区别:

    ...
        env:
          - PROJECT_ID=$PROJECT_ID
          - NO_DEPLOY=$_NO_DEPLOY
          - NO_E2E=$_NO_E2E
        secretEnv:
          - "EXAMPLE_API_KEY"
        args:
          - --destination=gcr.io/$PROJECT_ID/api
          - --cache=true
          - --build-arg=PROJECT_ID
          - --build-arg=EXAMPLE_API_KEY
          - --build-arg=NO_DEPLOY
          - --build-arg=NO_E2E
    
    availableSecrets:
      secretManager:
        - versionName: projects/$PROJECT_ID/secrets/example-api-key/versions/latest
          env: "EXAMPLE_API_KEY"
    ...
    

    【讨论】:

    • 我可能遗漏了一些东西,但现在我将secret 分配给SECRET 仍然不包含SECRET 中的实际值
    猜你喜欢
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2023-03-07
    • 1970-01-01
    • 2019-05-23
    相关资源
    最近更新 更多