En este documento, se describen las cuentas de servicio que se usan para ejecutar Cloud Deploy y llamar a Cloud Deploy con el fin de ejecutar varias operaciones.
Cloud Deploy usa las siguientes dos cuentas de servicio:
El agente de servicio de Cloud Deploy
Cloud Deploy usa esta cuenta de servicio para interactuar con tu proyecto. No puedes reemplazar este agente de servicio por una cuenta de servicio alternativa, pero puedes editar los permisos, por ejemplo, cuando usas recursos fuera del proyecto (como una cuenta de servicio o un grupo privado de trabajadores de Cloud Build).
La cuenta de servicio de ejecución de Cloud Deploy
Cloud Deploy usa esta cuenta de servicio para ejecutar operaciones de renderización y de implementación en Cloud Build. Esta cuenta necesita permisos suficientes para leer y escribir en el bucket de Cloud Storage y acceder a los destinos de implementación.
La cuenta de servicio predeterminada para la ejecución es la cuenta de servicio predeterminada de Compute Engine. Puedes especificar una cuenta de servicio alternativa en la configuración de destino.
La cuenta de servicio de automatización de Cloud Deploy
Esta es la cuenta de servicio que usa Cloud Deploy para realizar automatizaciones. Puede ser la cuenta de servicio de ejecución predeterminada o alguna otra cuenta de servicio. Consulta La cuenta de servicio de automatización para obtener más información sobre esta cuenta de servicio.
Consulta Crea y administra cuentas de servicio para obtener instrucciones sobre cómo editar los permisos de las cuentas de servicio y cómo crear una cuenta de servicio alternativa.
Agente de servicio de Cloud Deploy
El agente de servicio de Cloud Deploy es una cuenta de servicio que Cloud Deploy usa para interactuar con otros servicios de Google Cloud en los que se basa Cloud Deploy. Estos servicios incluyen Cloud Build, Pub/Sub y Registros de auditoría de Cloud.
El nombre de esta cuenta de servicio sigue este patrón:
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
No puedes reemplazar el agente de servicio por una cuenta de servicio alternativa. Sin embargo, es posible que debas agregar permisos, por ejemplo, para permitir el acceso a un grupo privado en otro proyecto, configurado como parte de un entorno de ejecución.
Cuenta de servicio de ejecución de Cloud Deploy
Según la configuración predeterminada, Cloud Deploy se ejecuta con la cuenta de servicio predeterminada de Compute Engine. Esa cuenta de servicio tiene los permisos suficientes en el proyecto que la contiene para renderizar manifiestos y, luego, implementarlos en tus destinos.
El nombre de esta cuenta de servicio sigue este patrón:
[project-number]-compute@developer.gserviceaccount.com
Esta cuenta de servicio predeterminada tiene amplios permisos. Se recomienda cambiar el entorno de ejecución para que Cloud Deploy se ejecute como una cuenta de servicio diferente.
Puedes cambiar la cuenta de servicio de ejecución para cada destino con las propiedades executionConfigs.privatePool.serviceAccount
o executionConfigs.defaultPool.serviceAccount
en la definición del destino.
Cualquier cuenta de servicio que configures para estas propiedades debe tener la función roles/clouddeploy.jobRunner
en el proyecto de Cloud Deploy. Si la cuenta de servicio de ejecución predeterminada no tiene este permiso, ejecuta el siguiente comando:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:$(gcloud projects describe PROJECT_ID \
--format="value(projectNumber)")-compute@developer.gserviceaccount.com \
--role="roles/clouddeploy.jobRunner"
Qué cuentas de servicio crear
Si eliges no usar la cuenta de servicio de ejecución predeterminada para la renderización y la implementación, debes crear una o más cuentas de servicio alternativas. Estas son cuentas de servicio con las que se ejecuta Cloud Deploy y se configuran en la configuración de destino.
Un motivo para crear más de uno sería tener una cuenta de servicio específica o cuentas para implementar en destinos restringidos, como un objetivo de producción.
Un enfoque posible es usar cuentas de servicio independientes por canalización de entrega. Cada una de esas cuentas de servicio incluiría funciones con permisos suficientes para renderizar e implementar.
Para implementaciones en Google Kubernetes Engine, puedes restringir la cuenta de servicio a un espacio de nombres.
Usa cuentas de servicio de un proyecto diferente
Para tu entorno de ejecución, puedes especificar una cuenta de servicio que esté en un proyecto diferente del que creaste el destino:
En el proyecto que posee la cuenta de servicio, habilita la política de la organización de SA entre proyectos.
Otorga al agente de servicio de Cloud Deploy (
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
) el permisoiam.serviceAccounts.actAs
para tu cuenta de servicio.En este caso,
project-number
es el proyecto en el que creaste tu destino.También puedes otorgar la función
roles/iam.serviceAccountUser
, que incluye ese permiso, en el proyecto de cada cuenta de servicio que se encuentre en un proyecto diferente del que se ejecuta en Cloud Deploy.Otorga al agente de servicio de Cloud Build (
service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com
) el rolroles/iam.serviceAccountTokenCreator
.En este caso,
project-number
es el proyecto en el que creaste tu destino, y esta función se otorga en el proyecto de la cuenta de servicio.Debes otorgar esta función a cada cuenta de servicio configurada en el entorno de ejecución de un destino si esa cuenta de servicio se encuentra en un proyecto diferente del que se ejecuta Cloud Deploy.
Otorga al llamador de
gcloud deploy releases create
ygcloud deploy rollouts create
el permisoiam.serviceAccounts.actAs
en la cuenta de servicio o la función[roles/iam.serviceAccountUser](/iam/docs/understanding-roles#service-accounts-roles)
.
Permisos necesarios
La cuenta de servicio que se usa para la configuración de procesamiento debe tener permisos suficientes a fin de acceder al bucket de Cloud Storage en el que se almacenan tus recursos de Cloud Deploy (canalizaciones de entrega, actualizaciones, lanzamientos).
El rol
roles/clouddeploy.jobRunner
incluye todos los permisos que necesita la cuenta de servicio de procesamiento (privatePool
odefaultPool
).La cuenta de servicio que se usa para la implementación debe tener permisos suficientes a fin de realizar la implementación en el clúster de destino, y permiso para acceder al bucket de Cloud Storage.
La cuenta de servicio que llama a Cloud Deploy para crear una versión debe tener la función
clouddeploy.releaser
. También debe tener el permisoiam.serviceAccount.actAs
para usar la cuenta de servicio que renderiza los manifiestos (por ejemplo, a través de la funciónroles/iam.serviceAccountUser
).La cuenta de servicio que llama a Cloud Deploy para promover una versión o crear una
rollout
debe tener el permisoiam.serviceAccount.actAs
para usar la cuenta de servicio que se implementa en los destinos (por ejemplo, a través de la funciónroles/iam.serviceAccountUser
).La cuenta de servicio configurada para una automatización debe tener permiso a fin de ejecutar las operaciones que se automatizan. Obtén más información.
La cuenta de servicio de automatización
Puedes automatizar algunas acciones en una versión. Cloud Deploy ejecuta estas automatizaciones con la cuenta de servicio de automatización, que puede ser la cuenta de servicio de ejecución predeterminada, una cuenta de servicio no predeterminada que se usa como cuenta de servicio de ejecución, o bien otra cuenta de servicio.
Esta cuenta de servicio se describe en la sección La cuenta de servicio de automatización.
¿Qué sigue?
- Obtén información sobre IAM.
- Obtén información sobre los roles predefinidos de Cloud Deploy.
- Obtén información sobre cómo crear y administrar cuentas de servicio.