Para atender aos requisitos de conformidade do cluster e aumentar a segurança, ative o recurso de governança de políticas. Esse recurso oferece uma biblioteca de políticas de segurança para aplicações em contêineres Kubernetes, abrangendo categorias como Infra (recursos da camada de infraestrutura), Compliance (padrões de conformidade do Kubernetes), PSP (extensões das capacidades do PodSecurityPolicy) e K8s-general (políticas gerais). No console do ACK, ative ou personalize políticas de segurança para suas aplicações em contêineres e garanta que as implantações e atualizações de Pods sejam seguras e controladas.
Governança de políticas
A partir da versão 1.21 do Kubernetes, o PodSecurityPolicy (PSP) foi descontinuado. Em resposta, o ACK aprimorou seu recurso original de gerenciamento de políticas baseado em PSP. Construído sobre o controlador de admissão Gatekeeper, que utiliza políticas do Open Policy Agent (OPA), o ACK enriqueceu o recurso com funcionalidades como estatísticas de status da governança de políticas, relatórios de logs e pesquisa de logs. O ACK também inclui uma vasta biblioteca de políticas com regras adaptadas para diversos cenários de aplicações Kubernetes. Configure essas políticas por meio de uma interface intuitiva no console do ACK e simplifique o uso da governança de políticas.
Pré-requisitos
O cluster deve executar o Kubernetes 1.16 ou posterior. Para atualizar seu cluster, consulte Atualizar manualmente um cluster ACK.
-
Caso utilize um usuário RAM para gerenciar políticas, verifique se ele possui as seguintes permissões:
cs:DescribePolicies: lista as políticas na biblioteca de políticas.cs:DescribePolicyDetails: obtém os detalhes de um modelo de política.cs:DescribePolicyGovernanceInCluster: obtém os detalhes da governança de políticas de um cluster.cs:DescribePolicyInstances: lista as instâncias de política implantadas em um cluster.cs:DescribePolicyInstancesStatus: obtém o status de implantação das instâncias de política para diferentes tipos de política em um cluster.cs:DeployPolicyInstance: implanta uma instância de política em um cluster especificado.cs:DeletePolicyInstance: exclui uma instância de política em um cluster especificado.cs:ModifyPolicyInstance: modifica uma instância de política em um cluster especificado.
Para mais informações sobre como criar uma política RAM personalizada, consulte Conceder permissões de acesso a clusters e recursos de nuvem usando o RAM.
Componentes de governança de políticas
O ACK oferece dois tipos de componentes de governança de políticas: uma versão gerenciada e uma não gerenciada. Apenas um tipo pode ser ativado por vez em um cluster. A tabela a seguir compara as duas versões.
|
Item |
Versão gerenciada |
Versão não gerenciada |
|
Modo de implantação |
Implantação no plano de controle: o ACK implanta e gerencia totalmente os componentes no plano de controle do cluster. |
Implantação no plano de dados: os componentes são implantados como uma carga de trabalho no cluster e instalados por padrão no namespace kube-system, consumindo recursos de Pod nos nós de trabalho. |
|
Clusters aplicáveis |
Clusters Auto Mode v1.30 ou posterior |
Clusters gerenciados ACK e Clusters dedicados ACK v1.16 ou posterior |
|
Configuração de parâmetros de inicialização |
O sistema configura os parâmetros de inicialização do componente, que não podem ser personalizados. |
É possível personalizar os parâmetros de inicialização dos componentes. |
|
Instalação de componentes principais |
No console do ACK, na página Add-ons, o cartão do componente da versão gerenciada é marcado com um ícone Managed |
|
|
Coleta de logs de políticas |
Coleta logs usando o recurso Coletar logs de componentes do plano de controle em um cluster gerenciado ACK e os envia para um projeto do Log Service especificado. |
Instala um componente de coleta de logs no cluster para coletar e enviar logs para um projeto do Log Service especificado. |
|
Biblioteca de políticas |
Todas as políticas em Políticas de segurança predefinidas para ACK |
|
Observações
Este recurso aplica-se apenas a nós Linux.
Não há suporte para políticas personalizadas. Todas as regras devem vir da biblioteca de políticas integrada do ACK.
Etapa 1: Instalar ou atualizar a governança de políticas
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página Policy, siga as instruções na tela para instalar ou atualizar os componentes.
Ao ativar o recurso de governança de políticas, instale os seguintes componentes. Eles são gratuitos, mas consomem recursos de Pod.
-
gatekeeper: controlador de admissão de políticas do Kubernetes baseado no mecanismo de políticas OPA. Auxilia no gerenciamento e na aplicação de políticas OPA no cluster e implementa recursos como gerenciamento de rótulos de namespace.
NotaUse o componente gatekeeper fornecido pelo ACK. Se você instalou um componente gatekeeper de outra source, desinstale-o e reinstale a versão fornecida pelo ACK. Para mais informações sobre as notas de versão do componente gatekeeper, consulte gatekeeper.
Componente de coleta de logs: coleta e recupera eventos de solicitações negadas ou sinalizadas por restrições de política.
policy-template-controller: controlador Kubernetes desenvolvido com base em modelos de política da Alibaba Cloud. Facilita o gerenciamento das instâncias de política implantadas a partir de diferentes modelos e do status geral de governança do cluster.
-
Etapa 2: Usar a governança de políticas
Ponto de entrada
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Policy, siga as instruções na tela para instalar ou atualizar componentes, se solicitado, e execute as operações conforme necessário.
Visualize status de aplicação de políticas
Clique na aba Overview para visualizar o status atual da governança de políticas do seu cluster.
A seção de visão geral de políticas exibe o número total de políticas de proteção de alto e médio risco, a quantidade de políticas ativadas e uma lista de políticas recomendadas para ativação.
Estatísticas de solicitações negadas e alertas nos últimos 7 dias.
Registros de aplicação de políticas dos últimos 7 dias. Por padrão, a tabela mostra os 100 logs mais recentes de solicitações negadas ou alertas desse período. Para visualizar mais logs de auditoria, clique no ícone
ao lado de Actions within Last 7 Days e clique no link do Log Service na janela pop-up para ver todos os logs no Logstore especificado do console do Log Service. A tabela Policy Enforcement Records for Last 7 Days, na parte inferior da página, mostra Enforcement Time, Policy Type, Policy Name, Policy Description, Risk Level, Action e Details para cada política. Utilize a caixa de pesquisa e os botões de filtro para localizar registros específicos.
Crie e gerencie instâncias de política
Clique na aba My Policies e, em seguida, clique em Create Policy Instance. Na caixa de diálogo Create Policy Instance, configure os parâmetros.
|
Parâmetro |
Descrição |
|
Policy Type |
Selecione um tipo de política. Valores válidos:
Para mais informações, consulte Políticas de segurança predefinidas para ACK. |
|
Policy Name |
Com base no tipo de política selecionado, escolha o nome do modelo de política que deseja implantar na lista suspensa. |
|
Action |
|
|
Scope |
Selecione os namespaces no cluster aos quais a instância de política se aplica. |
|
Parameters |
|
Visualize políticas e instâncias
Clique na aba My Policies para visualizar todas as políticas implantáveis no cluster.
-
Filtre as políticas exibidas no canto superior direito da lista. As políticas ativadas aparecem primeiro. A coluna Instances mostra o número de instâncias implantadas para a política correspondente no cluster.
Se o valor na coluna Instances estiver vazio, a política ainda não foi implantada no cluster. Clique em Enabled na coluna Actions para configurar parâmetros e implantar a instância de política.
-
Clique em Edit na coluna Actions para modificar a configuração de uma instância de política.
Se uma política tiver várias instâncias, clique em View Instances na coluna Actions e, em seguida, clique em Edit na instância desejada para modificá-la.
Clique em Delete na coluna Actions para excluir todas as instâncias da política implantadas no cluster.
Para mais informações sobre descrições de políticas e exemplos de modelos, consulte Políticas de segurança predefinidas para ACK.
Operações relacionadas
Ative proteção contra exclusão
Após ativar o recurso de governança de políticas conforme descrito em Etapa 1: Instalar ou atualizar a governança de políticas, ative também a proteção contra exclusão para namespaces ou Services que envolvem negócios críticos ou dados sensíveis, evitando exclusões acidentais. Quando essa proteção está ativada, é necessário desativá-la manualmente antes de excluir os recursos correspondentes.
Esta seção mostra como ativar a proteção contra exclusão para um namespace existente. O processo é semelhante para outros recursos.
-
Ative proteção contra exclusão para um namespace existente
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Namespaces and Quotas.
Na lista de namespaces, localize o namespace que deseja gerenciar, clique em Edit na coluna Actions e siga as instruções na tela na caixa de diálogo para ativar a proteção contra exclusão.
-
Ative proteção contra exclusão para um Service existente
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na lista de Services, localize o Service que deseja gerenciar, clique em
na coluna Actions, clique em Enable Deletion Protection e siga as instruções na tela na caixa de diálogo para ativar a proteção contra exclusão.
Validação entre recursos com ack-policy-external-provider
Por padrão, o Gatekeeper toma decisões de política baseadas apenas no objeto em revisão. No entanto, cenários de segurança complexos frequentemente exigem que uma política verifique o estado de outros recursos do cluster para garantir uma aplicação precisa.
O componente gerenciado ack-policy-external-provider atua como uma fonte de dados externa para o Gatekeeper, permitindo que desenvolvedores de políticas consultem recursos do Kubernetes diretamente em seu código Rego. Essa capacidade é necessária para políticas avançadas, como a política integrada de proteção contra exclusão de CRD.
O componente ack-policy-external-provider deve ser usado com o gatekeeper. Certifique-se de que o gatekeeper esteja implantado no seu cluster.
Instale e configure ack-policy-external-provider
Na página Clusters ACK, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Add-ons.
-
Pesquise por ack-policy-external-provider e siga as instruções na tela para concluir a configuração.
ProviderPodNumber: o número de instâncias do componente.
-
ProtectedKinds: adicione os tipos de recursos correspondentes aos CRDs que deseja proteger.
A proteção contra exclusão de CRD requer a verificação da existência de instâncias do tipo de recurso no cluster. Seguindo o princípio do menor privilégio, o ack-policy-external-provider não possui as permissões de consulta necessárias por padrão e deve ser configurado manualmente.
Defina ProviderPodNumber (número de réplicas, padrão:
1). Na seção ProtectedKinds, insira os nomes dos tipos de recursos (comopods,policiesoucustomresources). Clique em Add para adicionar várias entradas ou em Delete para remover uma entrada. Clique em OK.
Definição de API e parâmetros
O ack-policy-external-provider implementa um Provider de dados externo padrão do Gatekeeper. Em um modelo de política Rego, envie uma solicitação de consulta de recursos para este componente chamando a função external_data e especificando provider: ack-policy-external-data-provider.
Os parâmetros da solicitação são definidos no formato JSON. Veja alguns exemplos abaixo.
// Example 1
{
"action": "ListK8sResource",
"namespaced": false,
"group": "",
"version": "v1",
"resource": "persistentvolumeclaims"
"requestID": review.uid,
"userInfo": review.userInfo,
"requestFrom": "PVCProtector",
"labelSelector": "protected",
"limit": 1
}
// Example 2
{
"action": "GetK8sResource",
"namespaced": true,
"namespace": "default",
"group": "apps",
"version": "v1",
"resource": "deployments",
"requestID": review.uid,
"userInfo": review.userInfo,
"requestFrom": "FinOpsPolicy",
"labelSelector": "protected",
"limit": 1
}
A tabela a seguir descreve os parâmetros principais.
|
Parâmetro |
Descrição |
Obrigatório |
|
|
Tipo de operação. Os valores suportados são |
Sim |
|
|
Grupo de API do recurso alvo. |
Sim |
|
|
Versão da API do recurso alvo. |
Não |
|
|
Nome no plural do recurso alvo (como |
Sim |
|
|
Indica se o recurso alvo está localizado dentro de um namespace. Para recursos com escopo de cluster, use
|
Sim |
|
|
Quando |
Não |
|
|
Quando |
Não |
|
|
Filtra recursos com base em rótulos, seguindo a sintaxe de seletor de rótulos do Kubernetes. |
Não |
|
|
Número máximo de recursos retornados por |
Não |
|
|
ID exclusivo da solicitação. Recomendamos usar |
Não |
|
|
Informações sobre o usuário que inicia a solicitação. Recomendamos usar |
Não |
|
|
Identificador da origem da solicitação, geralmente o nome do modelo de política, usado para rastreamento de logs. |
Sim |
Exemplo: Impedir exclusão de CRD
Este exemplo mostra como usar o ack-policy-external-provider para implementar uma política avançada comum: proibir a exclusão de um CustomResourceDefinition (CRD) se ainda existirem instâncias de recursos personalizados (CR) associadas.
Esta política é uma regra integrada e não requer implantação manual. Esta seção serve apenas para fins de demonstração.
-
Lógica da política
Consulta: as políticas Rego usam
external_datapara chamar o ack-policy-external-provider.Verificação: com base nos parâmetros da solicitação, o componente ack-policy-external-provider consulta o cluster para verificar se existem instâncias CR correspondentes.
Decisão: se o resultado da consulta retornar pelo menos uma instância CR, o ack-policy-external-provider devolverá o resultado à política Rego, e a política acabará por
deny(rejeitar) essa operação de exclusão.
-
Modelo de política (ConstraintTemplate)
Define a lógica da política.
apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: blockcrddeletion annotations: meta.helm.sh/release-name: gatekeeper meta.helm.sh/release-namespace: kube-system metadata.gatekeeper.sh/version: 1.0.0 labels: app.kubernetes.io/managed-by: Helm spec: crd: spec: names: kind: BlockCrdDeletion validation: legacySchema: true targets: - target: admission.k8s.gatekeeper.sh rego: | package block_crd_deletion violation[{"msg": msg}] { before(input.review.operation) response := handle(input.review) msg := after(response) } before(operation) { operation == "DELETE" } handle(review) = response { customrequest := { "action": "ListK8sResource", "namespaced": false, "group": review.object.spec.group, "version": "", "resource": review.object.spec.names.plural, "requestID": review.uid, "userInfo": review.userInfo, "requestFrom": "BlockCrdDeletion", "labelSelector": "protected", "limit": 1 } request_keys := [json.marshal(customrequest)] response := external_data({ "provider": "ack-policy-external-data-provider", "keys": request_keys }) } after(response) = msg { count(response.responses[0]) > 0 msg := sprintf( "The CRD %v is not allowed to be deleted. Reason: It is not allowed to delete a CRD object when it contains a collection of custom resources. Current existing custom resources: %v, etc.", [input.review.name, response.responses[0][0]] ) } -
Instância de política (Constraint)
Aplica o modelo a recursos específicos. Este exemplo aplica a política a todos os CRDs.
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: BlockCrdDeletion metadata: name: block-crd-deletion-rule spec: enforcementAction: deny match: kinds: - apiGroups: - '*' kinds: - CustomResourceDefinition -
Verifique o resultado
-
Crie um CRD de teste e uma instância CR correspondente.
# Create a CRD apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: simplestthings.example.com spec: group: example.com scope: Namespaced names: plural: simplestthings singular: simplestthing kind: SimplestThing versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: message: type: string --- # Create a CR instance apiVersion: example.com/v1 kind: SimplestThing metadata: name: my-simple-thing namespace: default labels: protected: "false" spec: message: "Hello" -
Tente excluir o CRD.
kubectl delete crd simplestthings.example.com -
Verifique se a política bloqueia a exclusão e retorna uma mensagem de erro clara.
Saída esperada:
Error from server (Forbidden): admission webhook "delete.validation.gatekeeper.sh" denied the request: [block-crd-deletion-rule] The CRD simplestthings.example.com is not allowed to be deleted. Reason: It is not allowed to delete a CRD object when it contains a collection of custom resources. Current existing custom resources: my-simple-thing, etc.
-
Tópicos relacionados
O recurso de inspeção permite verificar riscos de segurança nas configurações de cargas de trabalho. Para mais informações, consulte Configurar inspeção para verificar cargas de trabalho do cluster.