Restringir o comportamento de implantação usando políticas

Este documento descreve como usar políticas de implantação para restringir ações manuais ou automatizadas do pipeline de entrega.

Uma política de implantação é um recurso do Cloud Deploy que pode ser usado para restringir ações manuais ou automáticas contra um pipeline de entrega ou destino selecionado (ou todos os pipelines ou destinos).

Qual comportamento pode ser restrito?

É possível criar políticas de implantação para restringir ou impedir o Cloud Deploy de executar certas ações em lançamentos. Por exemplo, uma política pode impedir criação de lançamento para um determinado pipeline de entrega durante um período especificado. Você pode usar isso, por exemplo, para restrições sazonais.

Como as políticas são avaliadas e aplicadas

Para qualquer ação manual ou automatizada, o Cloud Deploy faz o seguinte:

  1. Verifica as permissões do Identity and Access Management.

    Se o usuário ou a conta de serviço não tiver IAM adequado permissões, a ação não é realizada e não há necessidade de avaliar políticas.

  2. Verifica se há uma política aplicável ao destino ou à exibição pipeline e, se houver, a política é avaliada.

    • O Cloud Deploy avalia a ação que está sendo realizada para saber se essa regra é aplicável.

      Ou seja, o tipo de ação e o invocador correspondem à política?

    • O Cloud Deploy verifica os intervalos de data e hora definidos para a política e verifica se ela está em vigor no momento da solicitação.

    • Se a política estiver em vigor e a regra se aplicar ao pipeline de envio ou ao destino e à ação, essa regra será aplicada e a ação será bloqueada.

Requisitos e limitações

  • Cada política precisa ter pelo menos um seletor.

  • Cada política precisa ter pelo menos uma regra.

    Todos os IDs de regras precisam ser exclusivos em uma política de implantação.

  • Cada regra precisa ter pelo menos um timeWindows e, dentro dele, um oneTimeWindows ou um weeklyWindows.

    Consulte Datas e horas para mais detalhes sobre o uso de blocos de tempo.

  • Não é possível ter mais de 1.000 políticas de implantação por projeto/local.

Permissões e papéis do Identity and Access Management necessários

Além das permissões necessárias para executar qualquer pipeline de entrega do Cloud Deploy e realizar as tarefas que seriam restritas pela política, há várias permissões necessárias para realizar determinadas operações no recurso da política:

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

Essas permissões estão incluídas no papel roles/clouddeploy.policyAdmin. Além disso, o papel roles/clouddeploy.policyOverrider inclui o .override.

Criar uma política de implantação

A criação de um recurso de política de implantação consiste nas seguintes etapas:

  1. Crie um arquivo YAML com a configuração da política de implantação.

    A configuração inclui um cabeçalho, que identifica o recurso como uma política de implantação. O name é obrigatório.

     apiVersion: deploy.cloud.google.com/v1
     kind: DeployPolicy
     metadata:
       name: 
     description: 
    
  2. Adiciona uma referência aos pipelines e destinos de entrega aos quais a política se aplicar (a selectors).

    Consulte Implantar seletores de política e as Referência do esquema de configuração para mais informações sobre seletores de política e como configurá-los.

  3. Adicione uma ou mais políticas rules.

    Cada regra descreve uma restrição e as circunstâncias em que ela é aplicada. Consulte Implantar regras de política e as Referência do esquema de configuração para mais informações sobre regras de política e como configurá-las.

  4. Aplique esse arquivo usando gcloud deploy apply --filename= para criar o recurso.

Os pipelines ou destinos de entrega referenciados agora são restritos de acordo com as regras no recurso de política de implantação.

Implantar seletores de política

Seletores, definidos na política de implantação configurações, determinam quais pipelines e destinos de entrega são afetados por uma regra.

Um seletor é definido em uma estrofe selectors na política de implantação. do Terraform, como uma propriedade de nível superior:

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

Neste YAML de configuração, deliveryPipeline.id recebe o nome do pipeline de entrega e target.id recebe o nome do destino (em ambos os casos, metadata.name).

É possível usar id: * para selecionar todos os pipelines de entrega ou todos os destinos. Você pode use rótulos para corresponder a pipelines de entrega, destinos ou ambos.

Em um determinado seletor, os itens são combinados com AND. Múltiplos seletores são OR. Ou seja, para que uma solicitação seja restrita pela política, ela precisa ser aplicada a pelo menos um seletor. Mas, dentro desse seletor, a solicitação deve corresponder a todas itens.

Implantar regras de políticas

Cada política de implantação inclui uma ou mais regras, que definem quais ações está restrita no pipeline de entrega ou no destino selecionado. A regra também define sob quais circunstâncias a regra é aplicada.

As seguintes regras estão disponíveis:

  • rolloutRestriction

A regra rolloutRestriction impede que as ações de lançamento especificadas sejam realizadas nos destinos selecionados usados pelos pipelines de envio selecionados. Essa regra usa uma janela de tempo que define quando não é possível criar um lançamento para o pipeline de entrega e o destino selecionado. Consulte Datas e horários para uma descrição de como as datas e os horários são especificados nas regras de políticas de implantação.

As seguintes ações podem ser restritas enquanto a regra estiver em vigor:

  • ADVANCE

    As fases de lançamento não podem ser avançadas.

  • APPROVE

    Não é possível aprovar a promoção de lançamento.

  • CANCEL

    Não é possível cancelar os lançamentos.

  • CREATE

    Não é possível criar lançamentos. Você pode criar uma versão se uma política está impedindo essa ação, mas a versão não vai gerar um lançamento.

  • IGNORE_JOB

    Os jobs não podem ser ignorados.

  • RETRY_JOB

    Os jobs não podem ser retentativas.

  • ROLLBACK

    Não é possível reverter as implantações.

  • TERMINATE_JOBRUN

    As execuções de jobs não podem ser encerradas

    Consulte a Referência do esquema de configuração para conferir a estrutura YAML dessa regra.

Datas e horários em uma regra rolloutRestriction

Você configura a data e blocos de tempo para especificar janelas de tempo repetidas e não repetidas durante as quais política de implantação está em vigor.

Confira a seguir os requisitos para expressar datas e horários:

  • As datas são expressas como yyyy-mm-dd.

  • Ao expressar o horário do dia, o início do dia é 00:00, e o fim do dia é 24:00.

  • No campo oneTimeWindows, as datas precisam incluir o horário. Para weeklyWindows, você pode omitir a hora do dia. Mas se você incluir startTime, deverá incluir endTime e vice-versa.

    Por exemplo, uma pausa apenas aos domingos seria assim:

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

    Você também pode fazer o seguinte:

    - daysOfWeek: [SUNDAY]
    

    Mas não isto:

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
    
  • É necessário incluir um fuso horário na estrofe timeWindows.

    Por exemplo, timeZone: America/New_York.

Janelas de tempo sem repetição

Uma janela de tempo sem repetição começa e termina em um dia e horário específicos. Você usaria isso para qualquer período em que queira restringir os lançamentos.

Janelas de tempo sem repetição são configuradas usando uma estrofe de oneTimeWindows.

Janelas de tempo recorrentes

Uma janela de tempo recorrente descreve um bloco de tempo recorrente em que você quer restringir os lançamentos. Por exemplo, você pode usar isso para restringir as implantações nos fins de semana.

As janelas de tempo de repetição são configuradas usando uma estrofe weeklyWindows.

Exemplos

Esta seção contém alguns exemplos de como usar datas e horas para configurar quando um política de implantação for aplicada.

Pausa anual

Se houver uma época do ano em que você deseja congelar lançamentos, é possível configure um bloco oneTimeWindows para fazer isso. Se as datas forem previsíveis, a partir de ano para ano, ainda será necessário usar vários blocos de oneTimeWindow.

O YAML a seguir mostra uma janela de tempo única (não recorrente) para aplicar uma política de implantação durante um período de congelamento anual:

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

Este YAML descreve uma janela de tempo de 22 de dezembro de 2024, às 17h, até 2 de janeiro de 2025, às 9h.

Congelamento recorrente do fim de semana

O YAML a seguir mostra uma janela de tempo recorrente para aplicar uma política de implantação que restringe os lançamentos nos fins de semana, de sexta-feira às 17h até segunda-feira de manhã às 9h:

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"

Atualizar uma política de implantação

A atualização de uma política de implantação consiste nas seguintes etapas:

  1. Edite o YAML de configuração da política.

    Se você criou a política usando o console do Google Cloud, é possível a configuração do YAML selecionando a guia YAML na política de implantação página de detalhes. Em seguida, você pode copiar esse texto em um arquivo local e editá-lo nele.

  2. Aplique esse arquivo usando gcloud deploy apply --filename=.

    Isso atualiza o recurso de política de implantação com a nova configuração.

Como as políticas de implantação são avaliadas quando a ação restrita é tentada, todas as ações contra todos os recursos do Cloud Deploy estão sujeitas à política atualizada. Ou seja, não há remanescentes das restrições anteriores. Por exemplo, se você tiver um bloqueio restrictRollouts para todo o mês de dezembro e, em 14 de dezembro, atualizar a política para que a restrição termine em 15 de dezembro, os lançamentos não serão mais bloqueados após essa data.

Substituir uma política de implantação

Você pode substituir uma política de implantação, se necessário. Por exemplo, se houver um problema com uma implantação em produção e você precisar revertê-la, mas houver uma política de implantação impedindo qualquer implantação, você poderá substituir essa política para reverter a implantação incorreta.

Para substituir uma política de implantação, você precisa ter a permissão clouddeploy.deployPolicies.override do IAM.

É possível substituir a política na CLI gcloud ou usando o console do Google Cloud:

Console

  1. No console do Google Cloud, tente realizar uma ação bloqueada por um política.

    Uma caixa de diálogo é exibida indicando que a ação está bloqueada por uma política de implantação. Essa caixa de diálogo inclui um link para a política específica que o bloqueio dessa ação.

  2. No campo de texto fornecido, digite o nome da política e clique em Tentar substituir políticas.

    Se você tiver permissão para substituir a política, o Cloud Deploy vai executar a ação.

CLI da gcloud

Para substituir uma política de implantação usando a CLI gcloud, adicione o --override-deploy-policies ao comando para qualquer ação que seria impedida por essa política. Por exemplo, o comando a seguir promove uma lançamento, substituindo uma política de implantação específica que poderia impedir a promoção:

 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

Excluir uma política de implantação

Para excluir uma política de implantação:

Console

  1. No console do Google Cloud, acesse a página Deploy policies do Cloud Deploy.

    Abrir a página "Implantar políticas"

    A página inclui uma lista das políticas de implantação disponíveis no seu projeto atual, se houver.

  2. Selecione as Ações. da política que deseja excluir e clique no botão Excluir política de implantação.

  3. Digite o nome da política de implantação para confirmar a exclusão e clique em Confirmar.

    A política foi excluída, e agora você pode realizar qualquer uma das ações que ela restringia.

CLI da gcloud

Para excluir uma política de implantação usando a CLI gcloud, execute o seguinte comando:

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

Substitua:

  • [POLICY_NAME]

    O nome da política, conforme definido no arquivo de configuração de política.

  • [PROJECT]

    O ID do projeto do Google Cloud em que você criou o política de implantação.

  • [REGION]

    A região em que você criou a política de implantação.

Depois de excluir o recurso da política de implantação, os pipelines de entrega e os destinos afetados não estão mais sujeitos à política e não serão restritos, a menos que sejam afetados por outra política de implantação.

Geração de registros da política de implantação

Quando uma política de implantação é avaliada, as entradas do registro da plataforma são criadas para as seguintes ações:

  • Avaliação da política

    Os registros de plataforma são gravados quando uma solicitação é avaliada e viola a política. Um registro também é gravado quando a política é violada por uma solicitação, mas ela é permitido porque a política está suspensa ou foi substituída. Nenhum registro é escritos quando a solicitação é concedida porque a política não foi violada.

  • Falha na notificação do Pub/Sub ao mudar um recurso de política de implantação.

A seguir