Cuentas de servicio de Google Cloud Deploy

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En este documento, se describen las cuentas de servicio que se usan para ejecutar Google Cloud Deploy y llamar a Google Cloud Deploy para ejecutar varias operaciones.

Google Cloud Deploy usa dos cuentas de servicio:

  • El agente de servicio de Google Cloud Deploy

    Google 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 que tiene, por ejemplo, cuando usas recursos fuera del proyecto (como una cuenta de servicio o un grupo de trabajadores privados de Cloud Build).

  • La cuenta de servicio de ejecución de Google Cloud Deploy

    Google Cloud Deploy usa esta cuenta de servicio para ejecutar operaciones de procesamiento 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.

Consulta Crea y administra cuentas de servicio para obtener instrucciones sobre cómo editar los permisos de la cuenta de servicio y cómo crear una cuenta de servicio alternativa.

Agente de servicio de Google Cloud Deploy

El agente de servicio de Google Cloud Deploy es una cuenta de servicio que usa Google Cloud Deploy para interactuar con otros servicios de Google Cloud en los que se basa Google 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 Google Cloud Deploy

De forma predeterminada, Google Cloud Deploy se ejecuta con la cuenta de servicio predeterminada de Compute Engine. Esa cuenta de servicio tiene permisos suficientes en el proyecto que la contiene para renderizar manifiestos y, también, implementar 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 permisos amplios. La práctica recomendada es cambiar el entorno de ejecución para que Google Cloud Deploy se ejecute como una cuenta de servicio diferente. Puedes cambiar la cuenta de servicio de ejecución para cada destino con la propiedad executionConfigs.privatePool.serviceAccount o la propiedad executionConfigs.defaultPool.serviceAccount en la definición de destino.

Cualquier cuenta de servicio que establezcas 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 el procesamiento y la implementación, debes crear una o más cuentas de servicio alternativas. Estas son las cuentas de servicio en las que se ejecuta Google 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 separadas por canalización de entrega. Cada cuenta de servicio incluye 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 el entorno de ejecución, puedes especificar una cuenta de servicio que esté en un proyecto diferente al de la creación de la canalización de entrega:

  1. En el proyecto al que pertenece la cuenta de servicio, habilita la política de la organización de SA entre proyectos.

  2. Otorga al agente de servicio de Google Cloud Deploy (service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com) el permiso iam.serviceAccounts.actAs para tu cuenta de servicio.

    También puedes otorgar la función roles/iam.serviceAccountUser, que incluye ese permiso.

  3. Otorga al agente de servicio de Cloud Build (service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com) la función roles/iam.serviceAccountTokenCreator.

  4. Otorga al emisor los permisos gcloud deploy releases create y gcloud deploy rollouts create iam.serviceAccounts.actAs en la cuenta de servicio.

Permisos necesarios

  • La cuenta de servicio que se usa para las configuraciones de procesamiento debe tener permisos suficientes a fin de acceder al bucket de Cloud Storage en el que se almacenan los recursos de Google Cloud Deploy (canalizaciones de entrega, versiones y lanzamientos).

    El rol roles/clouddeploy.jobRunner incluye todos los permisos que necesita la cuenta de servicio de procesamiento (privatePool o defaultPool).

  • La cuenta de servicio que se usa para la implementación debe tener permisos suficientes a fin de implementar en el clúster de destino y permiso para acceder al bucket de Cloud Storage.

  • La cuenta de servicio que llama a Google Cloud Deploy para crear una versión debe tener el rol clouddeploy.releaser. También debe tener el permiso iam.serviceAccount.actAs para usar la cuenta de servicio que procesa los manifiestos (por ejemplo, a través del rol roles/iam.serviceAccountUser).

  • La cuenta de servicio que llama a Google Cloud Deploy a fin de promover una versión o crear un rollout debe tener el permiso iam.serviceAccount.actAs para usar la cuenta de servicio que se implementa en los destinos.

¿Qué sigue?