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:
- Instale e inicialize a Google Cloud CLI, que fornece os
comandos
gcloud
,kubectl
enomos
usados nestas instruções. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executandogcloud components update
. Se você usa o Cloud Shell, a Google Cloud CLI já vem pré-instalada. - 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.
Ative a API Policy Controller.
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.
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.
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
.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 Google Cloud CLI, pode instalar e gerenciar o Policy Controller diretamente (recomendado) ou por meio do objeto ConfigManagement.
Console
Para configurar o Policy Controller no console do Google Cloud, siga estas etapas:
- No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.
Selecione add Instalar o Controlador de políticas.
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:
Mantenha a opção Instalar na sua frota selecionada.
Se você não tiver uma frota no projeto, crie uma na próxima etapa.
Se você ainda não tem uma frota, escolha um nome para ela.
Selecione Ativar o Policy Controller.
Para instalar o Policy Controller em clusters individuais
Selecione Instalar em clusters individuais.
Na tabela Clusters disponíveis, selecione os clusters em que você quer instalar o Policy Controller.
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 check_circle. 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
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 deenabled
comotrue
. É 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 usarPROJECT_ID
: ID do projetoCONFIG_YAML_PATH
: o caminho para o arquivoapply-spec.yaml
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 usarCONFIG_YAML
: adicione o caminho para seu arquivoapply-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:
- No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.
- 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 check_circle.
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:
- No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.
- 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 check_circle.
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
No console do Google Cloud, acesse a página Gerenciador de recursos.
No painel Política, clique em Configurar.
Revisar as configurações da frota Todos os novos clusters registrados na frota vão herdar essas configurações.
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:
- Na seção Adicionar/editar pacotes de políticas, inclua ou exclua um pacote clicando no botão de alternância relevante.
- Na seção Editar configuração do Policy Controller, faça o
seguinte:
- 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.
- Na caixa Intervalo de auditoria, insira o período em segundos entre duas auditorias consecutivas.
- Na caixa Namespaces isentos, insira uma lista de namespaces. O Policy Controller ignora objetos nesses namespaces.
- 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.
- Na lista Versão, selecione a versão do Policy Controller que você quer usar.
- Clique em Salvar.
Clique em Configurar.
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
.Opcional: sincronize os clusters atuais com as configurações padrão:
- Na lista Clusters na frota, selecione os clusters que você quer sincronizar.
- 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
Crie um arquivo chamado
fleet-default.yaml
que contenha as configurações padrão do Policy Controller. O campoinstallSpec
é 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 ...
Aplique a configuração padrão à sua frota:
gcloud container fleet policycontroller enable \ --fleet-default-member-config=fleet-default.yaml
Para verificar se a configuração foi aplicada, execute o seguinte comando:
gcloud container fleet policycontroller describe
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 namespacegatekeeper-system
, defina apenas o recursoConfig
na fonte da verdade. Ogatekeeper-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
- No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.
- Na guia Configurações, ao lado do cluster cuja versão você quer atualizar, selecione edit Editar configuração.
- Expanda o menu Editar configuração do Policy Controller.
- Na lista suspensa Versão, selecione a versão em que você quer fazer upgrade.
- Clique em Salvar.
gcloud
Execute este comando:
gcloud container fleet policycontroller update \
--version=VERSION \
--membership=MEMBERSHIP_NAME
Substitua:
VERSION
: a versão para a qual você quer fazer upgradeMEMBERSHIP_NAME
: o nome da assinatura que você escolheu quando registrou o cluster. Para encontrar o nome da assinatura, executegcloud 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:
- No console do Google Cloud, acesse a página Política do GKE Enterprise na seção Gerenciamento de postura.
- Na guia Configurações, na tabela de clusters, selecione Editar edit na coluna Editar configuração.
- No painel do cluster, role para baixo e expanda o menu Sobre o Policy Controller.
- Selecione Desinstalar o Policy Controller.
- 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 do_not_disturb_on.
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:
Edite a configuração do ConfigManagement Operator no arquivo
apply-spec.yaml
e definapolicyController.enabled
comofalse
.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:
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 secretgit-creds
, e para as versões do Controlador de Políticas a partir da versão 1.9.0, o parâmetro de implantaçãoconfig-management-operator
e o podconfig-management-operator
. O ConfigManagement Operator não funciona sem o namespaceconfig-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.
Se você precisar manter o secret
git-creds
, faça isso agora:kubectl -n config-management-system get secret git-creds -o yaml
Exclua o namespace
config-management-system
:kubectl delete ns config-management-system
Exclua o namespace
config-management-monitoring
:kubectl delete ns config-management-monitoring
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
- Saiba mais sobre o Policy Controller.
- Saiba mais sobre os pacotes do Policy Controller.
- Saiba como criar uma restrição.
- Resolver problemas do Policy Controller.