Cloud Build usa una cuenta de servicio especial para ejecutar compilaciones a tu nombre. El correo electrónico de la cuenta de servicio de Cloud Build es [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com
. De forma predeterminada, la cuenta de servicio de Cloud Build tiene permisos para realizar varias tareas, como recuperar el código de Cloud Source Repositories o escribir objetos en cualquier bucket de Cloud Storage que sea propiedad de tu proyecto. En lugar de usar la cuenta de servicio predeterminada de Cloud Build, puedes especificar tu propia cuenta de servicio para ejecutar compilaciones en tu nombre.
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 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 en el 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:
|
cloudbuild.builds.update |
Actualizar compilaciones y activadores | |
cloudbuild.builds.list |
Enumerar compilaciones y activadores | |
cloudbuild.builds.get |
Obtener una compilación y un activador. | |
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 subir y obtener artefactos en Artifact Registry. |
artifactregistry.repositories.list |
Puede enumerar los repositorios de Artifact Registry. | |
artifactregistry.repositories.get |
Puede obtener un repositorio de Artifact Registry. | |
artifactregistry.repositories.downloadArtifacts |
Puede descargar artefactos de un repositorio en Artifact Registry. | |
artifactregistry.files.list |
Puede enumerar archivos en Artifact Registry. | |
artifactregistry.files.get |
Puede obtener archivos de Artifact Registry. | |
artifactregistry.packages.list |
Puede enumerar paquetes en Artifact Registry. | |
artifactregistry.packages.get |
Puede obtener paquetes de Artifact Registry. | |
artifactregistry.tags.create |
Puede crear etiquetas en Artifact Registry | |
artifactregistry.tags.update |
Puede actualizar etiquetas en Artifact Registry | |
artifactregistry.tags.list |
Puede enumerar etiquetas en Artifact Registry. | |
artifactregistry.tags.get |
Puede obtener etiquetas de Artifact Registry. | |
artifactregistry.versions.list |
Puede enumerar versiones en Artifact Registry. | |
artifactregistry.versions.get |
Puede obtener versiones en Artifact Registry. | |
logging.logEntries.create |
Pueden escribir registros | Obligatorio para crear registros de compilación en Cloud Logging. |
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 | |
resourcemanager.projects.get |
Puede obtener información del proyecto | Es obligatorio para obtener información del proyecto y enumerarlos. |
resourcemanager.projects.list |
Puede enumerar proyectos | |
containeranalysis.occurrences.create |
Puede crear un caso de Container Analysis | La cuenta de servicio de Cloud Build no usa estos permisos, pero se incluyen para fines de retrocompatibilidad. |
containeranalysis.occurrences.delete |
Puede borrar un caso de Container Analysis | |
containeranalysis.occurrences.get |
Puede obtener un caso de Container Analysis | |
containeranalysis.occurrences.list |
Puede enumerar casos de Container Analysis. | |
containeranalysis.occurrences.update |
Puede actualizar los casos de Container Analysis. | |
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. |
Activadores de compilación
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 qué cuenta de servicio especificar para el 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 manualmente. Cualquier usuario también puede ejecutar un activador de forma indirecta. Por ejemplo, un usuario puede invocar indirectamente un activador cuando envía código fuente nuevo a un repositorio conectado. Cualquier usuario con la función de editor de Cloud Build puede actualizar un activador siempre que la cuenta de servicio anterior y la cuenta de servicio nueva especificada en el activador sean las cuentas de Cloud Build predeterminadas.
Cuenta de servicio especificada por el usuario: cualquier usuario con la función de editor de Cloud Build que tenga permisos de robo de identidad en la cuenta de servicio (
iam.serviceAccount.actAs
) puede crear y ejecutar un activador directamente. Por ejemplo, un usuario puede ejecutar el activador manualmente. Cualquier usuario también puede ejecutar un activador de forma indirecta. Por ejemplo, un usuario puede invocar de forma 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 permisos de robo de identidad en la cuenta de servicio configurada con anterioridad y en la cuenta de servicio nueva especificada en el activador. Puedes crear una función de IAM personalizada con un permiso de robo de identidad o usar funciones predefinidas que permitan que los principales actúen en nombre de una cuenta de servicio. Para obtener más información sobre los permisos de robo de identidad, consulta Administra la suplantación de identidad 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 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 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á.
- 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, la cual 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.
¿Qué sigue?
- Obtén más información sobre las cuentas de servicio especificadas por el usuario.
- Obtén información sobre cómo configurar el acceso para la cuenta de servicio 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.