Cuenta de servicio de Cloud Build

Cloud Build puede usar una cuenta de servicio especial para ejecutar compilaciones por ti. El correo electrónico de la cuenta de servicio de Cloud Build es [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. Es posible que esta cuenta de servicio tenga permisos que son innecesariamente amplios para tu caso de uso. Puedes mejorar la postura de seguridad si sigues el principio de privilegio mínimo. Como parte de este principio, recomendamos crear tu propia cuenta de servicio para ejecutar compilaciones en tu nombre. Esto puede reducir el impacto potencial de los parámetros de configuración incorrectos o los usuarios maliciosos.

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 Google 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 del 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.
cloudbuild.workerpools.use Se puede usar un grupo privado Obligatorio para ejecutar compilaciones en un grupo privado.
logging.logEntries.create Pueden escribir registros Obligatorio para crear y mostrar una lista de registros de compilación en Cloud Logging.
logging.logEntries.list Puede mostrar una lista de registros
logging.views.access Puede ver registros
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
remotebuildexecution.blobs.get Puede obtener acceso para aprobar o rechazar compilaciones. Obligatorio para aprobar o rechazar compilaciones pendientes
resourcemanager.projects.get Puede obtener información del proyecto
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.
storage.buckets.create Crear depósitos de Cloud Storage. Obligatorio para lo siguiente:
  • Almacena y obtén imágenes en Container Registry ( obsoleto).
  • 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.uploadArtifacts Puede subir artefactos a repositorios en Artifact Registry. Obligatorio para administrar artefactos en Artifact Registry.
artifactregistry.repositories.downloadArtifacts Puede descargar artefactos de un repositorio en Artifact Registry.
artifactregistry.aptartifacts.create Puede subir artefactos de Apt a Artifact Registry.
artifactregistry.dockerimages.get Puedes obtener imágenes de Docker desde Artifact Registry
artifactregistry.dockerimages.list Puede enumerar imágenes de Docker almacenadas en Artifact Registry
artifactregistry.kfpartifacts.create Puedes subir un artefacto de KFP a Artifact Registry
artifactregistry.locations.get Puede obtener información sobre la ubicación de un recurso en Artifact Registry
artifactregistry.locations.list Puede enumerar ubicaciones compatibles para Artifact Registry
artifactregistry.mavenartifacts.get Puedes obtener paquetes de Maven desde Artifact Registry
artifactregistry.mavenartifacts.list Puede enumerar paquetes de Maven desde Artifact Registry
artifactregistry.npmpackages.get Puedes obtener paquetes de npm desde Artifact Registry
artifactregistry.npmpackages.list Puede enumerar paquetes de npm de Artifact Registry
artifactregistry.projectsettings.get Puedes obtener la configuración del proyecto desde Artifact Registry
artifactregistry.pythonpackages.get Puedes obtener paquetes de Python desde Artifact Registry
artifactregistry.pythonpackages.list Puede enumerar paquetes de Python desde Artifact Registry
artifactregistry.yumartifacts.create Puede subir artefactos de Yum a Artifact Registry.
artifactregistry.repositories.createOnPush Se puede crear un repositorio gcr.io en Artifact Registry la primera vez que se envía una imagen al nombre de host gcr.io en el proyecto.
artifactregistry.repositories.get Puede obtener un repositorio de Artifact Registry.
artifactregistry.repositories.list Puede enumerar los repositorios de Artifact Registry.
artifactregistry.repositories.listEffectiveTags Puede enumerar etiquetas para artefactos en Artifact Registry. Obligatorio para administrar etiquetas de artefactos en Artifact Registry.
artifactregistry.repositories.listTagBindings Puede enumerar la información de vinculación de etiquetas para artefactos en Artifact Registry.
artifactregistry.tags.create Puede crear etiquetas en Artifact Registry
artifactregistry.tags.get Puede obtener etiquetas de Artifact Registry.
artifactregistry.tags.list Puede enumerar etiquetas en Artifact Registry.
artifactregistry.tags.update Puede actualizar etiquetas en Artifact Registry
artifactregistry.versions.list Puede enumerar versiones en Artifact Registry.
artifactregistry.versions.get Puede obtener versiones en Artifact Registry.
containeranalysis.occurrences.create Puede crear un caso de Artifact Analysis La cuenta de servicio de Cloud Build no utiliza estos permisos, pero se incluyen para brindar retrocompatibilidad.
containeranalysis.occurrences.delete Puede borrar un caso de Artifact Analysis.
containeranalysis.occurrences.get Puede obtener un caso de Artifact Analysis.
containeranalysis.occurrences.list Puede enumerar los casos de Artifact Analysis
containeranalysis.occurrences.update Puede actualizar los casos de Artifact Analysis

Activadores de Cloud Build

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 la cuenta de servicio que especificarás para un 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 de forma manual. Cualquier usuario también puede ejecutar un activador indirectamente. Por ejemplo, un usuario puede invocar un activador de forma indirecta cuando envía código fuente nuevo a un repositorio conectado. Cualquier usuario con el rol de editor de Cloud Build puede actualizar un activador, siempre que la cuenta de servicio anterior y la nueva especificada en el activador sean la predeterminada de Cloud Build.

  • Cuenta de servicio especificada por el usuario: Cualquier usuario con la función de editor de Cloud Build que tenga el permiso iam.serviceAccounts.actAs puede crear y ejecutar un activador directamente. Por ejemplo, un usuario puede ejecutar el activador de forma manual. Cualquier usuario también puede ejecutar un activador de manera indirecta. Por ejemplo, un usuario puede invocar de manera 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 los permisos iam.serviceAccounts.actAs en la cuenta de servicio configurada con anterioridad y en la cuenta de servicio nueva especificada en el activador. Para otorgar este permiso a un usuario, puedes otorgarle una función predefinida con el permiso, como la función de usuario de cuenta de servicio (roles/iam.serviceAccountUser). Como alternativa, puedes crear una función de IAM personalizada con el permiso iam.serviceAccounts.actAs y, luego, otorgar esa función al usuario. Si quieres obtener más información sobre los permisos de la cuenta de servicio, consulta Funciones para la autenticación 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 los 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 Google 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 está compilando.
  • Si usas activadores de solicitud de extracción de GitHub, cualquier usuario con acceso de lectura al repositorio puede enviar una solicitud de extracción, que 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.

Limitaciones

Si necesitas autenticar entre servicios con un token de ID, debes ejecutar tus compilaciones con una cuenta de servicio especificada por el usuario. No se puede usar la cuenta de servicio predeterminada de Cloud Build para generar tokens de ID.

Por ejemplo, si usas aplicaciones de plataforma sin servidores, como Cloud Functions, Cloud Run o App Engine, y deseas invocar tu aplicación desde Cloud Build, esto requiere una cuenta de servicio especificada por el usuario configurada con los permisos necesarios para la autenticación de servicio a servicio.

Para obtener instrucciones, consulta Autoriza el acceso de servicio a servicio.

¿Qué sigue?