Cloud Build を使用しているときに、Google Secrets Manager (GSM) から Cloud Function にシークレットを渡すにはどうすればよいですか? 以下のcloudbuild.yamlには 3 つのステップがあります。さらに、volumes
ビルドステップの間に永続的なストレージを作成するために使用しています。Cloud Build で GSM の取得が確認できました。ただし、yaml 形式でシークレットを渡そうとする--env-vars-file
と、次のエラーが発生します...
Already have image (with digest): gcr.io/cloud-builders/gcloud
ERROR: gcloud crashed (AttributeError): 'str' object has no attribute 'items'
クラウドビルド.yaml:
steps:
- name: 'gcr.io/cloud-builders/gcloud'
volumes:
- name: 'secrets'
path: '/secrets'
entrypoint: "bash"
args:
- "-c"
- |
echo -n 'gsm_secret:' > /secrets/my-secret-file.txt
- name: 'gcr.io/cloud-builders/gcloud'
volumes:
- name: 'secrets'
path: '/secrets'
entrypoint: "bash"
args:
- "-c"
- |
gcloud components update
gcloud beta secrets versions access --secret=MySecret latest >> /secrets/my-secret-file.txt
cat /secrets/my-secret-file.txt
- name: 'gcr.io/cloud-builders/gcloud'
volumes:
- name: 'secrets'
path: '/secrets'
args: [
'functions', 'deploy', 'gsm-foobar',
'--project=[...]',
'--trigger-http',
'--runtime=go111',
'--region=us-central1',
'--memory=256MB',
'--timeout=540',
'--entry-point=GSM',
'--allow-unauthenticated',
'--source=https://source.developers.google.com/[...]',
'--service-account', '[...]@appspot.gserviceaccount.com',
'--env-vars-file', '/secrets/my-secret-file.txt'
]
更新:/workspace
Cloud Build のステップ間の永続ストレージ
と同様に、ボリュームの使用は必要ありません。また、gcloud components update
今日のデフォルトの Cloud SDK バージョンは 279.0.0 であるため、不要になりました。
解決策:
steps:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: "bash"
args:
- "-c"
- |
echo "gsm_secret: $(gcloud beta secrets versions access --secret=MySecret latest)" > /workspace/my-secret-file.txt
cat /workspace/my-secret-file.txt
- name: 'gcr.io/cloud-builders/gcloud'
args: [
'functions', 'deploy', 'gsm-foobar',
[...]
'--entry-point=GSM',
'--allow-unauthenticated',
'--source=https://source.developers.google.com/[...]',
'--service-account', '[...]@appspot.gserviceaccount.com',
'--env-vars-file=/workspace/my-secret-file.txt'
]