Autorizar el acceso entre servicios

Si tu arquitectura usa varios servicios, es probable que necesites credenciales para habilitar la comunicación entre ellos. Cloud Build ofrece compatibilidad integrada con el estándar OpenID Connect (OIDC) para la autenticación y autorización seguras entre servicios.

Puedes usar Cloud Build para generar tokens de ID. Con estos tokens, puedes llamar a endpoints seguros desde Cloud Build.

Por ejemplo, si ejecutas una aplicación de plataforma sin servidor como Cloud Run functions, Cloud Run o App Engine, puedes interactuar de forma segura con tu aplicación desde las cargas de trabajo de Cloud Build.

Antes de empezar

  • 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

  • Si tienes previsto usar esta cuenta para crear credenciales de duración reducida, también debes habilitar la 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

  • Para usar los ejemplos de línea de comandos de esta guía, instala y configura la CLI de Google Cloud.

  • Asegúrate de haber creado la cuenta de servicio que quieras usar. Debes crear la cuenta en el mismo Google Cloud proyecto en el que estés ejecutando compilaciones.

Permisos de gestión de identidades y accesos necesarios

La cuenta de servicio que especifiques debe tener el permiso iam.serviceAccounts.getOpenIdToken.

Para obtener instrucciones sobre cómo conceder roles de gestión de identidades y accesos a una cuenta de servicio, consulta el artículo Gestionar el acceso a cuentas de servicio.

Métodos para obtener un token de ID

Hay dos formas de configurar los pasos de compilación para obtener tokens de ID:

  • Usar la CLI de gcloud
  • enviar una solicitud directa al servidor de metadatos

Obtener un token de ID a través de gcloud

En esta sección, el siguiente fragmento de código muestra cómo usar la CLI de gcloud para obtener 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
  }
}

Haz los cambios siguientes:

  • TOKEN_AUDIENCE es la URL o la audiencia objetivo para obtener el token de ID, como http://www.example.com.
  • SERVICE_ACCOUNT_ID es la dirección de correo o el ID único de la cuenta de servicio especificada por el usuario. Por ejemplo, service-account-name@project-id.iam.gserviceaccount.com.
  • LOGS_BUCKET_LOCATION es el segmento de Cloud Storage en el que se almacenan los registros de compilación. Por ejemplo, gs://mylogsbucket.

Enviar una solicitud directa al servidor de metadatos

En esta sección, el siguiente fragmento de código muestra cómo hacer una solicitud directa al servidor de metadatos para obtener 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
  }
}

Haz los cambios siguientes:

  • TOKEN_AUDIENCE es la URL o la audiencia objetivo para obtener el token de ID, como http://www.example.com.
  • SERVICE_ACCOUNT_ID es la dirección de correo o el ID único de la cuenta de servicio especificada por el usuario. Por ejemplo, service-account-name@project-id.iam.gserviceaccount.com.
  • LOGS_BUCKET_LOCATION es el segmento de Cloud Storage para almacenar los registros de compilación. Por ejemplo, gs://mylogsbucket.

Para obtener más instrucciones sobre cómo generar y usar tokens de ID en tus cargas de trabajo, consulta Métodos para obtener un token de ID.

Siguientes pasos