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 envio.

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

Qual comportamento pode ser restrito?

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

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 a conta de usuário ou de serviço não tiver as permissões adequadas do IAM, a ação não será realizada e não será necessário avaliar as políticas de implantação.

  2. Verifica se há uma política aplicável para o pipeline de destino ou de entrega. Se houver, a política será 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.timeWindows

    Consulte Datas e horários 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.

Papéis e permissões 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 a permissã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. Adicione uma referência aos pipelines de entrega e destinos a que a política se aplica (selectors).

    Consulte Implantar seletores de política e a 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 a 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

Os seletores, definidos nas configurações da política de implantação, determinam quais pipelines de envio e destinos são afetados por uma determinada regra.

Um seletor é definido em uma estrofe selectors na configuração da política de implantação 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. Também é possível usar rótulos para corresponder a pipelines de entrega ou destinos ou ambos.

Em um determinado seletor, os itens são combinados com AND. Vários seletores são combinados com a operação OR. Ou seja, para que uma solicitação seja restrita pela política, ela precisa ser aplicada a pelo menos um seletor. No entanto, dentro desse seletor, a solicitação precisa corresponder a todos os itens.

Implantar regras de política

Cada política de implantação inclui uma ou mais regras, que definem qual ação é restrita no pipeline de entrega ou no destino selecionado. A regra também define em quais circunstâncias ela é 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. É possível criar uma versão se uma política estiver impedindo essa ação, mas essa 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 refeitos.

  • 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 blocos de data e hora para especificar janelas de tempo recorrentes e não recorrentes em que a 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.

  • Para oneTimeWindows, as datas precisam incluir a hora. Para weeklyWindows, você pode omitir o horário. No entanto, se você incluir startTime, também precisará 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 este:

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

    Por exemplo, timeZone: America/New_York.

Janelas de tempo não recorrentes

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

As janelas de tempo não recorrentes são configuradas usando uma estrofe 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 recorrentes são configuradas usando uma estrofe weeklyWindows.

Exemplos

Esta seção contém alguns exemplos de uso de datas e horários para configurar quando uma política de implantação é aplicada.

Pausa anual

Se houver um período do ano em que você quiser congelar os lançamentos, é possível configurar um bloco oneTimeWindows para fazer isso. Se as datas forem previsíveis, de ano para ano, ainda será necessário usar vários blocos oneTimeWindow.

O YAML a seguir mostra uma janela de tempo única (não repetida) para aplicar uma política de implantação para um 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 de 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 acessar a configuração YAML selecionando a guia YAML na página Detalhes da política de implantação. 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

É possível 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 lançamento, você poderá substituir essa política para reverter o lançamento incorreto.

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 uma 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 está bloqueando essa 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 versão, substituindo uma política de implantação específica que impediria 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 "Implementar políticas"

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

  2. Selecione o botão Ações da política que você quer excluir e clique em Excluir política de implantação.

  3. Confirme a exclusão digitando o nome da política de implantaçã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 da política.

  • [PROJECT]

    O ID do projeto do Google Cloud em que você criou a 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 estarã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 da 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 a solicitação é permitida porque a política está suspensa ou foi substituída. Nenhum registro é gravado quando a solicitação é concedida porque a política não é violada.

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

A seguir