Cuenta de servicio de Cloud Build

Cloud Build usa una cuenta de servicio especial para ejecutar compilaciones a tu nombre. El correo electrónico de la cuenta de servicio de Cloud Build es [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. De forma predeterminada, la cuenta de servicio de Cloud Build tiene permisos para realizar varias tareas, como recuperar el código de Cloud Source Repositories o escribir objetos en cualquier bucket de Cloud Storage que sea propiedad de tu proyecto. En lugar de usar la cuenta de servicio predeterminada de Cloud Build, puedes especificar tu propia cuenta de servicio para ejecutar compilaciones en tu nombre.

En esta página, se explican todos los permisos que tiene la cuenta de servicio de Cloud Build de forma predeterminada. Si deseas obtener información sobre cómo otorgar o revocar permisos a la cuenta de servicio de Cloud Build, consulta Configura el acceso a la cuenta de servicio de Cloud Build.

Permisos predeterminados de la cuenta de servicio de Cloud Build

Cuando habilitas la API de Cloud Build para un proyecto de Cloud, la cuenta de servicio de Cloud Build se crea de forma automática en el proyecto y se le otorga la función de cuenta de servicio de Cloud Build para los recursos en el proyecto. Esta función contiene una serie de permisos, como la capacidad de actualizar compilaciones o escribir registros. La cuenta de servicio usa estos permisos solo como se requiere para realizar acciones cuando ejecuta tu compilación. Por ejemplo, la cuenta de servicio usa el permiso source.repos.get para recuperar el código de Cloud Source Repositories si el código fuente de tu compilación está en Cloud Source Repositories. Si no planeas realizar una acción como parte del proceso de compilación, te recomendamos que revoques el permiso correspondiente de la cuenta de servicio de Cloud Build para cumplir con el principio de seguridad del menor privilegio.

En la siguiente tabla, se enumeran los permisos que contiene la función de la cuenta de servicio de Cloud Build y el propósito de la que esta usa estos permisos.

Permiso Descripción Propósito del permiso
cloudbuild.builds.create Puede crear compilaciones y activadores. Obligatorio para lo siguiente:
  • Usar activadores de compilación.
  • Crear, enumerar, obtener o cancelar compilaciones.
cloudbuild.builds.update Actualizar compilaciones y activadores
cloudbuild.builds.list Enumerar compilaciones y activadores
cloudbuild.builds.get Obtener una compilación y un activador.
storage.buckets.create Crear depósitos de Cloud Storage. Obligatorio para lo siguiente:
  • Almacenar y obtener imágenes en Container Registry.
  • Almacenar y obtener artefactos en Cloud Storage
  • Enviar las compilaciones de forma manual a través de gcloud builds submit.
  • Almacenar registros de compilación en el bucket de registros creado por el usuario.
storage.buckets.get Puede obtener depósitos de Cloud Storage
storage.buckets.list Puede enumerar los depósitos de Cloud Storage.
storage.objects.list Puede enumerar objetos de Cloud Storage.
storage.objects.update Puede actualizar los objetos de Cloud Storage
storage.objects.create Puede escribir objetos de Cloud Storage.
storage.objects.delete Puede borrar objetos de Cloud Storage.
storage.objects.get Puede leer objetos de Cloud Storage.
artifactregistry.repositories.list Puede enumerar los repositorios de Artifact Registry. Obligatorio para almacenar y obtener artefactos en Artifact Registry.
artifactregistry.repositories.get Puede obtener un repositorio de Artifact Registry.
artifactregistry.repositories.downloadArtifacts Puede descargar artefactos de un repositorio en Artifact Registry.
artifactregistry.files.list Puede enumerar archivos en Artifact Registry.
artifactregistry.files.get Puede obtener archivos de Artifact Registry.
artifactregistry.packages.list Puede enumerar paquetes en Artifact Registry.
artifactregistry.packages.get Puede obtener paquetes de Artifact Registry.
artifactregistry.tags.list Puede enumerar etiquetas en Artifact Registry.
artifactregistry.tags.get Puede obtener etiquetas de Artifact Registry.
artifactregistry.versions.list Puede enumerar versiones en Artifact Registry.
artifactregistry.versions.get Puede obtener versiones en Artifact Registry.
logging.logEntries.create Pueden escribir registros Obligatorio para crear registros de compilación en Cloud Logging.
pubsub.topics.create Puede crear temas de Pub/Sub. Obligatorio para enviar actualizaciones de compilación a Pub/Sub.
pubsub.topics.publish Puede publicar en Pub/Sub
resourcemanager.projects.get Puede obtener información del proyecto Es obligatorio para obtener información del proyecto y enumerarlos.
resourcemanager.projects.list Puede enumerar proyectos
source.repos.get Puede leer el código fuente de los repositorios en Cloud Source Repositories. Obligatorio para lo siguiente:
  • Usar los activadores de Bitbucket y Cloud Source Repositories.
  • Extraer el código fuente de Cloud Source Repositories.
source.repos.list Puede enumerar repositorios en Cloud Source Repositories.

Activadores de compilación

De forma predeterminada, los activadores de compilación usan la cuenta de servicio de Cloud Build para ejecutar compilaciones. Como alternativa, puedes configurar activadores de compilación para ejecutar compilaciones con la cuenta de servicio que elijas. Puedes configurar cada activador con una cuenta de servicio diferente.

Ten en cuenta las siguientes consideraciones cuando elijas qué cuenta de servicio especificar para el activador de compilación:

  • Cuenta de servicio predeterminada de Cloud Build: Cualquier usuario con la función de editor de Cloud Build puede crear y ejecutar un activador directamente. Por ejemplo, un usuario puede ejecutar el activador manualmente. Cualquier usuario también puede ejecutar un activador de forma indirecta. Por ejemplo, un usuario puede invocar indirectamente un activador cuando envía código fuente nuevo a un repositorio conectado. Cualquier usuario con la función de editor de Cloud Build puede actualizar un activador siempre que la cuenta de servicio anterior y la cuenta de servicio nueva especificada en el activador sean las cuentas de Cloud Build predeterminadas.

  • Cuenta de servicio especificada por el usuario: cualquier usuario con la función de editor de Cloud Build que tenga permisos de robo de identidad en la cuenta de servicio (iam.serviceAccount.actAs) puede crear y ejecutar un activador directamente. Por ejemplo, un usuario puede ejecutar el activador manualmente. Cualquier usuario también puede ejecutar un activador de forma indirecta. Por ejemplo, un usuario puede invocar de forma indirecta un activador cuando envía una fuente nueva a un repositorio conectado. Cualquier usuario con la función de editor de Cloud Build puede actualizar un activador siempre que tenga permisos de robo de identidad en la cuenta de servicio configurada con anterioridad y en la cuenta de servicio nueva especificada en el activador. Puedes crear una función de IAM personalizada con un permiso de robo de identidad o usar funciones predefinidas que permitan que los principales actúen en nombre de una cuenta de servicio. Para obtener más información sobre los permisos de robo de identidad, consulta Administra la suplantación de identidad de cuentas de servicio.

Además, la cuenta de servicio predeterminada de Cloud Build y las cuentas de servicio especificadas por el usuario pueden proporcionar permisos elevados de tiempo de compilación a usuarios que usan activadores para invocar una compilación. Ten en cuenta las siguientes implicaciones de seguridad cuando uses activadores de compilación asociados con la cuenta de servicio predeterminada de Cloud Build:

  • Un usuario sin acceso a tu proyecto de Cloud, pero con acceso de escritura al repositorio asociado con los activadores de compilación en el proyecto, tendrá permisos para cambiar el código que se compilará.
  • Si usas activadores de solicitudes de extracción de GitHub, cualquier usuario con acceso de lectura al repositorio puede enviar una solicitud de extracción, la cual puede activar una compilación que incluya cambios en el código de la solicitud de extracción. Para inhabilitar este comportamiento, elige la opción Control de comentarios cuando crees un activador de solicitud de extracción de GitHub. Si seleccionas esta opción, se asegurará de que la compilación se inicie solo si el propietario de un repositorio o un colaborador comenta /gcbrun. Para obtener información sobre el uso del Control de comentarios con activadores de GitHub, consulta Crea activadores de GitHub.

¿Qué sigue?