谷歌云构建秘密未被取代

Kev*_*off 2 google-cloud-platform google-cloud-build google-secret-manager

我正在尝试从文件中的机密管理器检索机密cloudbuild.yaml,但找不到方法。

- name: 'gcr.io/cloud-builders/gcloud'
    args:
      - beta
      - run
      - deploy
      - ${REPO_NAME}
      - --region=europe-west2
      - --image=gcr.io/$PROJECT_ID/${REPO_NAME}:$COMMIT_SHA
      - --service-account=${_SERVICE_ACCOUNT}
      - --cpu=2
      - --allow-unauthenticated
      - --set-env-vars=GCP_DB_INSTANCE_NAME=$$GCP_DB_INSTANCE_NAME
      - --set-env-vars=PG_DATABASE=$$PG_DATABASE
      - --set-env-vars=PG_PASSWORD=$$PG_PASSWORD
      - --set-env-vars=PG_USER=$$PG_USER
      - --set-env-vars=GCP_PROJECT=$$GCP_PROJECT
      - --set-env-vars=GCP_BUCKET_NAME=$$GCP_BUCKET_NAME
      - --add-cloudsql-instances=$$GCP_DB_INSTANCE_NAME
    secretEnv: [ 'GCP_DB_INSTANCE_NAME', 'PG_DATABASE', 'PG_PASSWORD', 'PG_USER', 'GCP_PROJECT', 'GCP_BUCKET_NAME' ]
availableSecrets:
  secretManager:
    - versionName: projects/$PROJECT_ID/secrets/GCP_DB_INSTANCE_NAME/versions/latest
      env: GCP_DB_INSTANCE_NAME
    - versionName: projects/$PROJECT_ID/secrets/PG_DATABASE/versions/latest
      env: PG_DATABASE
    - versionName: projects/$PROJECT_ID/secrets/PG_PASSWORD/versions/latest
      env: PG_PASSWORD
    - versionName: projects/$PROJECT_ID/secrets/PG_USER/versions/latest
      env: PG_USER
    - versionName: projects/$PROJECT_ID/secrets/GCP_PROJECT/versions/latest
      env: GCP_PROJECT
    - versionName: projects/$PROJECT_ID/secrets/GCP_BUCKET_NAME/versions/latest
      env: GCP_BUCKET_NAME
Run Code Online (Sandbox Code Playgroud)

但变量没有被替换。我已将这些值记录在我的 api 中,这就是我得到的:

2021-08-05T22:31:33.437926Z key value PG_DATABASE $PG_DATABASE
2021-08-05T22:31:33.437965Z key value PG_USER $PG_USER
2021-08-05T22:31:33.437985Z key value PG_PASSWORD $PG_PASSWORD
2021-08-05T22:31:33.438063Z key value GCP_PROJECT $GCP_PROJECT
2021-08-05T22:31:33.438093Z key value GCP_BUCKET_NAME $GCP_BUCKET_NAME
Run Code Online (Sandbox Code Playgroud)

我怎样才能替换我步骤中的秘密?

set*_*rgo 7

与其在构建时注入这些变量,不如在运行时注入它们。正如所写,任何有权查看 Cloud Run 服务的人都可以以明文形式查看这些机密。这是因为它们在构建步骤中被解析并设置为环境变量。此外,如果您要撤销或更改这些机密之一,Cloud Run 服务将继续使用旧值运行。

更好的解决方案是使用本机 Cloud Run Secret Manager 集成,它可以在实例启动时解析密钥。它看起来像这样:

- name: 'gcr.io/cloud-builders/gcloud'
  args:
    - run
    - deploy
    - ${REPO_NAME}
    - --region=europe-west2
    - --image=gcr.io/$PROJECT_ID/${REPO_NAME}:$COMMIT_SHA
    - --service-account=${_SERVICE_ACCOUNT}
    - --cpu=2
    - --allow-unauthenticated
    - --set-secrets=GCP_DB_INSTANCE_NAME=projects/$PROJECT_ID/secrets/GCP_DB_INSTANCE_NAME:latest,PG_DATABASE=projects/$PROJECT_ID/secrets/PG_DATABASE:latest // continue
    - --add-cloudsql-instances=$$GCP_DB_INSTANCE_NAME
Run Code Online (Sandbox Code Playgroud)

Cloud Run 将在启动新实例时自动解析密钥。您需要授予$SERVICE_ACCOUNT访问秘密的权限。