Instalar o Policy Controller

Esta página mostra como instalar o Policy Controller. O Policy Controller verifica, audita e reforça a conformidade de seus clusters com políticas relacionadas a segurança, regulamentos ou regras de negócios.

Esta página é destinada a administradores e operadores de TI que querem garantir que todos os recursos executados na plataforma de nuvem atendam a requisitos de conformidade fornecendo e mantendo automação para auditar ou aplicar. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Google Cloud, consulte Tarefas e funções de usuário comuns do GKE Enterprise.

O Policy Controller está disponível se você usa o Google Kubernetes Engine (GKE) Enterprise. Para saber mais, consulte Preços da edição Enterprise do Google Kubernetes Engine (GKE).

Antes de começar

Antes de começar, veja se você realizou as seguintes tarefas:

  1. Instale e inicialize a Google Cloud CLI, que fornece os comandos gcloud, kubectl e nomos usados nestas instruções. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update. Se você usa o Cloud Shell, a Google Cloud CLI já vem pré-instalada.
  2. Verifique se o agente de política de código aberto do Gatekeeper não está instalado no cluster. Se estiver, desinstale o Gatekeeper antes de instalar o Policy Controller.
  3. Ative a API GKE Enterprise.

    Ativar a API GKE Enterprise

  4. Ative a API Policy Controller.

    Ativar a API Policy Controller

  5. Crie ou verifique se você tem acesso a um cluster que executa uma versão 1.14.x ou posterior do Kubernetes. O Policy Controller pode parecer que está sendo executado nas versões do Kubernetes anteriores à 1.14.x, mas o produto não se comporta corretamente.

  6. Conceda os papéis do IAM ao usuário que registra o cluster.

  7. Se você planeja usar a Google Cloud CLI para configurar o Policy Controller, registre seu cluster em uma frota agora. Se você planeja usar o Console do Google Cloud, registre seus clusters ao instalar o Policy Controller.

  8. Se você estiver usando clusters anexados ao GKE, verifique se o cluster AKS não tem o complemento de política do Azure e evite namespaces de rotulação com a chave control-plane.

  9. Se você estiver usando o Google Distributed Cloud no VMware ou em bare metal, verifique se está instalando o Policy Controller em um cluster de usuário. O Policy Controller não pode ser instalado em um cluster de administrador.

Instalar o Policy Controller

A partir da versão 1.16.0, se você estiver usando a CLI do Google Cloud, pode instalar e gerenciar o Controlador de Políticas diretamente (recomendado). Não é mais recomendado configurar o Controlador de Políticas usando o objeto ConfigManagement.

Console

Para configurar o Policy Controller no console do Google Cloud, siga estas etapas:

  1. No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.

    Acessar a política

  2. Selecione Instalar o Controlador de políticas.

  3. No painel Instalação do Policy Controller, selecione uma das seguintes opções de instalação:

    • Para instalar o Policy Controller em todos os clusters de uma frota:

      1. Mantenha a opção Instalar na sua frota selecionada.

        Se você não tiver uma frota no projeto, crie uma na próxima etapa.

      2. Se você ainda não tem uma frota, escolha um nome para ela.

      3. Selecione Ativar o Policy Controller.

    • Para instalar o Policy Controller em clusters individuais

      1. Selecione Instalar em clusters individuais.

      2. Na tabela Clusters disponíveis, selecione os clusters em que você quer instalar o Policy Controller.

      3. Selecione Ativar o Policy Controller.

Você será redirecionado para a guia Configurações do Policy Controller. Quando o Policy Controller está instalado e configurado nos clusters, as colunas de status mostram Instalado . Isso pode levar alguns minutos.

Policy Controller da gcloud

Ative o Policy Controller executando o seguinte comando:

gcloud container fleet policycontroller enable \
    --memberships=MEMBERSHIP_NAME

Você pode definir outros campos para configurar o Policy Controller. Por exemplo, diga ao Policy Controller para isentar alguns namespaces da aplicação. Para ver uma lista completa de campos que podem ser configurados, consulte a documentação da Google Cloud CLI do Policy Controller ou execute gcloud container fleet policycontroller enable --help.

gcloud ConfigManagement

  1. Prepare a configuração criando um novo manifesto apply-spec.yaml ou usando um existente. Se você escolher a última opção, é possível configurar um cluster com as mesmas configurações usadas por outro.

    Criar novo manifesto

    Para definir o Config Sync com novas configurações para o cluster, crie um arquivo chamado apply-spec.yaml e copie o seguinte arquivo YAML nele:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      policyController:
        # Set to true to install and enable Policy Controller
        enabled: true
        # Uncomment to prevent the template library from being installed
        # templateLibraryInstalled: false
        # Uncomment to enable support for referential constraints
        # referentialRulesEnabled: true
        # Uncomment to disable audit, adjust value to set audit interval
        # auditIntervalSeconds: 0
        # Uncomment to log all denies and dryrun failures
        # logDeniesEnabled: true
        # Uncomment to enable mutation
        # mutationEnabled: true
        # Uncomment to exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
        # Uncomment to change the monitoring backends
        # monitoring:
        #     backends:
        #     - cloudmonitoring
        #     - prometheus
      # ...other fields...
    

    Adicione um campo spec.policyController e defina o valor de enabled como true. É possível ativar outros recursos do Policy Controller. Entretanto, o suporte para restrições referenciais está desativado por padrão. Antes de ativá-lo, familiarize-se com as advertências sobre consistência posterior.

    Usar manifesto existente

    Para definir o cluster com as mesmas configurações usadas por outro cluster, recupere as configurações de um cluster registrado:

    gcloud alpha container fleet config-management fetch-for-apply \
         --membership=MEMBERSHIP_NAME \
         --project=PROJECT_ID \
         > CONFIG_YAML_PATH
    

    Substitua:

    • MEMBERSHIP_NAME: o nome da assinatura do cluster registrado que contém as configurações do Policy Controller que você quer usar
    • PROJECT_ID: ID do projeto
    • CONFIG_YAML_PATH: o caminho para o arquivo apply-spec.yaml
  2. Aplique o arquivo apply-spec.yaml:

    gcloud beta container fleet config-management apply \
        --membership=MEMBERSHIP_NAME \
        --config=CONFIG_YAML \
        --project=PROJECT_ID
    

    Substitua:

    • MEMBERSHIP_NAME: o nome da assinatura do cluster registrado que contém as configurações do Policy Controller que você quer usar
    • CONFIG_YAML: adicione o caminho para seu arquivo apply-spec.yaml.
    • PROJECT_ID: adicione o ID do projeto.

O pod é criado e o Policy Controller começa a verificar e aplicar as restrições.

Verifique a instalação do Policy Controller

Depois de instalar o Policy Controller, você pode verificar se ele foi concluído com sucesso.

Console

Siga estas etapas:

  1. No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.

    Acessar a política

  2. Na guia Configurações, na tabela de clusters, verifique a coluna Status do controlador de política. Uma instalação bem-sucedida tem um status de Instalada .

Policy Controller da gcloud

Execute este comando:

gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME

Uma instalação bem-sucedida mostra membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE.

gcloud ConfigManagement

Execute este comando:

gcloud beta container fleet config-management status \
    --project=PROJECT_ID

Substitua PROJECT_ID pelo ID do projeto.

O resultado será semelhante a:

Name          Status  Last_Synced_Token  Sync_Branch  Last_Synced_Time      Policy_Controller
CLUSTER_NAME  SYNCED  a687c2c            1.0.0        2021-02-17T00:15:55Z  INSTALLED

Uma instalação bem-sucedida terá o status INSTALLED na coluna "Controlador de política".

Verificar a instalação da biblioteca de modelos de restrição

Quando você instala o Policy Controller, a biblioteca de modelos de restrição é instalada por padrão. Pode levar alguns minutos até que a instalação desse comando seja concluída. Verifique se a biblioteca de modelos foi concluída.

Console

Siga estas etapas:

  1. No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.

    Acessar a política

  2. Na guia Configurações, na tabela de clusters, selecione o número listado na coluna Pacotes instalados. No painel Status do conteúdo da política, uma instalação bem-sucedida da biblioteca de modelos tem o status Instalado .

gcloud

Execute este comando:

kubectl get constrainttemplates

O resultado será semelhante a:

NAME                                      AGE
k8sallowedrepos                           84s
k8scontainerlimits                        84s
k8spspallowprivilegeescalationcontainer   84s
...[OUTPUT TRUNCATED]...

Quando um modelo de restrição individual é instalado corretamente, o campo status.created é true.

Configurar padrões no nível da frota

Se você tiver ativado a edição Enterprise do Google Kubernetes Engine (GKE), vai poder ativar e configurar o Policy Controller como um padrão da frota para seus clusters. Isso significa que cada novo cluster do GKE no Google Cloud registrado durante a criação do cluster terá o Policy Controller ativado no cluster com as configurações especificadas. Saiba mais sobre a configuração padrão da frota em Gerenciar recursos no nível da frota.

Para configurar os padrões da frota para o Policy Controller, siga estas etapas:

Console

  1. No console do Google Cloud, acesse a página Gerenciador de recursos.

    Acessar o gerenciador de recursos

  2. No painel Política, clique em Configurar.

  3. Revisar as configurações da frota Todos os novos clusters registrados na frota vão herdar essas configurações.

  4. Opcional: para mudar as configurações padrão, clique em Personalizar configurações da frota. Na caixa de diálogo exibida, execute as ações a seguir:

    1. Na seção Adicionar/editar pacotes de políticas, inclua ou exclua um pacote clicando no botão de alternância relevante.
    2. Na seção Editar configuração do Policy Controller, faça o seguinte:
      1. Para ativar o Webhook de mutação, marque a caixa de seleção Ativar webhook de mutação. Esse recurso não é compatível com clusters do Autopilot.
      2. Na caixa Intervalo de auditoria, insira o período em segundos entre duas auditorias consecutivas.
      3. Na caixa Namespaces isentos, insira uma lista de namespaces. O Policy Controller ignora objetos nesses namespaces.
      4. Para ativar restrições referenciais, marque a caixa de seleção Ativar modelos de restrição que se referem a objetos diferentes do objeto que está sendo avaliado.
      5. Na lista Versão, selecione a versão do Policy Controller que você quer usar.
    3. Clique em Salvar.
  5. Clique em Configurar.

  6. Na caixa de diálogo, clique em Confirmar. Se você ainda não tiver ativado o Policy Controller, clique em Confirmar para ativar a API anthospolicycontroller.googleapis.com.

  7. Opcional: sincronize os clusters atuais com as configurações padrão:

    1. Na lista Clusters na frota, selecione os clusters que você quer sincronizar.
    2. Clique em Sincronizar com as configurações da frota e em Confirmar na caixa de diálogo de confirmação mostrada. Esta operação leva alguns minutos para ser concluída.

gcloud

  1. Crie um arquivo chamado fleet-default.yaml que contenha as configurações padrão do Policy Controller. O campo installSpec é necessário para ativar padrões no nível da frota. Este exemplo mostra as opções que podem ser configuradas:

    # cat fleet-default.yaml
    
     policyControllerHubConfig:
      installSpec: INSTALL_SPEC_ENABLED 
      # Uncomment to set default deployment-level configurations.
      # deploymentConfigs:
      #   admission:
      #     containerResources:
      #       limits:
      #        cpu: 1000m
      #         memory: 8Gi
      #       requests:
      #         cpu: 500m
      #         memory: 4Gi
      # Uncomment to set policy bundles that you want to install by default.
      # policyContent:
      #   bundles:
      #     cis-k8s-v1.5.1:
      #       exemptedNamespaces:
      #       - "namespace-name"
      # Uncomment to exempt namespaces from admission.
      # exemptableNamespaces:
      # - "namespace-name"
      # Uncomment to enable support for referential constraints
      # referentialRulesEnabled: true
      # Uncomment to disable audit, adjust value to set audit interval
      # auditIntervalSeconds: 0
      # Uncomment to log all denies and dryrun failures
      # logDeniesEnabled: true
      # Uncomment to enable mutation
      # mutationEnabled: true
      # Uncomment to adjust the value to set the constraint violation limit
      # constraintViolationLimit: 20
      # ... other fields ...
    
  2. Aplique a configuração padrão à sua frota:

    gcloud container fleet policycontroller enable \
      --fleet-default-member-config=fleet-default.yaml
    
  3. Para verificar se a configuração foi aplicada, execute o seguinte comando:

    gcloud container fleet policycontroller describe
    
  4. Para remover a configuração padrão no nível da frota, execute o seguinte comando:

    gcloud container fleet policycontroller enable \
      --no-fleet-default-member-config
    

Interações do Policy Controller com o Config Sync

Se você estiver usando o Policy Controller com o Config Sync, vai precisar estar ciente das seguintes interações com os recursos armazenados na sua fonte de verdade, como um repositório Git, que são sincronizados pelo Config Sync:

  • Não é possível sincronizar um modelo de restrição que também faz parte da biblioteca de modelos, a menos que a biblioteca de modelos de restrição esteja desativada.

  • Se você quiser sincronizar o recurso Config armazenado no namespace gatekeeper-system, defina apenas o recurso Config na fonte da verdade. O gatekeeper-system Namespace não pode ser definido com ele.

Gerenciar a biblioteca de modelos de restrição

Para informações sobre como desinstalar ou reinstalar modelos de restrição, as restrições associadas ou a biblioteca de modelos de restrição, consulte Criar restrições.

Como isentar namespaces da aplicação

É possível configurar o Policy Controller para ignorar objetos em um namespace. Para mais informações, consulte Excluir namespaces do Policy Controller.

Recursos "mutate"

O Policy Controller também atua como um webhook mutável. Para mais informações, consulte Recursos "mutate".

Ver a versão do Policy Controller

Para ver qual versão do Policy Controller do Gatekeeper está usando, execute o seguinte comando para ver a tag de imagem:

kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
  -o="jsonpath={.spec.template.spec.containers[0].image}"

A tag (ou hash) do Git usada para criar o Gatekeeper e o número de versão do ConfigManagement Operator são incluídos na tag de imagem da seguinte maneira:

.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER

Por exemplo, para a seguinte imagem:

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2 é o número da versão;
  • 480baac é a tag do Git;
  • 0 é o número do build.

Fazer upgrade do Policy Controller

Antes de fazer upgrade do Policy Controller, verifique as notas da versão para saber detalhes sobre o que mudou entre as versões.

Para fazer upgrade do Policy Controller, siga estas etapas:

Console

  1. No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.

    Acessar a política

  2. Na guia Configurações, ao lado do cluster cuja versão você quer atualizar, selecione Editar configuração.
  3. Expanda o menu Editar configuração do Policy Controller.
  4. Na lista suspensa Versão, selecione a versão em que você quer fazer upgrade.
  5. Clique em Salvar.

gcloud

Execute este comando:

gcloud container fleet policycontroller update \
  --version=VERSION \
  --memberships=MEMBERSHIP_NAME

Substitua:

  • VERSION: a versão para a qual você quer fazer upgrade
  • MEMBERSHIP_NAME: o nome da assinatura que você escolheu quando registrou o cluster. Para encontrar o nome da assinatura, execute gcloud container fleet memberships list.

Desinstalar o Policy Controller

Siga estas etapas para desinstalar o Policy Controller dos clusters.

Console

Para desativar o Policy Controller nos clusters, conclua as tarefas a seguir:

  1. No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.

    Acessar a política

  2. Na guia Configurações, na tabela de clusters, selecione Editar na coluna Editar configuração.
  3. No painel do cluster, role para baixo e expanda o menu Sobre o Policy Controller.
  4. Selecione Desinstalar o Policy Controller.
  5. Confirme a desinstalação seguindo as instruções na caixa de diálogo de confirmação e selecionando Confirmar.

Quando o Policy Controller é desinstalado, as colunas de status mostram Não instalado .

Policy Controller da gcloud

Para desinstalar o Policy Controller, execute o seguinte comando:

gcloud container fleet policycontroller disable \
  --memberships=MEMBERSHIP_NAME

Substitua MEMBERSHIP_NAME pelo nome de assinatura do cluster registrado para desativar o Policy Controller. Você pode especificar várias associações separadas por uma vírgula.

gcloud ConfigManagement

Para desinstalar o Policy Controller:

  1. Edite a configuração do ConfigManagement Operator no arquivo apply-spec.yaml e defina policyController.enabled como false.

  2. Aplique as alterações no arquivo apply-spec.yaml:

     gcloud beta container fleet config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    Substitua:

    • CLUSTER_NAME: adicione o cluster registrado ao qual você quer aplicar essa configuração.
    • CONFIG_YAML: adicione o caminho para seu arquivo apply-spec.yaml.
    • PROJECT_ID: adicione o ID do projeto.

Remover o ConfigManagement Operator

Se você instalou o Policy Controller usando o objeto ConfigManagement, também é necessário remover o ConfigManagement Operator dos clusters.

Para remover o ConfigManagement Operator, execute os seguintes comandos:

  1. Exclua o objeto ConfigManagement do cluster:

    kubectl delete configmanagement --all
    

    Depois que você executar esse comando, acontecerá o seguinte:

    • Todos os ClusterRoles e ClusterRoleBindings criados no cluster pelo ConfigManagement Operator são excluídos do cluster.
    • Todas as configurações do controlador de admissão instaladas pelo ConfigManagement Operator são excluídas.
    • O conteúdo do namespace config-management-system é excluído, com exceção do secret git-creds, e para as versões do Controlador de Políticas a partir da versão 1.9.0, o parâmetro de implantação config-management-operator e o pod config-management-operator. O ConfigManagement Operator não funciona sem o namespace config-management-system. Quaisquer CustomResourceDefinitions (CRDs) criados ou modificados pelo controlador ConfigManagement Operator são removidos dos clusters onde foram criados ou modificados. O CRD necessário para executar o ConfigManagement Operator ainda existe porque, do ponto de vista do Kubernetes, eles foram adicionados pelo usuário que instalou o ConfigManagement Operator. As informações sobre como remover esses componentes estão na próxima etapa.
  2. Se você precisar manter o secret git-creds, faça isso agora:

    kubectl -n config-management-system get secret git-creds -o yaml
    
  3. Exclua o namespace config-management-system:

    kubectl delete ns config-management-system
    
  4. Exclua o namespace config-management-monitoring:

    kubectl delete ns config-management-monitoring
    
  5. Exclua a CustomResourceDefinition de ConfigManagement:

    kubectl delete crd configmanagements.configmanagement.gke.io
    

RBAC e permissões do Policy Controller

O Policy Controller inclui cargas de trabalho altamente privilegiadas. As permissões para essas cargas de trabalho são abordadas na documentação das operações do Open Policy Agent Gatekeeper.

Solicitações de recurso do Controlador de Políticas

A tabela a seguir lista os requisitos de recursos do Kubernetes para cada versão compatível do Policy Controller. As solicitações de recursos para o ConfigManagement Operator só serão aplicáveis se você tiver instalado o Policy Controller pelo objeto ConfigManagement.

Componente CPU Memória
ConfigManagement Operator 100 m 100 Mi
Policy Controller 100 m 256 Mi

A seguir