Si en tu arquitectura usas varios servicios, es probable que necesites credenciales para habilitar la comunicación entre ellos. Cloud Build proporciona 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 extremos seguros desde Cloud Build.
Por ejemplo, si ejecutas una aplicación de plataforma sin servidores, como las funciones de Cloud Run, Cloud Run o App Engine, puedes interactuar de forma segura con tu aplicación desde las cargas de trabajo de Cloud Build.
Antes de comenzar
-
Enable the Cloud Build and IAM APIs.
Si planeas usar esta cuenta para crear credenciales de corta duración, también debes habilitar la API de credenciales de la cuenta de servicio de IAM.
Para usar los ejemplos de la línea de comandos de esta guía, instala y configura Google Cloud CLI.
Asegúrate de haber creado la cuenta de servicio que deseas usar. Debes crear la cuenta en el mismo proyecto de Google Cloud en el que ejecutas las compilaciones.
Permisos de IAM obligatorios
La cuenta de servicio especificada por el usuario debe tener el permiso iam.serviceAccounts.getOpenIdToken
.
- Otorga el rol de creador de tokens de identidad de OpenID Connect para cuentas de servicio (
roles/iam.serviceAccountOpenIdTokenCreator
) a la cuenta de servicio especificada por el usuario en el proyecto en el que creaste la cuenta de servicio.
Para obtener instrucciones sobre cómo otorgar roles de IAM a una cuenta de servicio, consulta Administra el acceso a las cuentas de servicio.
Métodos para obtener un token de ID
Existen dos maneras de configurar los pasos de compilación para obtener tokens de ID:
- usa la CLI de gcloud
- envía una solicitud directa al servidor de metadatos
Obtén un token de ID a través de gcloud
En esta sección, en el siguiente fragmento de código, se 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
}
}
Reemplaza lo siguiente:
TOKEN_AUDIENCE
es la URL o el público objetivo para el que se obtiene el token de ID, comohttp://www.example.com
.SERVICE_ACCOUNT_ID
es la dirección de correo electrónico 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 bucket de Cloud Storage para almacenar registros de compilación. Por ejemplo,gs://mylogsbucket
Envía una solicitud directa al servidor de metadatos
En esta sección, en el siguiente fragmento de código, se muestra cómo realizar 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
}
}
Reemplaza lo siguiente:
TOKEN_AUDIENCE
es la URL o el público objetivo para el que se obtiene el token de ID, comohttp://www.example.com
.SERVICE_ACCOUNT_ID
es la dirección de correo electrónico 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 bucket de Cloud Storage para almacenar registros de compilación. Por ejemplo,gs://mylogsbucket
Si deseas obtener instrucciones adicionales para generar y usar tokens de ID en tus cargas de trabajo, consulta Métodos para obtener un token de ID.