Avec Cloud Build
--Utilisation de Docker par étapes --Je souhaite également utiliser les informations d'identification par défaut de l'application de Docker
Ensuite, c'est une histoire à passer --network = cloudbuild
.
Par exemple, utilisez berglas.
Si vous mettez une référence à des informations confidentielles dans un format spécifique dans la variable d'environnement, berglas récupérera la valeur.
Par exemple, si vous exécutez FOO = sm: // $ PROJECT_ID / $ SECRET_NAME berglas exec --bar
, la valeur extraite de Secret Manager sera placée dans la variable d'environnement FOO
et bar
sera exécutée.
Tout d'abord, dans Secret Manager, entrez une valeur dans le secret appelé «TEST».
$ echo -n "supersecret" | gcloud beta secrets create TEST --replication-policy automatic --data-file=-
Ajoutez également le rôle Secret Accesor au compte de service d'exécution Cloud Build.
$ 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
La variable d'environnement est sortie par env
pour simplifier l'expérience, mais elle sera enregistrée dans le journal, donc veillez à ne pas l'utiliser telle quelle si vous gérez vraiment des informations secrètes.
Tout d'abord, utilisons directement l'image de berglas.
cloudbuild.yaml
steps:
- name: 'asia-docker.pkg.dev/berglas/berglas/berglas:latest'
args:
- 'exec'
- '--'
- 'env'
env:
- 'TEST=sm://$PROJECT_ID/TEST'
Lançons-le maintenant.
$ gcloud builds submit --config cloudbuild.yaml --no-source
...
TEST=supersecret
...
J'ai pu voir le TEST restauré.
Ensuite, essayez d'utiliser berglas via docker run
dans l'étape de construction.
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'
Ensuite ...
$ 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
...
J'obtiens une erreur. Il semble que vous ne puissiez pas demander à obtenir les informations d'identification par défaut de l'application à partir du conteneur Docker.
Voyons quel type de réseau existe.
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
...
Si vous souhaitez utiliser les informations d'identification par défaut de l'application, vous devez passer le réseau cloudbuild
. ("Host" n'est pas bon.)
Ceci est également documenté.
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args:
- 'run'
- '--network=cloudbuild' #ajouter à
- '-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
...
J'ai pu le voir en toute sécurité.
Si vous souhaitez utiliser le conteneur Docker dans l'étape Cloud Build et également utiliser les informations d'identification par défaut de l'application du conteneur, transmettez --network = cloudbuild
.