Si tu arquitectura usa varios servicios, es probable que necesites credenciales para permitir la comunicación entre servicios. Cloud Build proporciona compatibilidad integrada con OpenID Connect (OIDC) para autenticación y autorización seguras entre servicios.
Puedes usar Cloud Build para generar tokens de ID. Con estos tokens, pueden llamar a extremos seguros desde Cloud Build.
Por ejemplo, si ejecutas una aplicación de plataforma sin servidores como Cloud Run Functions, Cloud Run o App Engine, puedes interactuar 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 IAM Service Account Credentials.
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 los que ejecutas compilaciones.
Permisos de IAM obligatorios
Tu cuenta de servicio especificada por el usuario debe tener la
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.
Si quieres obtener instrucciones para 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 gcloud CLI
- enviar una solicitud directa al servidor de metadatos
Obtén un token de ID a través de gcloud
En esta sección, el siguiente fragmento de código demuestra cómo usar el gcloud CLI 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 obtener el token de ID, por ejemplo,http://www.example.com
SERVICE_ACCOUNT_ID
es la dirección de correo electrónico o el ID único para 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, el siguiente fragmento de código demuestra cómo hacer una solicitud 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 obtener el token de ID, por ejemplo,http://www.example.com
SERVICE_ACCOUNT_ID
es la dirección de correo electrónico o el ID único para 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
Para obtener instrucciones adicionales sobre cómo generar y usar tokens de ID en tus cargas de trabajo, Consulta Métodos para obtener un token de ID.