En esta página, se explica cómo funciona la cuenta de servicio de Cloud Build y cómo otorgar acceso a la cuenta de servicio para otros proyectos.
¿Qué es la cuenta de servicio Cloud Build?
Cloud Build ejecuta sus compilaciones mediante una cuenta de servicio, una Cuenta de Google especial que ejecuta compilaciones a tu nombre. El correo electrónico de la cuenta de servicio de Cloud Build es [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com
.
Puedes ver las cuentas de servicio de tu proyecto a través del Menú de IAM de Cloud Console.
Cuando habilitas la API de Cloud Build, la cuenta de servicio se crea de forma automática y se le otorga la función Cloud Build Service Account
para tu proyecto. Esta función es suficiente para varias tareas, entre otras:
- Obtener código a partir del repositorio de código fuente de tu proyecto
- Descargar archivos de cualquier depósito de Cloud Storage que sea propiedad de tu proyecto
- Guardar registros de compilación en Cloud Logging
- Enviar imágenes de Docker a Container Registry
- Extraer imágenes base de Container Registry
La cuenta de servicio realiza estas acciones solo como se requiere para ejecutar tu compilación. Por ejemplo, la cuenta de servicio no recupera el código de tu Cloud Source Repository, a menos que le indiques que lo haga.
Otorga acceso adicional
Los permisos predeterminados de la cuenta de servicio no permiten que la cuenta realice ciertas acciones, como realizar implementaciones en App Engine o Cloud Functions, administrar recursos de Compute Engine y Google Kubernetes Engine, o acceder al depósito de Cloud Storage.
Si quieres habilitar tu cuenta de servicio para que realice estas acciones, otorga funciones de IAM adicionales a la cuenta.
Para otorgar una función de IAM a una cuenta de servicio de Cloud Build, completa los pasos siguientes:
Abre la página Configuración (Settings) de Cloud Build:
Abrir la página Configuración (Settings) de Cloud Build
Verás la página Permisos de cuenta de servicio (Service account permissions):
Establece el estado de la función que deseas agregar en Habilitar (Enable).
Extrae imágenes privadas de otros proyectos de Google Cloud
Puedes otorgar permisos para extraer imágenes privadas desde otro proyecto de Cloud Platform, siempre que la cuenta de servicio tenga acceso al proyecto. Por ejemplo, es posible que desees ejecutar una compilación en el Proyecto A que puede extraer imágenes del Proyecto B.
gsutil
Para estos otorgar permisos a tu cuenta de servicio, ejecuta los siguientes comandos en tu shell o ventana de la terminal:
Busca el nombre del depósito de Cloud Storage para el registro. Para ello, enumera los depósitos:
gsutil ls
La URL del depósito de Container Registry aparecerá como
gs://artifacts.[PROJECT_ID].appspot.com
ogs://[STORAGE_REGION].artifacts.[PROJECT_ID].appspot.com
.Otorga permisos para que la cuenta de servicio del Proyecto A lea los objetos del Proyecto B:
gsutil acl ch -r -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \ gs://artifacts.[PROJECT_ID_B].appspot.com
Otorga permisos para que la cuenta de servicio del Proyecto A lea el depósito del Proyecto B:
gsutil acl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \ gs://artifacts.[PROJECT_ID_B].appspot.com
Actualiza la LCA predeterminada del Proyecto B para que la cuenta de servicio del Proyecto A tenga permisos de lectura de los objetos que se crean después de realizar los pasos 1 y 2 anteriores:
gsutil defacl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \ gs://artifacts.[PROJECT_ID_B].appspot.com
Aquí:
[STORAGE_REGION]
es la multirregión (asia
,eu
ous
) del registro que aloja la imagen.[PROJECT_NUMBER_A]
es el número de proyecto del Proyecto A.[PROJECT_ID_B]
es el ID del proyecto B.
Console
A fin de obtener instrucciones para otorgar permisos mediante Cloud Console, consulta Crea y administra Listas de control de acceso.
Envía imágenes privadas a otros proyectos de Google Cloud
Puedes otorgar permisos para enviar imágenes privadas a otro proyecto de Cloud Platform, siempre que la cuenta de servicio tenga acceso al proyecto. Por ejemplo, es posible que desees ejecutar una compilación en el Proyecto A que pueda enviar imágenes al Proyecto B.
gsutil
Para otorgar estos permisos a tu cuenta de servicio, ejecuta los siguientes comandos en tu shell o ventana de la terminal:
Busca el nombre del depósito de Cloud Storage para el registro. Para ello, enumera los depósitos:
gsutil ls
La URL del depósito de Container Registry aparecerá como
gs://artifacts.[PROJECT_ID].appspot.com
ogs://[STORAGE_REGION].artifacts.[PROJECT_ID].appspot.com
.Otorga permisos a la cuenta de servicio del Proyecto A para actualizar los objetos del Proyecto B:
gsutil acl ch -r -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \ gs://artifacts.[PROJECT_ID_B].appspot.com
Otorga permisos a la cuenta de servicio del Proyecto A para escribir en el depósito del Proyecto B:
gsutil acl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \ gs://artifacts.[PROJECT_ID_B].appspot.com
Actualiza la LCA predeterminada del Proyecto B a fin de que la cuenta de servicio del Proyecto A tenga permisos de escritura para los objetos que se crean después de realizar los pasos 1 y 2 anteriores:
gsutil defacl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \ gs://artifacts.[PROJECT_ID_B].appspot.com
Aquí:
[STORAGE_REGION]
es la multirregión (asia
,eu
ous
) del registro que aloja la imagen.[PROJECT_NUMBER_A]
es el número de proyecto del Proyecto A.[PROJECT_ID_B]
es el ID del proyecto B.
Console
A fin de obtener instrucciones para otorgar permisos mediante Cloud Console, consulta Crea y administra Listas de control de acceso.
Soluciona problemas
Si encuentras errores 403 (de acceso denegado) en tus registros de compilación, prueba ejecutar los pasos siguientes:
- Inhabilita la API de Cloud Build y vuelve a habilitarla. Esto brinda a tu cuenta de servicio acceso a tu proyecto otra vez.
- Ejecuta los comandos anteriores de nuevo.
Próximos pasos
- Obtén información detallada sobre las cuentas de servicio.
- Aprende a configurar el control de acceso para tu proyecto.
- Lee sobre el uso de recursos encriptados en tus solicitudes de compilación.