Cuenta de servicio predeterminada de Cloud Build

Según la configuración de tu proyecto, Cloud Build puede usar la cuenta de servicio heredada de Cloud Build o la cuenta de servicio predeterminada de Compute Engine para ejecutar compilaciones en tu nombre. El correo electrónico de la cuenta de servicio heredada de Cloud Build es [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com y el correo electrónico de la cuenta de servicio predeterminada de Compute Engine es [PROJECT_NUMBER]-compute@developer.gserviceaccount.com Es posible que las cuentas de servicio predeterminadas tengan permisos demasiado amplios para tu caso de uso. Para mejorar tu postura de seguridad, sigue las 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 posible impacto de configuraciones incorrectas o usuarios malintencionados.

En esta página, se explican todos los permisos que la versión heredada de Cloud Build de servicio tiene de forma predeterminada.

Para obtener información sobre la cuenta de servicio predeterminada de Compute Engine, consulta Cuenta de servicio predeterminada de Compute Engine.

Para aprender a otorgar o revocar permisos a Cloud Build cuentas de servicio predeterminadas, consulta Configura el acceso para la cuenta de servicio predeterminada de Cloud Build.

Permisos predeterminados de la cuenta de servicio heredada de Cloud Build

Si la configuración de tu proyecto permite el uso de la cuenta de servicio heredada de Cloud Build, se le otorgará el rol de cuenta de servicio de Cloud Build para los recursos del proyecto. Este rol contiene una serie de permisos, como la capacidad de actualizar compilaciones o escribir registros. El servicio cuenta usa estos permisos solo cuando es necesario para realizar acciones cuando ejecutar tu compilación. Por ejemplo, la cuenta de servicio usa el permiso artifactregistry.dockerimages.get para obtener una imagen de Docker de Container Registry si tu compilación está configurada para hacerlo. 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 para cumplir con el principio de seguridad del menor privilegio.

En la siguiente tabla, se enumeran los permisos que contiene el rol de la cuenta de servicio de Cloud Build y el propósito para el que la cuenta de servicio heredada de Cloud Build 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 Es obligatorio para ejecutar compilaciones en un grupo privado.
logging.logEntries.create Pueden escribir registros Es obligatorio para crear y enumerar registros de compilación en Cloud Logging.
logging.logEntries.list Puede enumerar 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:
  • Almacenar y obtener 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. Es 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 las imágenes de Docker almacenadas en Artifact Registry
artifactregistry.kfpartifacts.create Puede 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 con 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 Puede obtener paquetes de npm de Artifact Registry.
artifactregistry.npmpackages.list Puede enumerar paquetes de npm de Artifact Registry
artifactregistry.projectsettings.get Puede obtener la configuración del proyecto de Artifact Registry.
artifactregistry.pythonpackages.get Puede obtener paquetes de Python de Artifact Registry.
artifactregistry.pythonpackages.list Puede enumerar paquetes de Python desde Artifact Registry
artifactregistry.yumartifacts.create Puedes subir artefactos de Yum a Artifact Registry.
artifactregistry.repositories.createOnPush Puede crear un repositorio gcr.io en Artifact Registry la primera vez que se se envía a un 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 de 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 usa estos permisos, pero se incluyen para la 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

Cuando crees activadores de compilación, ten en cuenta lo siguiente: debes elegir la cuenta de servicio que se usará para ejecutar la compilación. Puedes configurar cada activador con una cuenta de servicio diferente. La única excepción es si tu proyecto tenga la cuenta de servicio heredada de Cloud Build habilitada, en cuyo caso los activadores de compilación usan de forma predeterminada la cuenta de servicio heredada cuando no hay otra cuenta seleccionada.

Acceso de los usuarios a los activadores

El acceso de los usuarios a los activadores depende del tipo de cuenta de servicio que se configuró para el activador:

  • Cuenta de servicio heredada de Cloud Build (si está habilitada): Cualquier usuario con el rol Editor de Cloud Build puede crear y ejecutar directamente un activador. Por ejemplo, un usuario puede ejecutar el activador manualmente. Cualquier usuario con el rol de editor de Cloud Build puede actualizar un activador, siempre que este use la cuenta de servicio heredada de Cloud Build.

  • Cuenta de servicio especificada por el usuario o la cuenta de servicio predeterminada de Compute Engine: Cualquier usuario con el rol de editor de Cloud Build que tenga el permiso iam.serviceAccounts.actAs puede crear y ejecutar directamente un activador. Por ejemplo, un usuario puede ejecutar el activador de forma manual. Cualquier usuario con el rol de editor de Cloud Build puede actualizar un activador, siempre y cuando tenga los permisos iam.serviceAccounts.actAs en la cuenta de servicio configurada anteriormente y en la nueva cuenta de servicio especificada en el activador. Para otorgarle este permiso a un usuario, puedes otorgarle un rol predefinido con el permiso, como el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser). Como alternativa, puedes crear un rol de IAM personalizado con el permiso iam.serviceAccounts.actAs y, luego, otorgarle ese rol al usuario. Para obtener más información sobre los permisos de la cuenta de servicio, Consulta Funciones para la autenticación de cuentas de servicio.

Privilegios de los activadores durante el tiempo de compilación

La cuenta de servicio configurada para un activador de compilación permisos elevados de tiempo de compilación a los usuarios que emplean activadores para invocar una compilación. Esto se aplica a la cuenta de servicio heredada y a las cuentas de servicio especificadas por el usuario. Ten en cuenta las siguientes implicaciones de seguridad cuando uses activadores:

  • 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 compilará. Por ejemplo, los usuarios pueden invocar indirectamente un cuando envían código fuente nuevo a un repositorio conectado.

  • 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, lo 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 Para obtener más información sobre el uso del control de comentarios con activadores de GitHub, consulta Crea activadores de GitHub.

Limitaciones

Si necesitas autenticarte 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 heredada de Cloud Build para generar tokens de ID.

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

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

¿Qué sigue?