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. 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.
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.
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.
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. 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 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 |
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:
|
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 |
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 admitidas 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 usa 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 usan de forma predeterminada la cuenta de servicio heredada cuando no se selecciona 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 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 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 la 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 Roles para la autenticación de la cuenta de servicio.
Privilegios de los activadores durante el tiempo de compilación
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
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 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.
¿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.