Si votre architecture utilise plusieurs services, vous aurez probablement besoin d'identifiants pour permettre la communication entre les services. Cloud Build est compatible avec la norme OpenID Connect (OIDC) pour l'authentification et l'autorisation sécurisées entre les services.
Vous pouvez utiliser Cloud Build pour générer des jetons d'ID. Avec ces jetons, vous pouvez appeler des points de terminaison sécurisés depuis Cloud Build.
Par exemple, si vous exécutez une application de plate-forme sans serveur telle que des fonctions Cloud Run, Cloud Run ou App Engine, vous pouvez interagir de manière sécurisée avec votre application à partir des charges de travail Cloud Build.
Avant de commencer
-
Enable the Cloud Build and IAM APIs.
Si vous prévoyez d'utiliser ce compte pour créer des identifiants éphémères, vous devez également activer l'API IAM Service Account Credentials.
Pour utiliser les exemples de ligne de commande de ce guide, installez et configurez Google Cloud CLI.
Assurez-vous d'avoir créé le compte de service que vous souhaitez utiliser. Vous devez créer le compte dans le projet Google Cloud dans lequel vous exécutez des compilations.
Autorisations IAM requises
Votre compte de service spécifié par l'utilisateur doit disposer de l'autorisation iam.serviceAccounts.getOpenIdToken
.
- Attribuez le rôle Créateur de jetons d'identité OpenID Connect du compte de service (
roles/iam.serviceAccountOpenIdTokenCreator
) à votre compte de service spécifié par l'utilisateur dans le projet dans lequel vous l'avez créé.
Pour savoir comment attribuer des rôles IAM à un compte de service, consultez la section Gérer l'accès aux comptes de service.
Méthodes permettant d'obtenir un jeton d'ID
Il existe deux façons de configurer vos étapes de compilation pour obtenir des jetons d'ID:
- utiliser la CLI gcloud ;
- envoyer une requête directe au serveur de métadonnées ;
Obtenir un jeton d'ID via gcloud
Dans cette section, l'extrait de code suivant montre comment utiliser la CLI gcloud pour obtenir des jetons d'ID:
YAML
steps:
- name: 'gcr.io/cloud-builders/gcloud'
script: 'gcloud auth print-identity-token --audiences ${_TOKEN_AUDIENCE} > /workspace/identity_token.txt'
env:
- _TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}
service_account: '$_SERVICE_ACCOUNT'
substitutions:
_TOKEN_AUDIENCE: 'TOKEN_AUDIENCE'
_SERVICE_ACCOUNT_ID: 'SERVICE_ACCOUNT_ID'
_SERVICE_ACCOUNT: 'projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}'
logsBucket: 'LOGS_BUCKET_LOCATION'
options:
logging: GCS_ONLY
dynamic_substitutions: true
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/gcloud",
"script": "gcloud auth print-identity-token --audiences ${_TOKEN_AUDIENCE} > /workspace/identity_token.txt"
"env": [
"_TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}"
]
}
],
"service_account": "$_SERVICE_ACCOUNT",
"substitutions": {
"_TOKEN_AUDIENCE": "TOKEN_AUDIENCE",
"_SERVICE_ACCOUNT_ID": "SERVICE_ACCOUNT_ID",
"_SERVICE_ACCOUNT": "projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}"
},
"logsBucket": "LOGS_BUCKET_LOCATION",
"options": {
"logging": "GCS_ONLY",
"dynamic_substitutions": true
}
}
Remplacez les éléments suivants :
TOKEN_AUDIENCE
correspond à l'URL ou à l'audience cible pour laquelle vous souhaitez obtenir le jeton d'ID, par exemplehttp://www.example.com
.SERVICE_ACCOUNT_ID
est l'adresse e-mail ou l'ID unique du compte de service spécifié par l'utilisateur. Exemple :service-account-name@project-id.iam.gserviceaccount.com
LOGS_BUCKET_LOCATION
est le bucket Cloud Storage où stocker les journaux de compilation. Exemple :gs://mylogsbucket
Envoyer une requête directe au serveur de métadonnées
Dans cette section, l'extrait de code suivant montre comment envoyer une requête directe au serveur de métadonnées pour obtenir des jetons d'ID:
YAML
steps:
- name: 'gcr.io/cloud-builders/curl'
id: 'printTokenFromCurl'
script: |
curl -H 'Metadata-Flavor: Google' http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=${_TOKEN_AUDIENCE} -o /workspace/identity_token.txt
env:
- _TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}
service_account: '$_SERVICE_ACCOUNT'
substitutions:
_TOKEN_AUDIENCE: 'TOKEN_AUDIENCE'
_SERVICE_ACCOUNT_ID: 'SERVICE_ACCOUNT_ID'
_SERVICE_ACCOUNT: 'projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}'
logsBucket: 'LOGS_BUCKET_LOCATION'
options:
logging: GCS_ONLY
dynamic_substitutions: true
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/curl",
"id": "printTokenFromCurl"
"script": "curl -H 'Metadata-Flavor: Google' http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=${_TOKEN_AUDIENCE} -o /workspace/identity_token.txt"
"env":
"_TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}"
}
],
"service_account": "$_SERVICE_ACCOUNT",
"substitutions": {
"_TOKEN_AUDIENCE": "TOKEN_AUDIENCE",
"_SERVICE_ACCOUNT_ID": "SERVICE_ACCOUNT_ID",
"_SERVICE_ACCOUNT": "projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}"
},
"logsBucket": "LOGS_BUCKET_LOCATION",
"options": {
"logging": "GCS_ONLY",
"dynamic_substitutions": true
}
}
Remplacez les éléments suivants :
TOKEN_AUDIENCE
correspond à l'URL ou à l'audience cible pour laquelle vous souhaitez obtenir le jeton d'ID, par exemplehttp://www.example.com
.SERVICE_ACCOUNT_ID
est l'adresse e-mail ou l'ID unique du compte de service spécifié par l'utilisateur. Exemple :service-account-name@project-id.iam.gserviceaccount.com
LOGS_BUCKET_LOCATION
est le bucket Cloud Storage où stocker les journaux de compilation. Exemple :gs://mylogsbucket
Pour obtenir des instructions supplémentaires sur la génération et l'utilisation des jetons d'ID dans vos charges de travail, consultez la section Méthodes d'obtention d'un jeton d'ID.
Étape suivante
- Transmettre des données entre les étapes de compilation
- Déployer sur Cloud Run
- Déployer dans App Engine