🌊
Cloud BuildからSecret Managerの値を参照する方法
やりたいこと
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