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 theserviceusage.services.enable
permission. Learn how to grant roles. 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 theserviceusage.services.enable
permission. Learn how to grant roles.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
.
- Asigna el rol Creador de tokens de identidad OpenID Connect de cuenta de servicio (
roles/iam.serviceAccountOpenIdTokenCreator
) a la cuenta de servicio que hayas especificado en el proyecto en el que la hayas creado.
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, comohttp://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, comohttp://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.