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 de la canalización de publicación manuales o automatizadas.

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 publicación o un destino seleccionados (o todas las canalizaciones o destinos).

¿Qué comportamiento se puede restringir?

Puedes crear políticas de implementación para restringir o evitar 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 publicación determinada durante un período determinado. Por ejemplo, puedes usarlo para restricciones de temporada.

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, la acción no se realiza y no es necesario evaluar las políticas de despliegue.

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

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

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

    • Cloud Deploy verifica los períodos 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 a la canalización de publicación o al objetivo y a la acción, se aplica esa 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 reglas 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 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 se restringirían por política, hay varios permisos necesarios 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 roles/clouddeploy.policyOverrider incluye el permiso .override.

Crear una política de implementación

La creación de un recurso de política de implementación 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 Cómo implementar 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 uno o más rules de políticas.

    Cada regla describe una restricción y las circunstancias en las que se aplica. Consulta Cómo implementar 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 con gcloud deploy apply --filename= para crear el recurso.

Las canalizaciones de entrega o los destinos a los que se hace referencia ahora se restringen según las reglas del recurso de política de implementación.

Selectores de políticas de implementación

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

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

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

En esta configuración YAML, deliveryPipeline.id toma el nombre de la canalización de publicación 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. También puedes usar etiquetas para hacer coincidir las canalizaciones de entrega, los destinos o ambos.

Dentro de un selector determinado, los elementos se combinan con el operador Y. Se aplica la operación OR a varios selectores. Es decir, para que la política restrinja una solicitud determinada, 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íticas, que definen qué acción se restringe en la canalización de publicación o el objetivo seleccionados. La regla también define en qué circunstancias se aplica.

Las siguientes reglas están disponibles:

  • rolloutRestriction

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

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

  • ADVANCE

    Las fases de lanzamiento no se pueden adelantar.

  • APPROVE

    No se puede aprobar la promoción de lanzamiento.

  • CANCEL

    No se pueden cancelar los lanzamientos.

  • 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

    No se pueden ignorar las tareas.

  • RETRY_JOB

    No se pueden reintentar los trabajos.

  • 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 ver la estructura YAML de esta regla.

Fechas y horas en una regla rolloutRestriction

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

Los siguientes 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.

  • Para oneTimeWindows, las fechas deben incluir la hora. Para weeklyWindows, puedes omitir la hora del día. Sin embargo, si incluyes startTime, debes incluir endTime, y viceversa.

    Por ejemplo, una inmovilización solo los domingos sería la siguiente:

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

    También puedes hacer lo siguiente:

    - daysOfWeek: [SUNDAY]
    

    Pero no lo siguiente:

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

    Por ejemplo: timeZone: America/New_York.

Ventanas de tiempo no repetitivas

Un período no recurrente comienza y finaliza en un día y una hora específicos. Puedes usar esta opción para cualquier período durante el cual quieras restringir los lanzamientos.

Las ventanas de tiempo no repetidas se configuran con una estrofa oneTimeWindows.

Ventanas de tiempo repetidas

Un período recurrente describe un bloque de tiempo recurrente durante el cual quieres restringir los lanzamientos. Por ejemplo, puedes usar esta función para restringir los lanzamientos durante los fines de semana.

Las ventanas de tiempo repetidas se configuran con una estrofa 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.

Suspensión anual

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

En el siguiente YAML, se muestra un período único (no repetitivo) 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.

Congelación de fin de semana repetida

En el siguiente YAML, se muestra un período de tiempo 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 por la mañana 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 de forma local y editarlo allí.

  2. Aplica ese archivo con gcloud deploy apply --filename=.

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

Debido a que las políticas de implementación se evalúan cuando se intenta la acción restringida, todas esas acciones contra todos los recursos de Cloud Deploy están sujetas a la política actualizada. Es decir, no hay ningún resto de las restricciones anteriores. Por ejemplo, si tienes un bloqueo de 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 de esa fecha.

Anula una política de implementación

Si es necesario, puedes anular una política de implementación. 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 que se realicen implementaciones, puedes anular esa política para revertir la implementación incorrecta.

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

Puedes anular la política desde gcloud CLI o con la consola de Google 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 las políticas.

    Si tienes permiso para anular la política, Cloud Deploy ahora ejecuta 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 esa política impediría. Por ejemplo, el siguiente comando promociona una versión 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 esta 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]

    Es el nombre de la política como se define en el archivo de configuración de la política.

  • [PROJECT]

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

  • [REGION]

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

Después de borrar el recurso de la política de implementación, las canalizaciones de publicación y los objetivos 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 del 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 se incumple la política. También se escribe un registro cuando una solicitud incumple la política, pero esta se permite porque está suspendida o se anuló. No se escribe ningún registro cuando se otorga la solicitud porque no se incumple la política.

  • Falla de notificación de Pub/Sub cuando se cambia un recurso de política de implementación

¿Qué sigue?