En función de la configuración de tu organización, Cloud Build puede usar la cuenta de servicio predeterminada de Compute Engine o la cuenta de servicio antigua de Cloud Build para ejecutar compilaciones por ti.
Las cuentas de servicio predeterminadas pueden tener permisos innecesariamente amplios para tu caso práctico. Puedes mejorar tu estrategia de seguridad siguiendo el principio de mínimos accesos. Como parte de este principio, te recomendamos que crees tu propia cuenta de servicio para ejecutar compilaciones en tu nombre. Esto puede reducir el impacto potencial de las configuraciones incorrectas o los usuarios malintencionados.
Para saber cómo conceder o revocar permisos a las cuentas de servicio predeterminadas de Cloud Build, consulta Configurar el acceso a la cuenta de servicio predeterminada de Cloud Build.
Acerca de la cuenta de servicio predeterminada de Compute Engine
Las políticas de tu organización pueden definir que la cuenta de servicio predeterminada de Cloud Build sea la cuenta de servicio predeterminada de Compute Engine. La dirección de correo 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 el artículo Cuenta de servicio predeterminada de Compute Engine.
Información sobre la cuenta de servicio antigua 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 antigua. El correo de la cuenta de servicio de Cloud Build antigua es
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
En esta sección se explican todos los permisos que tiene de forma predeterminada la cuenta de servicio de la versión antigua de Cloud Build.
Permisos predeterminados de la cuenta de servicio de Cloud Build antigua
Si la configuración de tu proyecto permite el uso de la cuenta de servicio antigua de Cloud Build, se le asignará el rol Cuenta de servicio de Cloud Build (roles/cloudbuild.builds.builder
) a la cuenta de servicio antigua para los recursos del proyecto. Este rol contiene varios permisos, como la capacidad de actualizar compilaciones o escribir registros. La cuenta de servicio solo usa estos permisos cuando es necesario para realizar acciones al ejecutar 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 tienes previsto realizar ninguna acción como parte del proceso de compilación, te recomendamos que revoques el permiso correspondiente de la cuenta de servicio para cumplir el principio de seguridad de los privilegios mínimos.
En la siguiente tabla se indican los permisos que contiene el rol Cuenta de servicio de Cloud Build (roles/cloudbuild.builds.builder
) y el motivo por el que la cuenta de servicio de Cloud Build antigua usa estos permisos.
Permiso | Descripción | Finalidad del permiso |
---|---|---|
cloudbuild.builds.create |
Permiso para crear compilaciones y activadores. | Requisitos:
|
cloudbuild.builds.update |
Permiso para actualizar compilaciones y activadores. | |
cloudbuild.builds.list |
Permiso para enumerar compilaciones y activadores. | |
cloudbuild.builds.get |
Puede obtener una compilación y un activador | |
cloudbuild.workerpools.use |
Puede usar un grupo privado | Es obligatorio para ejecutar compilaciones en un grupo privado. |
logging.logEntries.create |
Puede escribir registros | Se necesita para crear y enumerar registros de compilación en Cloud Logging. |
logging.logEntries.list |
Puede mostrar registros | |
logging.views.access |
Puede ver los registros | |
pubsub.topics.create |
Puede crear temas de Pub/Sub | Es necesario 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. | rowspan=3>Necesario para aprobar o rechazar versiones pendientes |
resourcemanager.projects.get |
Puede obtener información del proyecto | |
resourcemanager.projects.list |
Puede mostrar proyectos | |
source.repos.get |
Puede leer el código fuente de los repositorios de Cloud Source Repositories | Requisitos:
|
source.repos.list |
Puede enumerar repositorios en Cloud Source Repositories | |
storage.buckets.create |
Puede crear segmentos de Cloud Storage | Requisitos:
|
storage.buckets.get |
Puede obtener segmentos de Cloud Storage | |
storage.buckets.list |
Puede enumerar segmentos de Cloud Storage | |
storage.objects.list |
Puede enumerar objetos de Cloud Storage | |
storage.objects.update |
Puede actualizar objetos de Cloud Storage | |
storage.objects.create |
Puede escribir objetos de Cloud Storage | |
storage.objects.delete |
Puede eliminar objetos de Cloud Storage | |
storage.objects.get |
Puede leer objetos de Cloud Storage | |
artifactregistry.repositories.uploadArtifacts |
Puede subir artefactos a repositorios de Artifact Registry | Necesario para gestionar artefactos en Artifact Registry. |
artifactregistry.repositories.downloadArtifacts |
Puede descargar artefactos de un repositorio en Artifact Registry | |
artifactregistry.aptartifacts.create |
Puede subir artefactos Apt a Artifact Registry | |
artifactregistry.dockerimages.get |
Puede obtener imágenes 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 de Artifact Registry | |
artifactregistry.mavenartifacts.get |
Puede obtener paquetes de Maven de Artifact Registry | |
artifactregistry.mavenartifacts.list |
Puede enumerar paquetes de Maven de Artifact Registry | |
artifactregistry.npmpackages.get |
Puede obtener paquetes npm de Artifact Registry | |
artifactregistry.npmpackages.list |
Puede enumerar paquetes 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 de Artifact Registry | |
artifactregistry.yumartifacts.create |
Puede subir artefactos Yum a Artifact Registry | |
artifactregistry.repositories.createOnPush |
Puede crear un repositorio gcr.io en Artifact Registry la primera vez que se envía una imagen a un nombre de host gcr.io del proyecto. | |
artifactregistry.repositories.get |
Puede obtener un repositorio de Artifact Registry | |
artifactregistry.repositories.list |
Puede enumerar repositorios en Artifact Registry | |
artifactregistry.repositories.listEffectiveTags |
Puede enumerar las etiquetas de los artefactos de Artifact Registry | Obligatorio para gestionar etiquetas de artefactos en Artifact Registry. |
artifactregistry.repositories.listTagBindings |
Puede enumerar la información de vinculación de etiquetas de los artefactos de 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 |
Permiso para crear una repetición de Artifact Analysis | La cuenta de servicio de Cloud Build no usa estos permisos, pero se incluyen por motivos de compatibilidad con versiones anteriores. |
containeranalysis.occurrences.delete |
Puede eliminar una repetición de Artifact Analysis | |
containeranalysis.occurrences.get |
Permiso para obtener una repetición de Artifact Analysis | |
containeranalysis.occurrences.list |
Permiso para mostrar las repeticiones de Artifact Analysis. | |
containeranalysis.occurrences.update |
Permiso para actualizar las repeticiones de Artifact Analysis |
Crear activadores
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 de Cloud Build antigua habilitada, en cuyo caso los activadores de compilación usarán de forma predeterminada la cuenta de servicio antigua si 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 configurada para el activador:
Cuenta de servicio de Cloud Build antigua (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 Editor de Cloud Build puede actualizar un activador siempre que este utilice la cuenta de servicio antigua de Cloud Build.
Cuenta de servicio especificada por el usuario o cuenta de servicio predeterminada de Compute Engine: cualquier usuario con el rol 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 manualmente.Cualquier usuario con el rol Editor de Cloud Build puede actualizar un activador siempre que 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 conceder este permiso a un usuario, puede asignarle un rol predefinido que lo incluya, como el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser
). También puede crear un rol de gestión de identidades y accesos personalizado con el permisoiam.serviceAccounts.actAs
y, a continuación, asignárselo al usuario. Para obtener más información sobre los permisos de las cuentas de servicio, consulta Roles para la autenticación de cuentas de servicio.
Privilegios de los activadores en tiempo de compilación
La cuenta de servicio configurada para un activador de compilación puede proporcionar permisos de compilación elevados a los usuarios que emplean activadores para invocar una compilación. Esto se aplica tanto a la cuenta de servicio antigua como a las cuentas de servicio especificadas por los usuarios. Ten en cuenta las siguientes implicaciones de seguridad al usar activadores de compilación:
Un usuario que no tenga acceso a tu proyecto Google Cloud , pero que tenga acceso de escritura al repositorio asociado a los activadores de compilación del proyecto, tendrá permisos para cambiar el código que se está compilando. 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 que tenga 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 al crear un activador de solicitud de extracción de GitHub. Si seleccionas esta opción, la compilación solo se iniciará si el propietario de un repositorio o un colaborador comenta
/gcbrun
. Para obtener información sobre cómo usar Control de comentarios con activadores de GitHub, consulta Crear activadores de GitHub.
Limitaciones de la cuenta de servicio antigua de Cloud Build
Si necesitas autenticarte entre servicios mediante 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 antigua para generar tokens de ID.
Por ejemplo, si usas aplicaciones de plataforma sin servidor, como funciones de Cloud Run, Cloud Run o App Engine, y quieres invocar tu aplicación desde Cloud Build, necesitas una cuenta de servicio especificada por el usuario y configurada con los permisos necesarios para la autenticación de servicio a servicio.
Para obtener instrucciones, consulta Autorizar el acceso de servicio a servicio.
No puedes añadir una vinculación de política de gestión de identidades y accesos en la cuenta de servicio antigua. Por ejemplo, no puedes crear un enlace de política de gestión de identidades y accesos que conceda a otra cuenta de servicio el rol
roles/iam.serviceAccountTokenCreator
en la cuenta de servicio antigua.
Siguientes pasos
- Consulta información sobre las cuentas de servicio especificadas por los usuarios.
- Consulta información sobre cómo configurar el acceso a la cuenta de servicio predeterminada de Cloud Build.
- Consulta información sobre cómo configurar el acceso a los recursos de Cloud Build.
- Consulta los permisos necesarios para ver los registros de compilación.