Usar la gestión de identidades y accesos para restringir el acceso a Cloud Deploy

Al igual que con todos los productos de Google Cloud , Gestión de Identidades y Accesos protege Cloud Deploy controlando qué usuarios autenticados y cuentas de servicio pueden realizar qué acciones.

En este documento se describen algunas de las funciones de Gestión de Identidades y Accesos (IAM) y se proporcionan instrucciones para proteger las entregas de aplicaciones gestionadas con Cloud Deploy. A continuación, se indican algunas formas concretas de restringir el acceso a acciones y recursos en Cloud Deploy:

Antes de empezar

Acerca de las funciones avanzadas de IAM

Además de los roles y permisos, Cloud Deploy usa las siguientes funciones de gestión de identidades y accesos para proporcionar esos controles:

Acerca de las políticas de gestión de identidades y accesos

Una política de gestión de identidades y accesos es una colección de enlaces y metadatos. La vinculación de roles asigna un único rol a una o varias entidades principales (usuarios, grupos o cuentas de servicio), así como a las condiciones específicas del contexto que controlan si la vinculación se aplica.

Para obtener más información sobre las políticas de gestión de identidades y accesos, consulta Información sobre las políticas.

Acerca de las condiciones de gestión de identidades y accesos

Con las condiciones de gestión de identidades y accesos, puedes controlar el acceso a los recursos y las acciones de Cloud Deploy en función de las condiciones calculadas en el tiempo de ejecución. Por ejemplo, puedes restringir una promoción a un objetivo concreto para que solo se permita durante un periodo específico.

Acerca de los atributos de la API

Cuando creas condiciones de IAM, puedes hacer referencia a atributos de API para obtener información en tiempo de ejecución sobre una solicitud. Por ejemplo, puede usar un atributo de API para obtener el nombre del recurso al que se dirige la solicitud. Después, puedes compararlo con el recurso o los recursos a los que tiene acceso la principal.

Conceder acceso pormenorizado con funciones avanzadas de gestión de identidades y accesos

Estas funciones avanzadas de IAM te permiten controlar el acceso a recursos específicos y a tipos de recursos en condiciones concretas.

Los procedimientos de esta sección conceden acceso a recursos específicos (destinos y canales de distribución). También puedes conceder acceso a nivel de proyecto, lo que afecta a todos los canales de distribución o a todos los destinos de ese proyecto. Para definir una política de gestión de identidades y accesos en un proyecto, usa el comando gcloud projects set-iam-policy:

gcloud projects set-iam-policy PROJECT_ID POLICY_FILE

Conceder acceso a una canalización de entrega específica

Puedes conceder permisos a una entidad de seguridad para crear, modificar y eliminar todas las canalizaciones de entrega. Para ello, solo tienes que concederle el rol adecuado. Sin embargo, en ocasiones, puede que quieras conceder este acceso a un principal para una o varias canalizaciones específicas.

Para ello, usa enlaces de rol para vincular el rol roles/clouddeploy.developer con esa entidad principal. Después, cuando apliques la política (con setIamPolicy), especifica a qué canal de distribución se concede el acceso.

Para conceder acceso a una canalización de entrega específica, sigue estos pasos:

  1. Crea un archivo de política con la siguiente vinculación:

    bindings:
    - role: roles/clouddeploy.developer
      members:
      - user:fatima@example.com
    

    En el ejemplo anterior, se asigna el rol a un usuario, pero también puedes asignarlo a un grupo o a una cuenta de servicio.

  2. Llama al siguiente comando para aplicar el archivo de política a una canalización de entrega específica:

    gcloud deploy delivery-pipelines set-iam-policy --delivery-pipeline=PIPELINE_NAME --region=REGION POLICY_FILE
    

Conceder acceso para configurar un objetivo específico

Para conceder acceso a una cuenta principal a un destino específico, puedes usar vinculaciones de roles. Para ello, vincula el rol roles/clouddeploy.operator con esa entidad principal y, a continuación, cuando apliques la política (con setIamPolicy), especifica a qué destino se concede el acceso.

El acceso al objetivo específico permite a la entidad actualizarlo y eliminarlo.

  1. Crea un archivo de política con la siguiente vinculación:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - group:cd_operators@example.com
    

    En el ejemplo anterior, se asigna el rol a un grupo, pero también puedes asignarlo a un usuario o a una cuenta de servicio.

  2. Llama al siguiente comando para aplicar el archivo de política a un destino específico:

    gcloud deploy targets set-iam-policy TARGET --region=REGION POLICY_FILE
    

Conceder permisos para promocionar una versión a un destino específico

En este procedimiento se da por hecho que ya hay una política que vincula el rol a la entidad principal. Aquí añadimos una condición que especifica el objetivo:

  1. Crea un archivo de política con el siguiente enlace:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    En este enlace de rol, condition toma un par clave:valor, donde la clave es expression y el valor es una expresión CEL. Esta expresión hace referencia a un conjunto de atributos contextuales sobre la solicitud y se evalúa como un valor booleano.

    En este caso, la expresión se evalúa cuando la entidad principal intenta promocionar la versión para confirmar que el destino de la promoción coincide con el destino de la expresión.

    La expresión usa el atributo de API clouddeploy.googleapis.com/rolloutTarget, que es el objetivo al que el principal intenta ascender. La expresión compara el valor con el objetivo al que se le está dando acceso promocional a la entidad.

  2. Define la vinculación de un flujo de procesamiento de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Si quieres definir este enlace para todas las canalizaciones de distribución, puedes hacerlo a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Conceder permisos para aprobar lanzamientos a un objetivo específico

La vinculación de esta sección concede a un principal permiso para aprobar lanzamientos de una canalización e incluye una condición que aplica el permiso al prod de destino.

  1. Crea un archivo de política con el siguiente enlace:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    En este enlace de rol, condition toma un par clave:valor, donde la clave es expression y el valor es una expresión CEL. La expresión hace referencia a un conjunto de atributos contextuales sobre la solicitud y se evalúa como un valor booleano.

    En este caso, la expresión se evalúa cuando la entidad principal intenta aprobar el lanzamiento para confirmar que el destino coincide con el destino de la expresión.

    La expresión usa el atributo de API clouddeploy.googleapis.com/rolloutTarget, que es el destino del lanzamiento, y lo compara con el destino para el que se le está dando acceso de aprobación a la entidad principal. El atributo clouddeploy.googleapis.com/rolloutTarget es el único atributo de API que admite Cloud Deploy.

  2. Define la vinculación de un flujo de procesamiento de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Si quieres definir este enlace para todas las canalizaciones de distribución, puedes hacerlo a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Conceder permisos para promocionar un lanzamiento durante un periodo concreto

La vinculación de esta sección concede a una cuenta principal permiso para promocionar versiones de una canalización e incluye una condición que especifica el periodo durante el que la vinculación está en vigor.

  1. Crea un archivo de política con el siguiente enlace:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Promote during safe window
    

    En este enlace de rol, condition toma un par clave:valor, donde la clave es expression y el valor es una expresión CEL. La expresión hace referencia a un conjunto de atributos contextuales sobre la solicitud y se evalúa como un valor booleano. Esta expresión comprueba que la hora de la solicitud sea de lunes a viernes.

    En este caso, la expresión se evalúa cuando la entidad principal intenta promocionar la versión para confirmar que el destino de la promoción coincide con el destino de la expresión.

  2. Define la vinculación de un flujo de procesamiento de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Si quieres definir este enlace para todas las canalizaciones de distribución, puedes hacerlo a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Conceder permisos para aprobar lanzamientos durante un periodo específico

La vinculación de esta sección otorga a una cuenta principal permiso para aprobar lanzamientos e incluye una condición que especifica el periodo durante el cual la vinculación está en vigor.

  1. Crea un archivo de política con el siguiente enlace:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Approve during safe window
    

    En este enlace de rol, condition toma un par clave:valor, donde la clave es expression y el valor es una expresión CEL que hace referencia a un conjunto de atributos contextuales sobre la solicitud y se evalúa como un valor booleano. Esta expresión comprueba que la hora de la solicitud sea de lunes a viernes.

    En este caso, la expresión se evalúa cuando la entidad principal intenta aprobar la implementación para confirmar que el destino de la implementación coincide con el destino de la expresión.

  2. Define la vinculación de un flujo de procesamiento de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Si quieres definir este enlace para todas las canalizaciones de distribución, puedes hacerlo a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Conceder permisos para reintentar un trabajo en función del tipo de trabajo

La vinculación de esta sección concede a un principal permiso para reintentar un trabajo de Cloud Deploy, en función del tipo de trabajo.

  1. Crea un archivo de política con el siguiente enlace:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/jobType", "") == "deploy"
        title: Retry deploy job
    

    En este enlace de rol, condition toma un par clave:valor, donde la clave es expression y el valor es una expresión CEL. La expresión hace referencia a un conjunto de atributos contextuales sobre la solicitud y se evalúa como un valor booleano.

    En este caso, la expresión se evalúa cuando la entidad intenta volver a ejecutar el trabajo para confirmar que los tipos de trabajo coinciden con el tipo de trabajo de la expresión.

    La expresión usa el atributo de la API clouddeploy.googleapis.com/jobType, que puede ser deploy o verify.

  2. Define la vinculación de un flujo de procesamiento de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Si quieres definir este enlace para todas las canalizaciones de distribución, puedes hacerlo a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE