Usa IAM para restringir el acceso a Cloud Deploy

Al igual que con todos los productos de Google Cloud, Identity and Access Management protege a Cloud Deploy mediante el control de qué cuentas de servicio y usuarios autenticados pueden realizar qué acciones.

En este documento, se describen algunas de las funciones de IAM y se proporcionan instrucciones para proteger las entregas de aplicaciones que se administran con Cloud Deploy. Estas son algunas de las formas específicas en que puedes restringir el acceso a las acciones y los recursos en Cloud Deploy:

Antes de comenzar

Acerca de las funciones avanzadas de IAM

Además de funciones y permisos, Cloud Deploy usa las siguientes funciones de IAM para proporcionar esos controles:

Acerca de las políticas de IAM

Una política de IAM es un conjunto de vinculaciones y metadatos. La vinculación de roles otorga un solo rol a uno o más principales (usuarios, grupos o cuentas de servicio), además de cualquier conditions específica del contexto que controle si la vinculación se aplica.

Para obtener más información sobre las políticas de IAM, consulta Información sobre las políticas.

Acerca de las condiciones de IAM

Con las condiciones de IAM, puedes controlar el acceso a los recursos y las acciones de Cloud Deploy según las condiciones calculadas en el entorno de ejecución. Por ejemplo, puedes restringir la promoción a un objetivo determinado de modo que solo se permita durante un período específico.

Acerca de los atributos de la API

Cuando creas condiciones de IAM, puedes hacer referencia a los atributos de la API para obtener información sobre el tiempo de ejecución de una solicitud. Por ejemplo, puedes usar un atributo de API a fin de obtener el nombre del recurso para el que es la solicitud. Luego, puedes compararla con los recursos a los que tiene acceso la principal.

Otorga acceso detallado con las funciones avanzadas de IAM

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

Los procedimientos de esta sección otorgan acceso a recursos específicos (destinos, canalizaciones de entrega). También puedes otorgar acceso a nivel de proyecto, que afecta a todas las canalizaciones de entrega o a todos los destinos de ese proyecto. A fin de establecer una política de IAM para un proyecto, usa el comando gcloud projects set-iam-policy:

gcloud projects set-iam-policy PROJECT_ID POLICY_FILE

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

Puedes otorgar permisos para que una principal cree, modifique y borre todas las canalizaciones de entrega con solo otorgar una función adecuada. Pero, a veces, es posible que desees otorgar este acceso a una principal para una o más canalizaciones específicas.

Para ello, usa vinculaciones de roles a fin de vincular el rol roles/clouddeploy.developer con ese principal y, cuando apliques la política (con setIamPolicy), especifica qué canalización de entrega se otorga el acceso.

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

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

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

    En el ejemplo anterior, se otorga el rol a un usuario, pero también puedes otorgar la función a un grupo o a una cuenta de servicio.

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

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

Otorga acceso para configurar un destino específico

Para otorgar a un principal acceso a un destino específico, puedes usar vinculaciones de roles. Para hacerlo, vincula el rol roles/clouddeploy.operator con ese principal y, cuando apliques la política (con setIamPolicy), especifica a qué destino se otorga el acceso.

El acceso al destino específico le da a la principal la capacidad de actualizar y borrar ese destino.

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

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

    En el ejemplo anterior, se otorga el rol a un grupo, pero también se puede otorgar a un usuario o a una cuenta de servicio.

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

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

Otorga permisos para promover una versión a un destino específico

En este procedimiento, se supone que ya existe una política que vincula el rol a la principal. En este caso, agregamos una condición que especifica el destino:

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

    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 esta vinculación de función, condition toma un par clave-valor, en el que la clave es expression y el valor es una expresión de 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 principal intenta promover la versión para confirmar que el destino de promoción coincida con el destino en la expresión.

    La expresión usa el atributo de API clouddeploy.com/rolloutTarget, que es el destino al que la principal intenta ascender. La expresión la compara con el destino al que la principal le otorga acceso de promoción.

  2. Configura la vinculación para una canalización de entrega específica:

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

    Si deseas establecer esta vinculación en todas las canalizaciones de entrega, puedes configurarla a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Otorga permisos para aprobar lanzamientos a un destino específico

La vinculación en esta sección otorga un permiso principal para aprobar lanzamientos de una canalización y, además, incluye una condición que aplica el permiso al destino prod.

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

    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 esta vinculación de función, condition toma un par clave-valor, en el que la clave es expression y el valor es una expresión de 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 principal intenta aprobar el lanzamiento para confirmar que el objetivo coincide con el destino en la expresión.

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

  2. Configura la vinculación para una canalización de entrega específica:

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

    Si deseas establecer esta vinculación en todas las canalizaciones de entrega, puedes configurarla a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Otorga permisos para promover una versión durante un período específico

La vinculación en esta sección otorga un permiso principal para promover las versiones de una canalización y, además, incluye una condición que especifica el período durante el cual la vinculación estará vigente.

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

    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 esta vinculación de función, condition toma un par clave-valor, en el que la clave es expression y el valor es una expresión de 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 verifica que la hora de la solicitud ocurra de lunes a viernes.

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

  2. Configura la vinculación para una canalización de entrega específica:

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

    Si deseas establecer esta vinculación en todas las canalizaciones de entrega, puedes configurarla a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Otorga permisos para aprobar lanzamientos durante un período específico

La vinculación de esta sección otorga un permiso principal para aprobar lanzamientos y, además, incluye una condición que especifica el período durante el cual la vinculación está en vigencia.

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

    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 esta vinculación de rol, condition toma un par clave-valor, en el que 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 booleano. Esta expresión verifica que la hora de la solicitud ocurra de lunes a viernes.

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

  2. Configura la vinculación para una canalización de entrega específica:

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

    Si deseas establecer esta vinculación en todas las canalizaciones de entrega, puedes configurarla a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Otorga permisos para reintentar un trabajo según su tipo

La vinculación en esta sección otorga a un permiso principal para reintentar un trabajo de Cloud Deploy según el tipo de trabajo.

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

    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 esta vinculación de función, condition toma un par clave-valor, en el que la clave es expression y el valor es una expresión de 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 principal intenta reintentar el trabajo para confirmar que los tipos de trabajo coinciden con el tipo de trabajo en la expresión.

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

  2. Configura la vinculación para una canalización de entrega específica:

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

    Si deseas establecer esta vinculación en todas las canalizaciones de entrega, puedes configurarla a nivel de proyecto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE