Übersicht In Cloud Build - Verwenden von Docker in Schritten - Wenn Sie auch Application Default Credential von Docker verwenden möchten, übergeben Sie "--network = cloudbuild".
Verwenden Sie beispielsweise berglas. Wenn Sie in der Umgebungsvariablen einen Verweis auf vertrauliche Informationen in einem bestimmten Format einfügen, ruft berglas den Wert ab. Wenn Sie beispielsweise "FOO = sm: // $ PROJECT_ID / $ SECRET_NAME berglas exec --bar" ausführen, wird der vom Secret Manager abgerufene Wert in die Umgebungsvariable "FOO" eingefügt und "bar" ausgeführt.
Geben Sie im Secret Manager zunächst einen Wert in das Geheimnis "TEST" ein.
$ echo -n "supersecret" | gcloud beta secrets create TEST --replication-policy automatic --data-file=-
Fügen Sie außerdem die Rolle des geheimen Zugriffs zum Cloud Build-Ausführungsdienstkonto hinzu.
$ gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:$(gcloud projects describe $PROJECT_ID --format 'value(projectNumber)')@cloudbuild.gserviceaccount.com" \
--role roles/secretmanager.secretAccessor
Die Umgebungsvariable wird von "env" ausgegeben, um das Experiment zu vereinfachen. Sie wird jedoch im Protokoll aufgezeichnet. Verwenden Sie sie daher nicht so, wie sie ist, wenn Sie wirklich mit geheimen Informationen umgehen.
Lassen Sie uns zunächst das Bild von berglas direkt verwenden.
cloudbuild.yaml
steps:
- name: 'asia-docker.pkg.dev/berglas/berglas/berglas:latest'
args:
- 'exec'
- '--'
- 'env'
env:
- 'TEST=sm://$PROJECT_ID/TEST'
Lass es uns jetzt laufen lassen.
$ gcloud builds submit --config cloudbuild.yaml --no-source
...
TEST=supersecret
...
Ich konnte den restaurierten TEST sehen.
Versuchen Sie als nächstes, berglas über "Docker Run" im Build-Schritt zu verwenden.
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args:
- 'run'
- '-e'
- 'TEST=sm://$PROJECT_ID/TEST'
- 'asia-docker.pkg.dev/berglas/berglas/berglas:latest'
- 'exec'
- '--'
- 'env'
Dann ...
$ gcloud builds submit --config cloudbuild.yaml --no-source
...
failed to access secret sm://$PROJECT_ID/TEST: failed to access secret: rpc error: code = Unauthenticated desc = transport: Get "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform": dial tcp 169.254.169.254:80: i/o timeout
...
Ich bekomme eine Fehlermeldung. Es scheint, dass Sie nicht anfordern können, Application Default Credential aus dem Docker-Container abzurufen.
Mal sehen, was für ein Netzwerk es gibt.
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args:
- 'network'
- 'ls'
$ gcloud builds submit --config cloudbuild.yaml --no-source
...
NETWORK ID NAME DRIVER SCOPE
ed09d11c5bd1 bridge bridge local
a01cfc17c577 cloudbuild bridge local
f3426b77657b host host local
9b756bf55527 none null local
...
Wenn Sie den Anwendungsstandard-Berechtigungsnachweis verwenden möchten, müssen Sie das Cloudbuild-Netzwerk übergeben. (Host
ist nicht gut.)
Dies ist auch dokumentiert.
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args:
- 'run'
- '--network=cloudbuild' #hinzufügen
- '-e'
- 'TEST=sm://$PROJECT_ID/TEST'
- 'asia-docker.pkg.dev/berglas/berglas/berglas:latest'
- 'exec'
- '--'
- 'env'
$ gcloud builds submit --config cloudbuild.yaml --no-source
...
TEST=supersecret
...
Ich konnte es sicher sehen.
Wenn Sie den Docker-Container im Schritt "Cloud-Erstellung" verwenden und auch den Anwendungsstandard-Berechtigungsnachweis aus dem Container verwenden möchten, übergeben Sie "--network = cloudbuild".
Recommended Posts