Autorizzare l'accesso da servizio a servizio

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 della 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

  • Enable the Cloud Build and IAM APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  • 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 richieste

Il account di servizio specificato dall'utente deve disporre dell'autorizzazione iam.serviceAccounts.getOpenIdToken.

Per istruzioni su come concedere ruoli IAM a un account di servizio, vedi 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, lo snippet di codice riportato di seguito 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 esempio http://www.example.com.
  • SERVICE_ACCOUNT_ID è l'indirizzo email o l'ID univoco per ilaccount 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 esempio http://www.example.com.
  • SERVICE_ACCOUNT_ID è l'indirizzo email o l'ID univoco per ilaccount 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