Cuenta de servicio predeterminada de Cloud Build

Según la configuración de tu organización, Cloud Build puede usar la cuenta de servicio predeterminada de Compute Engine o la cuenta de servicio heredada de Cloud Build para ejecutar compilaciones en tu nombre.

Es posible que las cuentas de servicio predeterminadas tengan permisos demasiado amplios para tu caso de uso. Puedes mejorar tu postura de seguridad siguiendo el principio de privilegio mínimo. Como parte de este principio, te recomendamos que crees tu propia cuenta de servicio para ejecutar compilaciones en tu nombre. Esto puede reducir el posible impacto de configuraciones incorrectas o usuarios malintencionados.

Si deseas obtener información para otorgar o revocar permisos a las cuentas de servicio predeterminadas de Cloud Build, consulta Configura el acceso a la cuenta de servicio predeterminada de Cloud Build.

Acerca de la cuenta de servicio predeterminada de Compute Engine

Es posible que las políticas de tu organización definan la cuenta de servicio predeterminada de Cloud Build como la cuenta de servicio predeterminada de Compute Engine. La dirección de correo electrónico de esta cuenta de servicio es
[PROJECT_NUMBER]-compute@developer.gserviceaccount.com.

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

Información acerca de la cuenta de servicio heredada de Cloud Build

Es posible que las políticas de tu organización definan la cuenta de servicio predeterminada de Cloud Build como la cuenta de servicio heredada. El correo electrónico de la cuenta de servicio de Cloud Build heredada es
[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com

En esta sección, se explican todos los permisos que tiene la cuenta de servicio heredada de Cloud Build de forma predeterminada.

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 de Cloud Build heredada, a esta se le otorga el rol de cuenta de servicio de Cloud Build (roles/cloudbuild.builds.builder) para los recursos del proyecto. Este rol 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 artifactregistry.dockerimages.get para obtener una imagen de Docker de Artifact 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 de privilegio mínimo][privilegio mínimo].

En la siguiente tabla, se enumeran los permisos que contiene el rol de cuenta de servicio de Cloud Build (roles/cloudbuild.builds.builder) 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 Puede usar una piscina privada Obligatorio para ejecutar compilaciones en un grupo privado.
logging.logEntries.create Pueden escribir registros 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 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 Puede obtener imágenes de Docker de 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 las ubicaciones compatibles para Artifact Registry.
artifactregistry.mavenartifacts.get Puede obtener paquetes de Maven de 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 desde 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 Puede subir artefactos de Yum a Artifact Registry.
artifactregistry.repositories.createOnPush Puede crear un repositorio de gcr.io en Artifact Registry la primera vez que se envía una imagen a un nombre de host de 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 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, 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 tiene la cuenta de servicio heredada de Cloud Build habilitada, en cuyo caso los activadores de compilación usarán de forma predeterminada la cuenta de servicio heredada cuando no se seleccione ninguna otra cuenta.

Acceso de los usuarios a los activadores

El acceso de los usuarios a los activadores depende del tipo de cuenta de servicio configurado 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 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 la 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 Roles para la autenticación de la cuenta de servicio.

Privilegios de tiempo de compilación de los activadores

La cuenta de servicio configurada para un activador de compilación puede proporcionar permisos de tiempo de compilación elevados 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 los activadores de compilación:

  • 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 activador 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 obtener información sobre el uso del Control de comentarios con los activadores de GitHub, consulta Crea activadores de GitHub.

Limitaciones de la cuenta de servicio heredada de Cloud Build

  • Si necesitas autenticarte entre servicios con un token de ID, debes ejecutar tus compilaciones con una cuenta de servicio especificada por el usuario. No puedes usar la cuenta de servicio de Cloud Build heredada para generar tokens de ID.

    Por ejemplo, si usas aplicaciones de plataforma sin servidores, como funciones de Cloud Run, 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 entre servicios.

    Para obtener instrucciones, consulta Cómo autorizar el acceso de servicio a servicio.

  • No puedes agregar una vinculación de política de IAM a la cuenta de servicio heredada. Por ejemplo, no puedes crear una vinculación de política de IAM que otorgue a otra cuenta de servicio el rol roles/iam.serviceAccountTokenCreator en la cuenta de servicio heredada.

¿Qué sigue?