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 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 una cuenta de IAM adecuada permisos, no se realiza la acción y no es necesario evaluar la implementación y políticas de seguridad.

  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 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 cómo usar bloques horarias.

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

Se requieren roles y permisos de Identity and Access Management

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 la 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 lo siguiente: .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 un implementar política. name es obligatorio.

     apiVersion: deploy.cloud.google.com/v1
     kind: DeployPolicy
     metadata:
       name: 
     description: 
    
  2. Agrega una referencia a las canalizaciones y los destinos de entrega a los que se aplica la política se aplica (las 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 de manera forzosa. 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 la 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

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

Se define un selector en una estrofa selectors en la política de implementación de Terraform 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. Puedes usar etiquetas para que coincidan con las canalizaciones de entrega, los destinos o ambos.

Dentro de un selector determinado, los elementos se combinan con el operador Y. Múltiples selectores usan OR. Es decir, para que una solicitud determinada esté restringida por la política, debe aplicarse a al menos un selector. Pero dentro de ese selector, la solicitud debe coincidir 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 está restringido en la canalización de entrega o destino seleccionado. 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 se realiza en destinos seleccionados que usan las canalizaciones de entrega seleccionadas. Esta regla usa un período que define cuándo no se puede crear un lanzamiento para la canalización de entrega y destino 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.

Las siguientes acciones se pueden restringir mientras la regla esté vigente:

  • ADVANCE

    Las fases de lanzamiento no pueden ser avanzadas.

  • APPROVE

    No se puede aprobar la promoción del 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 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 la fecha y bloques de tiempo para especificar períodos recurrentes y no repetitivos durante los cuales la política de implementación está vigente.

Los siguientes son los requisitos para expresar la fecha y la hora:

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

  • Al expresar la hora del día, el inicio del día es 00:00 y el final de la día es 24:00.

  • En oneTimeWindows, las fechas deben incluir la hora. Durante weeklyWindows, puedes omitir la hora del día. Pero 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 esto:

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

    Por ejemplo: timeZone: America/New_York.

Ventanas de tiempo no repetidas

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 repetitivas se configuran con una estrofa oneTimeWindows.

Ventanas de tiempo de repetición

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

Las ventanas de tiempo de repetición 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 quieres detener los lanzamientos en algún momento del año, puedes configura un bloque oneTimeWindows para hacerlo. Si las fechas son predecibles, desde año a año, aún debes 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"

En este YAML, se describe un período desde el 22 de diciembre de 2024 a las 5 p.m. hasta enero de 2025 a las 9 a.m.

Congelación de fin de semana repetida

En el siguiente YAML, se 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 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"

Actualizar 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 localmente y editarlo ahí.

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

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

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 bloque restrictRollouts durante todo el mes del de diciembre y el 14 de diciembre, actualizas la política para que la restricción finalice del 15 de diciembre, se dejan de bloquear los lanzamientos 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 las clouddeploy.deployPolicies.override.

Puedes anular la política desde la CLI de gcloud 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 bloqueando 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 sea evitado por esa política. 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.

    Abrir la página Implementa políticas

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

  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.

    Ahora se borrará la política, y podrás realizar cualquiera de las acciones que se la política restringida.

gcloud CLI

Para borrar una política de implementación con la CLI de gcloud, 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, tal 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, el registro de la plataforma se crean entradas para las siguientes acciones:

  • Evaluación de política

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

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

¿Qué sigue?