Configura permisos de cuenta de servicio

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 para 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 GCP Console.

Cuando habilitas la API de Cloud Build, la cuenta de servicio se crea automáticamente y se le otorga la función de Cloud Build Service Account para tu proyecto. Esta función es suficiente para varias tareas como las siguientes:

  • 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 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:

  1. 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):

    Captura de pantalla de la página de permisos de la cuenta de servicio

  2. Establece el estado de la función que deseas agregar en Habilitar (Enable).

Extrae imágenes privadas de otros proyectos de Google Cloud Platform

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 otorgar estos permisos a tu cuenta de servicio, ejecuta los comandos siguientes en tu shell o ventana de la terminal, en el que [PROJECT_NUMBER_A] es el número de proyecto del PROYECTO A y [PROJECT_ID_B] es el ID del proyecto del Proyecto B.

  1. Busca el nombre del depósito de Cloud Storage para el registro. Para ello, enumera los depósitos:

    gsutil ls
    

    La URL de tu depósito de Container Registry se mostrará como gs://artifacts.[PROJECT-ID].appspot.com orgs://[REGION].artifacts.[PROJECT-ID].appspot.com.

  2. 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
    
  3. 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
    
  4. 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
    

console

Para obtener instrucciones sobre cómo otorgar permisos mediante GCP Console, consulta Crea y administra listas de control de acceso.

Envía imágenes privadas a otros proyectos de Google Cloud Platform

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 comandos siguientes en tu shell o ventana de la terminal, en el que [PROJECT_NUMBER_A] es el número de proyecto de PROYECTO A y [PROJECT_ID_B] es el ID del proyecto del Proyecto B.

  1. Busca el nombre del depósito de Cloud Storage para el registro. Para ello, enumera los depósitos:

    gsutil ls
    

    La URL de tu depósito de Container Registry se mostrará como gs://artifacts.[PROJECT-ID].appspot.com orgs://[REGION].artifacts.[PROJECT-ID].appspot.com.

  2. 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
    
  3. 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
    
  4. 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
    

console

Para obtener instrucciones sobre cómo otorgar permisos mediante GCP Console, consulta Crea y administra listas de control de acceso.

Solución de 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.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...