Autorizar o acesso entre serviços

Se sua arquitetura estiver usando vários serviços, provavelmente você vai precisar de credenciais para ativar a comunicação entre eles. O Cloud Build oferece suporte integrado ao padrão OpenID Connect (OIDC) para autenticação e autorização seguras entre serviços.

É possível usar o Cloud Build para gerar tokens de ID. Com esses tokens, você pode chamar endpoints seguros no Cloud Build.

Por exemplo, se você estiver executando um aplicativo de plataforma sem servidor, como funções do Cloud Run, Cloud Run ou App Engine, poderá interagir com segurança com o aplicativo nas cargas de trabalho do Cloud Build.

Antes de começar

  • Ative as APIs Cloud Build e IAM.

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    Ativar as APIs

  • Se você planeja usar essa conta para criar credenciais de curta duração, também é necessário ativar a API Service Account Credentials.

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    Ativar a API

  • Para usar os exemplos de linha de comando neste guia, instale e configure a Google Cloud CLI.

  • Certifique-se de ter criado a conta de serviço a ser usada. Você precisa criar a conta no mesmo Google Cloud projeto em que está executando as versões.

Permissões do IAM obrigatórias

A conta de serviço especificada pelo usuário precisa ter a permissão iam.serviceAccounts.getOpenIdToken.

Para instruções sobre como conceder papéis do IAM a uma conta de serviço, consulte Gerenciar o acesso a contas de serviço.

Métodos para receber um token de ID

Há duas maneiras de configurar as etapas de build para receber tokens de ID:

  • usar a CLI gcloud
  • enviar uma solicitação direta ao servidor de metadados

Receber um token de ID usando a gcloud

Nesta seção, o snippet de código a seguir demonstra como usar a CLI gcloud para receber tokens de 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
  }
}

Substitua:

  • TOKEN_AUDIENCE é o URL ou público-alvo para receber o token de ID, como http://www.example.com.
  • SERVICE_ACCOUNT_ID é o endereço de e-mail ou o ID exclusivo da conta de serviço especificada pelo usuário. Por exemplo, service-account-name@project-id.iam.gserviceaccount.com.
  • LOGS_BUCKET_LOCATION é o bucket do Cloud Storage para armazenar registros de build. Por exemplo, gs://mylogsbucket.

Enviar uma solicitação direta ao servidor de metadados

Nesta seção, o snippet de código a seguir demonstra como fazer uma solicitação direta ao servidor de metadados para receber tokens de 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
  }
}

Substitua:

  • TOKEN_AUDIENCE é o URL ou público-alvo para receber o token de ID, como http://www.example.com.
  • SERVICE_ACCOUNT_ID é o endereço de e-mail ou o ID exclusivo da conta de serviço especificada pelo usuário. Por exemplo, service-account-name@project-id.iam.gserviceaccount.com.
  • LOGS_BUCKET_LOCATION é o bucket do Cloud Storage para armazenar registros do build. Por exemplo, gs://mylogsbucket.

Para mais instruções sobre como gerar e usar tokens de ID nas suas cargas de trabalho, consulte Métodos para receber um token de ID.

A seguir