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:
|
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:
|
source.repos.list |
Puede enumerar repositorios en Cloud Source Repositories. | |
storage.buckets.create |
Crear depósitos de Cloud Storage. | Obligatorio para lo siguiente:
|
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 permisosiam.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 permisoiam.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?
- Obtén más información sobre las cuentas de servicio especificadas por el usuario.
- Obtén información para configurar el acceso a la cuenta de servicio predeterminada de Cloud Build.
- Obtén información para configurar el acceso a los recursos de Cloud Build.
- Obtén más información sobre los permisos necesarios para ver los registros de compilación.