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 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 IAM Service Account Credentials.
Para usar los ejemplos de 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 Creador de tokens de identidad de OpenID Connect de cuenta 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
Hay 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, 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 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.