Se la tua architettura utilizza più servizi, probabilmente hai bisogno di credenziali per abilitare la comunicazione tra i servizi. Cloud Build fornisce 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 Cloud Run Functions, Cloud Run o App Engine, puoi interagire in modo sicuro con la tua applicazione dai carichi di lavoro Cloud Build.
Prima di iniziare
-
Abilita le API Cloud Build e IAM, se non sono già abilitate.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli. Se prevedi di utilizzare questo account per creare credenziali di breve durata, devi anche abilitare l'API Service Account Credentials.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.Per utilizzare gli esempi di riga di comando in questa guida, installa e configura Google Cloud CLI.
Assicurati di aver creato il service account che vuoi utilizzare. Devi creare l'account nello stesso Google Cloud progetto in cui esegui le build.
Autorizzazioni IAM obbligatorie
Il account di servizio specificato dall'utente deve disporre dell'autorizzazione iam.serviceAccounts.getOpenIdToken.
- Concedi il ruolo Creatore token identità OpenID Connect service account (
roles/iam.serviceAccountOpenIdTokenCreator) al account di servizio specificato dall'utente nel progetto in cui hai creato il account di servizio.
Per istruzioni su come concedere ruoli IAM a un account di servizio, consulta Gestire l'accesso ai service account.
Metodi per ottenere un token ID
Esistono due modi per configurare i passaggi di build per ottenere i token ID:
- utilizza gcloud CLI
- inviare una richiesta diretta al server di metadati
Ottenere un token ID tramite gcloud
In questa sezione, il seguente snippet di codice mostra come utilizzare 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 ottenere il token ID, ad esempiohttp://www.example.com.SERVICE_ACCOUNT_IDè l'indirizzo email o l'ID univoco delaccount di serviziot specificato dall'utente. Ad esempio,service-account-name@project-id.iam.gserviceaccount.com.LOGS_BUCKET_LOCATIONè il bucket Cloud Storage in cui archiviare i log di build. Ad esempio,gs://mylogsbucket.
Inviare una richiesta diretta al server di metadati
In questa sezione, il seguente snippet di codice mostra come effettuare una richiesta diretta al server dei metadati per ottenere i 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 ottenere il token ID, ad esempiohttp://www.example.com.SERVICE_ACCOUNT_IDè l'indirizzo email o l'ID univoco delaccount di serviziot specificato dall'utente. Ad esempio,service-account-name@project-id.iam.gserviceaccount.com.LOGS_BUCKET_LOCATIONè il bucket Cloud Storage in cui archiviare i log di build. Ad esempio,gs://mylogsbucket.
Per ulteriori istruzioni sulla generazione e sull'utilizzo dei token ID nei tuoi workload, consulta Metodi per ottenere un token ID.
Passaggi successivi
- Trasferire dati tra i passaggi di build
- Eseguire il deployment in Cloud Run
- Esegui il deployment in App Engine