Cloud Build puede usar una cuenta de servicio especial para ejecutar compilaciones por ti. El correo electrónico de la cuenta de servicio de Cloud Build es [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com
. Es posible que esta cuenta de servicio tenga permisos que son innecesariamente amplios para tu caso de uso. Puedes mejorar la postura de seguridad si sigues el 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 impacto potencial de los parámetros de configuración incorrectos o los usuarios maliciosos.
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 Google 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 del 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. | |
cloudbuild.workerpools.use |
Se puede usar un grupo privado | Obligatorio para ejecutar compilaciones en un grupo privado. |
logging.logEntries.create |
Pueden escribir registros | Obligatorio para crear y mostrar una lista de registros de compilación en Cloud Logging. |
logging.logEntries.list |
Puede mostrar una lista de 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. | 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 imágenes de Docker almacenadas en Artifact Registry | |
artifactregistry.kfpartifacts.create |
Puedes 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 para 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 desde Artifact Registry | |
artifactregistry.npmpackages.list |
Puede enumerar paquetes de npm de 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 |
Puede subir artefactos de Yum a Artifact Registry. | |
artifactregistry.repositories.createOnPush |
Se puede crear un repositorio gcr.io en Artifact Registry la primera vez que se envía una imagen al 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 utiliza 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
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 la cuenta de servicio que especificarás para un 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 de forma manual. Cualquier usuario también puede ejecutar un activador indirectamente. Por ejemplo, un usuario puede invocar un activador de forma indirecta cuando envía código fuente nuevo a un repositorio conectado. Cualquier usuario con el rol de editor de Cloud Build puede actualizar un activador, siempre que la cuenta de servicio anterior y la nueva especificada en el activador sean la predeterminada de Cloud Build.
Cuenta de servicio especificada por el usuario: Cualquier usuario con la función de editor de Cloud Build que tenga el permiso
iam.serviceAccounts.actAs
puede crear y ejecutar un activador directamente. Por ejemplo, un usuario puede ejecutar el activador de forma manual. Cualquier usuario también puede ejecutar un activador de manera indirecta. Por ejemplo, un usuario puede invocar de manera 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 los permisosiam.serviceAccounts.actAs
en la cuenta de servicio configurada con anterioridad y en la cuenta de servicio nueva especificada en el activador. Para otorgar este permiso a un usuario, puedes otorgarle una función predefinida con el permiso, como la función de usuario de cuenta de servicio (roles/iam.serviceAccountUser
). Como alternativa, puedes crear una función de IAM personalizada con el permisoiam.serviceAccounts.actAs
y, luego, otorgar esa función al usuario. Si quieres obtener más información sobre los permisos de la cuenta de servicio, consulta Funciones para la autenticación 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 los 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 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 está compilando.
- Si usas activadores de solicitud de extracción de GitHub, cualquier usuario con acceso de lectura al repositorio puede enviar una solicitud de extracción, 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 activadores de GitHub, consulta Crea activadores de GitHub.
Limitaciones
Si necesitas autenticar 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 predeterminada de Cloud Build para generar tokens de ID.
Por ejemplo, si usas aplicaciones de plataforma sin servidores, como Cloud Functions, 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 de servicio a servicio.
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 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.