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

  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

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:

  1. 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 o gs://[STORAGE_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
    

Aquí:

  • [STORAGE_REGION] es la multirregión (asia, eu o us) 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:

  1. 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 o gs://[STORAGE_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
    

Aquí:

  • [STORAGE_REGION] es la multirregión (asia, eu o us) 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