Se la tua architettura utilizza più servizi, probabilmente hai bisogno di credenziali per abilitare la comunicazione tra i servizi. Cloud Build fornisce il supporto integrato per lo standard OpenID Connect (OIDC) per l'autenticazione e l'autorizzazione sicure tra i servizi.
Puoi utilizzare Cloud Build per generare token ID. Con questi token, puoi chiamare endpoint sicuri da Cloud Build.
Ad esempio, se esegui un'applicazione di piattaforma serverless come le funzioni Cloud Run, Cloud Run o App Engine, puoi interagire in modo sicuro con la tua applicazione dai carichi di lavoro di Cloud Build.
Prima di iniziare
-
Enable the Cloud Build and IAM APIs.
Se prevedi di utilizzare questo account per creare credenziali di breve durata, devi abilitare anche l'API IAM Service Account Credentials.
Per utilizzare gli esempi a riga di comando in questa guida, installa e configura Google Cloud CLI.
Assicurati di aver creato l'account di servizio che vuoi utilizzare. Devi creare l'account nello stesso progetto Google Cloud in cui esegui le build.
Autorizzazioni IAM richieste
L'account di servizio specificato dall'utente deve disporre dell'autorizzazione iam.serviceAccounts.getOpenIdToken
.
- Concedi il ruolo Creatore token di identità OpenID Connect per l'account di servizio (
roles/iam.serviceAccountOpenIdTokenCreator
) all'account di servizio specificato dall'utente nel progetto in cui hai creato l'account di servizio.
Per istruzioni sulla concessione dei ruoli IAM a un account di servizio, consulta Gestire l'accesso agli account di servizio.
Metodi per ottenere un token ID
Esistono due modi per configurare i passaggi di compilazione per ottenere token ID:
- Utilizza l'interfaccia a riga di comando gcloud
- invia una richiesta diretta al server di metadati
Ottieni un token ID tramite gcloud
In questa sezione, il seguente snippet di codice illustra come utilizzare il parametro gcloud CLI per ottenere i token 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
}
}
Sostituisci quanto segue:
TOKEN_AUDIENCE
è l'URL o il pubblico di destinazione per il quale ottenere il token ID, ad esempiohttp://www.example.com
.SERVICE_ACCOUNT_ID
è l'indirizzo email o l'ID univoco per l'account di servizio specificato dall'utente. Ad esempio,service-account-name@project-id.iam.gserviceaccount.com
.LOGS_BUCKET_LOCATION
è il bucket Cloud Storage per archiviare i log di build. Ad esempio,gs://mylogsbucket
.
Invia una richiesta diretta al server di metadati
In questa sezione, il seguente snippet di codice mostra come effettuare una richiesta diretta al server di metadati per ottenere token 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
}
}
Sostituisci quanto segue:
TOKEN_AUDIENCE
è l'URL o il pubblico di destinazione per il quale ottenere il token ID, ad esempiohttp://www.example.com
.SERVICE_ACCOUNT_ID
è l'indirizzo email o l'ID univoco per l'account di servizio specificato dall'utente. Ad esempio,service-account-name@project-id.iam.gserviceaccount.com
.LOGS_BUCKET_LOCATION
è il bucket Cloud Storage per archiviare i log di build. Ad esempio,gs://mylogsbucket
.
Per ulteriori istruzioni su come generare e utilizzare gli ID token nei tuoi carichi di lavoro, consulta Metodi per ottenere un token ID.
Passaggi successivi
- Passare dati tra i vari passi della build
- Eseguire il deployment in Cloud Run
- Esegui il deployment in App Engine