🌊

Cloud BuildからSecret Managerの値を参照する方法

2024/08/04に公開

やりたいこと

Secret Managerに登録した値をCloud Buildから参照したい!

TL;DR

availableSecrets を用いる

availableSecrets:
  secretManager:
    - versionName: projects/$PROJECT_ID/secrets/$SECRET_NAME/versions/latest
      env: 'env_name'

概要

Cloud BuildでSecret Managerの秘密情報を参照することで、セキュアにビルドプロセスを定義する方法を記載します。

手順

1. 前提条件

  • GCPプロジェクトが設定されていること
  • Cloud Build APIが有効になっていること
  • Secret Manager APIが有効になっていること
  • 必要なシークレットがSecret Managerに登録されていること

以下の環境変数を設定します。

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export SECRET_NAME="your-secret-name"

2. Cloud Buildサービスアカウントにアクセス権を付与

gcloud secrets add-iam-policy-binding $SECRET_NAME \
    --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
    --role='roles/secretmanager.secretAccessor'

3. cloudbuild.yamlの設定

secretEnvフィールドでシークレットの環境変数を指定します。
参照時には $$ で secretEnv 名を指定します。

steps:
  - id: "sample-project:build-docker-image"
    name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args: ['-c', 'echo $$SECRET_KEY_NAME']
    secretEnv: [
      'SECRET_KEY_NAME',
    ]

availableSecrets:
  secretManager:
    - versionName: projects/$PROJECT_ID/secrets/$_SECRET_NAME/versions/latest
      env: 'SECRET_KEY_NAME'

options:
  dynamic_substitutions: true
  machineType: E2_HIGHCPU_8
  logging: CLOUD_LOGGING_ONLY

参考手順

1. 前提条件の設定

まず、GCPプロジェクトが適切に設定されていることを確認します。以下のコマンドを実行して、Cloud BuildとSecret ManagerのAPIを有効にします。

gcloud services enable cloudbuild.googleapis.com
gcloud services enable secretmanager.googleapis.com

次に、Secret Managerに秘密情報を登録します。

echo -n "YOUR_SENDGRID_API_KEY" | gcloud secrets create $SECRET_NAME --data-file=-

2. Cloud Buildサービスアカウントにアクセス権を付与

Cloud Buildのサービスアカウントに、Secret Managerからシークレットを読み取る権限を付与します。

gcloud secrets add-iam-policy-binding $SECRET_NAME \
    --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
    --role='roles/secretmanager.secretAccessor'

3. cloudbuild.yamlの設定

cloudbuild.yamlファイルを作成し、ビルドステップを定義します。
ここでは、Dockerイメージをビルドし、シークレットを環境変数として渡す例を示します。

  • stepsセクションで、Dockerイメージのビルドステップを定義します。
  • secretEnvフィールドで、使用するシークレットの環境変数名を指定します。
  • availableSecretsセクションで、Secret Managerから参照するシークレットを指定します。

4. ビルドの実行

Cloud Buildをトリガーしてビルドを実行します。以下のコマンドを使用します。

gcloud builds submit --config=cloudbuild.yaml . --substitutions=_SECRET_NAME=$SECRET_NAME

ビルドが成功すると、Secret Managerに登録されたシークレットが参照され、ビルドプロセスに利用されます。

Discussion