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 Las cuentas de servicio predeterminadas pueden tener permisos que son innecesariamente amplios para 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 tiene la cuenta de servicio heredada de Cloud Build 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 versión se le otorgará la Cuenta de servicio de Cloud Build para los recursos del proyecto. Este rol contiene varias 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 artifactregistry.dockerimages.get para obtener una imagen de Docker de Container Registry si tu compilación está configurada para hacerlo. Si no tienes pensado realizar una acción como parte del proceso de compilación, te recomendamos revocar el el permiso correspondiente de la cuenta de servicio para cumplir con las principio de seguridad de privilegio mínimo.

En la siguiente tabla, se enumeran los permisos que el servicio de Cloud Build Account contiene y el propósito por el que Cloud Build la cuenta de servicio heredada 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 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 Puedes obtener paquetes de npm de Artifact Registry
artifactregistry.npmpackages.list Puede enumerar paquetes de npm desde 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 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 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 usa 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

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 del usuario 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 de 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 Editor actualizar un activador, siempre que tenga los permisos iam.serviceAccounts.actAs en la cuenta de servicio configurada previamente y la nueva especificadas en el activador. Para otorgar este permiso a un usuario, puedes otorgarle un rol predefinido con el permiso, como el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser). Como alternativa, puedes crear una red rol de IAM con el permiso iam.serviceAccounts.actAs, 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 tiempo de compilación de los activadores

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 al servicio especificado por el usuario cuentas de servicio. 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 a el repositorio asociado con los activadores de compilación del proyecto tendrá permisos para cambiar el código que se compila. Por ejemplo, los usuarios pueden invocar indirectamente un cuando envían código fuente nuevo a un repositorio conectado.

  • Si usas los activadores de solicitud de extracción de GitHub, cualquier usuario con acceso de lectura al repositorio puede enviar una solicitud de extracción, la cual 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 los 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. Cloud Build La cuenta de servicio heredada no se puede usar 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 la autenticación de varios factores.

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

¿Qué sigue?