Autorizza accesso tra servizi

Se la tua architettura utilizza più servizi, probabilmente avrai bisogno delle 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 Functions, Cloud Run o App Engine, puoi interagire in modo sicuro con la tua applicazione dall'interno dei carichi di lavoro di Cloud Build.

Prima di iniziare

  • Abilita le API Cloud Build and IAM.

    Abilita le API

  • Se prevedi di utilizzare questo account per creare credenziali di breve durata, devi abilitare anche l'API IAM Service Account Credentials.

    Abilita l'API

  • Per utilizzare gli esempi di 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 avere l'autorizzazione iam.serviceAccounts.getOpenIdToken.

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 build per ottenere i token ID:

  • utilizzare gcloud CLI
  • invia una richiesta diretta al server dei metadati

Ottieni 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 cui ottenere il token ID, ad esempio http://www.example.com.
  • SERVICE_ACCOUNT_ID è l'indirizzo email o l'ID univoco dell'account di servizio 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 delle build. Ad esempio, gs://mylogsbucket.

Invia una richiesta diretta al server dei metadati

In questa sezione, lo snippet di codice riportato di seguito illustra 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 cui ottenere il token ID, ad esempio http://www.example.com.
  • SERVICE_ACCOUNT_ID è l'indirizzo email o l'ID univoco dell'account di servizio 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 l'utilizzo di token ID nei carichi di lavoro, consulta Metodi per ottenere un token ID.

Passaggi successivi