Restringe el comportamiento de implementación con políticas

En este documento, se describe cómo usar las políticas de implementación para restringir las acciones manuales o automatizadas de la canalización de entrega.

Una política de implementación es un recurso de Cloud Deploy que puedes usar para restringir acciones manuales o automáticas en una canalización de entrega o un destino seleccionados (o en todas las canalizaciones o destinos).

¿Qué comportamientos se pueden restringir?

Puedes crear políticas de implementación para restringir o impedir que Cloud Deploy realice ciertas acciones en los lanzamientos. Por ejemplo, una política puede impedir la creación de lanzamientos para una canalización de entrega determinada durante un período específico. Por ejemplo, puedes usarlo para restricciones estacionales.

Cómo se evalúan y aplican las políticas

Para cualquier acción manual o automatizada, Cloud Deploy hace lo siguiente:

  1. Verifica los permisos de Identity and Access Management.

    Si el usuario o la cuenta de servicio no tienen los permisos de IAM adecuados, no se realiza la acción y no es necesario evaluar las políticas de implementación.

  2. Verifica si hay una política aplicable para el destino o la canalización de entrega y, si la hay, se evalúa la política.

    • Cloud Deploy evalúa la acción que se está realizando para ver si se aplica esta regla.

      Es decir, ¿el tipo de acción y el invocador coinciden con la política?

    • Cloud Deploy verifica los rangos de fecha y hora definidos para la política para ver si está vigente en el momento de la solicitud.

    • Si la política está vigente y la regla se aplica al canal de entrega o al destino y la acción, se aplica la regla y se bloquea la acción.

Requisitos y limitaciones

  • Cada política debe tener al menos un selector.

  • Cada política debe tener al menos una regla.

    Todos los IDs de regla deben ser únicos dentro de una política de implementación.

  • Cada regla debe tener al menos un timeWindows y, dentro de ese timeWindows, debe haber un oneTimeWindows o un weeklyWindows.

    Consulta Fechas y horas para obtener más detalles sobre el uso de los bloques de tiempo.

  • No puedes tener más de 1,000 políticas de implementación por proyecto o ubicación.

Roles y permisos de Identity and Access Management necesarios

Además de los permisos que necesitas para ejecutar cualquier canalización de entrega de Cloud Deploy y realizar las tareas que estarían restringidas por la política, hay varios permisos que se necesitan para realizar ciertas operaciones en el recurso de política:

  • clouddeploy.deployPolicies.create
  • clouddeploy.deployPolicies.delete
  • clouddeploy.deployPolicies.get
  • clouddeploy.deployPolicies.list
  • clouddeploy.deployPolicies.update
  • clouddeploy.deployPolicies.override

Esos permisos se incluyen en el rol roles/clouddeploy.policyAdmin. Además, el rol de roles/clouddeploy.policyOverrider incluye el permiso de .override.

Crear una política de implementación

La creación de un recurso de deploy-policy consta de los siguientes pasos:

  1. Crea un archivo YAML con la configuración de la política de implementación.

    La configuración incluye un encabezado que identifica el recurso como una política de implementación. name es obligatorio.

     apiVersion: deploy.cloud.google.com/v1
     kind: DeployPolicy
     metadata:
       name: 
     description: 
    
  2. Agrega una referencia a las canalizaciones de entrega y los destinos a los que se aplica la política (el selectors).

    Consulta Implementa selectores de políticas y la Referencia del esquema de configuración para obtener más información sobre los selectores de políticas y cómo configurarlos.

  3. Agrega una o más políticas rules.

    Cada regla describe una restricción y las circunstancias en las que se aplica. Consulta Implementa reglas de políticas y la Referencia del esquema de configuración para obtener más información sobre las reglas de políticas y cómo configurarlas.

  4. Aplica ese archivo para crear la política:

    gcloud deploy apply --file=FILENAME \
                         --region=REGION \
                         --project=PROJECT_ID
    

    Aquí, FILENAME es el nombre del archivo YAML que contiene la definición de DeployPolicy, REGION es la región en la que deseas crear el recurso de política de implementación y PROJECT_ID es el proyecto en el que deseas crear el recurso.

Las canalizaciones o los destinos de entrega a los que se hace referencia ahora están restringidos según las reglas del recurso deploy-policy.

Implementa selectores de políticas

Los selectores, definidos en las configuraciones de la política de implementación, determinan qué canalizaciones y destinos de entrega se ven afectados por una regla determinada.

Un selector se define en una sección selectors de la configuración de la política de implementación, como una propiedad de nivel superior:

selectors:
- deliveryPipeline:
    id:
    labels:
  target:
    id:
    labels:

En este archivo YAML de configuración, deliveryPipeline.id toma el nombre de la canalización de entrega y target.id toma el nombre del destino (en ambos casos, metadata.name).

Puedes usar id: * para seleccionar todas las canalizaciones de entrega o todos los destinos. Ten en cuenta que * es un valor de campo especial para seleccionar todos los elementos. No se admite el uso de comodines arbitrarios. También puedes usar etiquetas para hacer coincidir las canalizaciones o los destinos de entrega, o ambos.

Dentro de un selector determinado, los elementos se combinan con el operador AND. Los selectores múltiples se combinan con OR. Es decir, para que una política restrinja una solicitud determinada, esta debe aplicarse a al menos un selector. Sin embargo, dentro de ese selector, la solicitud debe coincidir con todos los elementos.

Implementa reglas de políticas

Cada política de implementación incluye una o más reglas de política, que definen qué acción se restringe en la canalización de entrega o el destino seleccionados. La regla también define en qué circunstancias se aplica.

Las siguientes reglas están disponibles:

  • rolloutRestriction

La regla rolloutRestriction impide que se realicen las acciones de lanzamiento especificadas en los destinos seleccionados que utilizan las canalizaciones de entrega seleccionadas. Esta regla usa un período que define cuándo no se puede crear un lanzamiento para el destino y la canalización de entrega seleccionados. Consulta Fechas y horas para obtener una descripción de cómo se especifican las fechas y las horas en las reglas de políticas de implementación.

Se pueden restringir las siguientes acciones mientras la regla esté vigente:

  • ADVANCE

    Las fases de lanzamiento no se pueden avanzar.

  • APPROVE

    No se puede aprobar la promoción del lanzamiento.

  • CANCEL

    Los lanzamientos no se pueden cancelar.

  • CREATE

    No se pueden crear lanzamientos. Puedes crear una versión si una política impide esta acción, pero esa versión no generará un lanzamiento.

  • IGNORE_JOB

    Los trabajos no se pueden ignorar.

  • RETRY_JOB

    Los trabajos no se pueden reintentar.

  • ROLLBACK

    Los lanzamientos no se pueden revertir.

  • TERMINATE_JOBRUN

    No se pueden finalizar las ejecuciones de trabajos.

    Consulta la referencia del esquema de configuración para conocer la estructura YAML de esta regla.

Fechas y horas en una regla de rolloutRestriction

Configuras bloques de fecha y hora para especificar períodos repetitivos y no repetitivos durante los cuales la política de implementación está vigente.

Estos son los requisitos para expresar fechas y horas:

  • Las fechas se expresan como yyyy-mm-dd.

  • Cuando se expresa la hora del día, el inicio del día es 00:00 y el final del día es 24:00.

  • En el caso de oneTimeWindows, las fechas deben incluir la hora. En el caso de weeklyWindows, puedes omitir la hora del día. Pero si incluyes startTime, también debes incluir endTime, y viceversa.

    Por ejemplo, una inhabilitación solo los domingos se vería de la siguiente manera:

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
      endTime: "24:00"
    

    También puedes hacer lo siguiente:

    - daysOfWeek: [SUNDAY]
    

    Pero no esto:

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
    
  • Debes incluir una zona horaria en la estrofa timeWindows.

    Por ejemplo: timeZone: America/New_York.

Períodos no repetitivos

Un período no recurrente comienza y finaliza en un día y hora específicos. Usarías este parámetro para cualquier período durante el que quieras restringir los lanzamientos.

Los períodos no repetitivos se configuran con una sección oneTimeWindows.

Ventanas de tiempo repetitivas

Un período recurrente describe un bloque de tiempo recurrente durante el cual deseas restringir los lanzamientos. Por ejemplo, podrías usarlo para restringir los lanzamientos los fines de semana.

Los períodos repetidos se configuran con una sección weeklyWindows.

Ejemplos

En esta sección, se incluyen algunos ejemplos del uso de fechas y horas para configurar cuándo se aplica una política de implementación.

Inmovilización anual

Si hay una época del año durante la que deseas detener los lanzamientos, puedes configurar un bloque oneTimeWindows para hacerlo. Si las fechas son predecibles de un año a otro, deberás usar varios bloques oneTimeWindow.

El siguiente código YAML muestra un período único (no recurrente) para aplicar una política de implementación para una inmovilización anual:

timeWindows:
  timeZone: "America/New_York"
  oneTimeWindows:
  - start: "2024-12-22 17:00"
    end: "2025-01-02 09:00"

Este YAML describe un período desde el 22 de diciembre de 2024 a las 5 p.m. hasta el 2 de enero de 2025 a las 9 a.m.

Congelamiento de fin de semana repetitivo

El siguiente código YAML muestra un período recurrente para aplicar una política de implementación que restringe los lanzamientos los fines de semana, desde el viernes a las 5 p.m. hasta el lunes a las 9 a.m.:

timeWindows:
  timeZone: "America/New_York"
  weeklyWindows:
  - daysOfWeek: [FRIDAY]
    startTime: "17:00"
    endTime: "24:00"
  - daysOfWeek: [SATURDAY, SUNDAY]
    startTime: "00:00"
    endTime: "24:00"
  - daysOfWeek: [MONDAY]
    startTime: "00:00"
    endTime: "09:00"

Actualiza una política de implementación

La actualización de una política de implementación consta de los siguientes pasos:

  1. Edita el archivo YAML de configuración de la política.

    Si creaste la política con la consola de Google Cloud , puedes obtener la configuración de YAML seleccionando la pestaña YAML en la página Detalles de la política de implementación. Luego, puedes copiar ese texto en un archivo local y editarlo allí.

  2. Aplica ese archivo para actualizar la política:

    gcloud deploy apply --file=FILENAME \
                         --region=REGION \
                         --project=PROJECT_ID
    

    Esto actualiza el recurso de política de implementación con la nueva configuración.

Dado que las políticas de implementación se evalúan cuando se intenta realizar la acción restringida, todas las acciones de este tipo contra todos los recursos de Cloud Deploy están sujetas a la política actualizada. Es decir, no hay ningún remanente de las restricciones anteriores. Por ejemplo, si tienes un bloqueo restrictRollouts para todo el mes de diciembre y, el 14 de diciembre, actualizas la política para que la restricción finalice el 15 de diciembre, los lanzamientos ya no se bloquearán después del 15 de diciembre.

Anula una política de implementación

Puedes anular una política de implementación si es necesario. Por ejemplo, si hay un problema con una implementación en producción y necesitas revertirla, pero hay una política de implementación que impide cualquier lanzamiento, puedes anular esa política para revertir el lanzamiento incorrecto.

Para anular una política de implementación, debes tener el permiso de IAM clouddeploy.deployPolicies.override.

Puedes anular la política desde gcloud CLI o con la consola deGoogle Cloud :

Console

  1. En la consola de Google Cloud , intenta realizar una acción que esté bloqueada por una política.

    Se muestra un diálogo que indica que una política de implementación bloquea la acción. Este diálogo incluye un vínculo a la política específica que bloquea esta acción.

  2. En el campo de texto proporcionado, escribe el nombre de la política y haz clic en Intentar anular políticas.

    Si tienes permiso para anular la política, Cloud Deploy ejecutará la acción.

gcloud CLI

Para anular una política de implementación con gcloud CLI, agrega --override-deploy-policies al comando para cualquier acción que impediría esa política. Por ejemplo, el siguiente comando promueve una versión y anula una política de implementación específica que, de otro modo, impediría la promoción:

 gcloud deploy releases promote --release=my-release-001 \
   --project=my-policy-testing-project \
   --region=us-central1 \
   --delivery-pipeline=my-pipeline \
   --to-target=prod-target \
   --override-deploy-policies=my-deploy-policy

Borra una política de implementación

Para borrar una política de implementación, haz lo siguiente:

Console

  1. En la consola de Google Cloud , navega a la página Políticas de implementación de Cloud Deploy.

    Abre la página Implementar políticas

    La página incluye una lista de las políticas de implementación disponibles en tu proyecto actual, si las hay.

  2. Selecciona el botón Acciones de la política que deseas borrar y haz clic en Borrar política de implementación.

  3. Para confirmar la eliminación, escribe el nombre de la política de implementación y haz clic en Confirmar.

    La política se borró y ahora puedes realizar cualquiera de las acciones que restringía.

gcloud CLI

Para borrar una política de implementación con gcloud CLI, ejecuta el siguiente comando:

 gcloud deploy deploy-policies delete \
    --project=[PROJECT] \
    --region=[REGION] \
    [POLICY_NAME]

Reemplaza lo siguiente:

  • [POLICY_NAME]

    Nombre de la política tal como se define en el archivo de configuración de la política.

  • [PROJECT]

    Es el ID del proyecto de Google Cloud en el que creaste la política de implementación.

  • [REGION]

    Región en la que creaste la política de implementación.

Después de borrar el recurso de política de implementación, las canalizaciones de entrega y los destinos afectados ya no estarán sujetos a la política y no se restringirán, a menos que se vean afectados por otra política de implementación.

Registro de la política de implementación

Cuando se evalúa una política de implementación, se crean entradas de registro de la plataforma para las siguientes acciones:

  • Evaluación de política

    Los registros de la plataforma se escriben cuando se evalúa una solicitud y esta incumple la política. También se escribe un registro cuando una solicitud incumple la política, pero se permite porque la política está suspendida o se anuló. No se escribe ningún registro cuando se otorga la solicitud porque no se incumple la política.

  • Se produjo un error en la notificación de Pub/Sub cuando se cambió un recurso de política de implementación.

¿Qué sigue?