Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo mostra como usar as Salvaguardas de Implantação para impor práticas recomendadas em um cluster do Serviço Kubernetes do Azure (AKS).
Descrição geral
Nota
As Salvaguardas de Implementação estão ativadas por predefinição no AKS Automático.
Ao longo do ciclo de vida do desenvolvimento, é comum que surjam bugs, problemas e outros problemas se a implementação inicial dos seus recursos Kubernetes incluir configurações incorretas. Para aliviar o fardo do desenvolvimento do Kubernetes, o Serviço Kubernetes do Azure (AKS) oferece Salvaguardas de Implantação. As Salvaguardas de Implantação impõem as práticas recomendadas do Kubernetes em seu cluster AKS por meio de controles de Política do Azure.
As Salvaguardas de Implantação oferecem dois níveis de configuração:
-
Warn: Exibe mensagens de aviso no terminal de código para alertá-lo sobre quaisquer configurações de cluster não compatíveis, mas ainda permite que a solicitação seja atendida. -
Enforce: Impõe configurações compatíveis negando e mutando implantações se elas não seguirem as práticas recomendadas.
Depois de configurar as Salvaguardas de Implantação para 'Avisar' ou 'Aplicar', as Salvaguardas de Implantação avaliam programaticamente seus recursos do Kubernetes no momento da criação ou atualização para fins de conformidade. As Salvaguardas de Implantação também exibem informações de conformidade agregadas em suas cargas de trabalho em um nível por recurso por meio do painel de conformidade da Política do Azure no portal do Azure ou em sua CLI ou terminal. Executar uma carga de trabalho não compatível indica que o seu cluster não está a seguir as melhores práticas e que as cargas de trabalho no cluster estão em risco de sofrer problemas causados pela configuração do cluster.
Pré-requisitos
Nota
Os administradores de cluster não precisam de permissões da Política do Azure para habilitar ou desabilitar as Salvaguardas de Implantação. No entanto, é necessário ter o complemento Azure Policy instalado.
- Você precisa habilitar o complemento Azure Policy para AKS. Para obter mais informações, consulte Habilitar a Política do Azure em seu cluster AKS. Isso inclui registar o
Microsoft.PolicyInsightsfornecedor de recursos na sua subscrição.
Políticas de Salvaguardas de Implantação
A tabela a seguir lista as políticas que se tornam ativas e os recursos do Kubernetes que elas visam quando você habilita as Salvaguardas de Implantação. Você pode exibir as Salvaguardas de Implantação atualmente disponíveis no portal do Azure como uma definição de Política do Azure ou em Definições internas da Política do Azure para o Serviço Kubernetes do Azure. A intenção por trás desta coleção é criar uma lista comum e genérica de melhores práticas aplicáveis à maioria dos usuários e casos de uso.
| Política de salvaguarda da implantação | Resultado da mutação, se disponível |
|---|---|
| Não é possível editar nós individuais | N/A |
| Os limites de recursos de CPU e memória dos contêineres de cluster do Kubernetes não devem exceder os limites especificados | Define os limites de recursos da CPU para 500 m se não estiver definido e define os limites de memória para 500 Mi se nenhum caminho estiver presente |
| Deve ter regras de antiafinidade ou topologySpreadConstraintsSet | N/A |
| Sem rótulos específicos do AKS | N/A |
| Os contêineres de cluster do Kubernetes só devem usar imagens permitidas | N/A |
| Manchas reservadas no pool do sistema | Remove a CriticalAddonsOnly mancha de um pool de nós de usuário se não estiver definido. O AKS usa a mancha para manter os CriticalAddonsOnly pods do cliente longe do pool do sistema. Esta configuração garante uma separação clara entre os componentes AKS e os pods do cliente e evita a remoção dos pods do cliente que não toleram a CriticalAddonsOnly mancha. |
| Garantir que os contêineres de cluster tenham testes de prontidão ou vivacidade configurados | N/A |
| Os clusters Kubernetes devem usar o driver StorageClass (Container Storage Interface) | N/A |
| Os serviços de cluster do Kubernetes devem usar seletores exclusivos | N/A |
| As imagens de contêiner de cluster do Kubernetes não devem incluir a tag de imagem mais recente | N/A |
Se você quiser enviar uma ideia ou solicitação de Salvaguardas de Implantação, abra um problema no repositório AKS GitHub e adicione [Deployment Safeguards request] ao início do título.
Normas de Segurança de Pods nas Medidas de Salvaguarda da Implementação
Nota
Os Padrões de Segurança Baseline para Pods agora estão ativados por padrão no AKS Automatic. Os Pod Security Standards básicos no AKS Automatic não podem ser desativados.
As Salvaguardas de Implementação também suportam a capacidade de ativar os Padrões de Segurança Baseline, Restritos e Privilegiados para Pods. Para garantir que as suas cargas de trabalho sejam implementadas com sucesso, certifique-se de que cada manifesto cumpre os requisitos de Segurança Baseline ou Restrita de Pods. Por padrão, o Serviço Azure Kubernetes utiliza os Padrões de Segurança de Pods com Privilégios.
| Policy | Mensagem de erro | Corrigir |
|---|---|---|
| AppArmor |
AppArmor annotation values must be undefined/nil, runtime/default, or localhost/* ou AppArmor profile type must be one of: undefined/nil, RuntimeDefault, or Localhost |
Remova qualquer especificação do AppArmor. O Kubernetes por padrão aplica as configurações do apparmor. "Em hosts suportados, o perfil RuntimeDefault AppArmor é aplicado por padrão". |
| Espaços de Nome do Host |
Host network namespaces are disallowed: spec.hostNetwork is set to true' ou 'Host PID namespaces are disallowed: spec.hostPID is set to true' ou 'Host IPC namespaces are disallowed: spec.hostIPC is set to true' |
Defina esses valores como false ou remova a especificação dos campos. |
| Contentores privilegiados | 'Privileged [ephemeral\|init\|N/A] containers are disallowed: spec.containers[*].securityContext.privileged is set to true' |
Defina o campo securityContext.privileged apropriado como false ou remova o campo. |
| Capabilities | A mensagem começará com 'Disallowed capabilities detected |
Remova a capacidade mostrada do manifesto do contêiner. |
| Volumes do HostPath | HostPath volumes are forbidden under restricted security policy unless containers mounting them are from allowed images |
Remova o volume e a montagem de volume do HostPath. |
| Portas de host | HostPorts são proibidos pela política de segurança básica | Remova a especificação da porta do host do contêiner ofensivo. |
| SELinux | SELinux type must be one of: undefined/empty, container_t, container_init_t, container_kvm_t, or container_engine_t |
Defina o campo securityContext.seLinuxOptions.type do contentor para um dos valores permitidos. |
| /proc Tipo de Montagem | ProcMount deve ser 'undefined'/'nil' ou 'Default' em spec.containers[*].securityContext.procMount | Defina "* spec.containers[*].securityContext.procMount" para 'Default' ou fique indefinido. |
| Seccomp | Seccomp profile must not be explicitly set to Unconfined. Allowed values are: undefined/nil, RuntimeDefault, or Localhost |
Defina securityContext.seccompProfile.type no pod ou contêineres para um dos valores permitidos. |
| Parâmetros de sistema | Disallowed sysctl detected. Only baseline Kubernetes pod security standard sysctls are permitted |
Remova os sysctls não permitidos (consulte a especificação do oss para obter uma lista específica). |
| Tipos de Volume (Apenas PSS Restrito) | Only the following volume types are allowed under restricted policy: configMap, csi, downwardAPI, emptyDir, ephemeral, persistentVolumeClaim, projected, secret |
Remova quaisquer volumes que não sejam dos tipos permitidos. |
| Escalada de Privilégios (Apenas PSS Restrito) | Privilege escalation must be set to false under restricted policy |
* spec.containers[*].securityContext.allowPrivilegeEscalation`` deve ser explicitamente definido como false para cada contentor, initContainer e ephemeralContainer. |
| Executar como não root (apenas PSS restrito) | Containers must not run as root user in spec.containers[*].securityContext.runAsNonRoot |
spec.containers[*].securityContext.runAsNonRoot deve ser explicitamente definido como false para cada contentor, initContainer e ephemeralContainer. |
| Executar como utilizador não root (apenas PSS restrito) | 'Containers must not run as root user: spec.securityContext.runAsUser is set to 0' |
Defina securityContext.runAsUser para algum valor diferente de zero, ou deixe-o indefinido ao nível do pod, e de cada contentor, initContainer e ephemeralContainer. |
| Seccomp (PSS Apenas Restrito) | Seccomp profile must be "RuntimeDefault" or "Localhost" under restricted policy |
Defina securityContext.seccompProfile.type no pod ou contêineres para um dos valores permitidos. Isto difere da base pelo facto de a apólice restrita não permitir um valor indefinido. |
| Capacidades (apenas PSS restrito) |
All containers must drop ALL capabilities under restricted policy ou Only NET_BIND_SERVICE may be added to capabilities under restricted policy |
Todos os contentores devem remover as capacidades "ALL" e só podem adicionar "NET_BIND_SERVICE". |
Habilitar salvaguardas de implantação
Nota
Usar o nível de Salvaguardas de Implantação Enforce significa que você está aceitando que as implantações sejam bloqueadas e mutadas. Considere como estas políticas podem funcionar com o seu cluster AKS antes de ativar Enforce.
Habilitar salvaguardas de implantação em um cluster existente
Habilite as Salvaguardas de Implantação em um cluster existente que tenha o complemento Azure Policy habilitado usando o az aks safeguard create comando com o --level sinalizador. Se desejar receber avisos de não conformidade, defina como --levelWarn. Se você quiser negar ou mutar todas as implantações não compatíveis, defina-o como Enforce.
az aks safeguards create --resource-group <resource-group-name> --name <cluster-name> --level Enforce
Você também pode habilitar as Salvaguardas de Implantação usando o --cluster sinalizador e especificando a ID do recurso do cluster.
az aks safeguards create --cluster <ID> --level Enforce
Se desejar atualizar o nível de Salvaguardas de Implantação de um cluster existente, execute o seguinte comando com o novo valor para --level.
az aks safeguards update --resource-group <resource-group-name> --name <cluster-name> --level Warn
Excluindo namespaces
Você também pode excluir determinados namespaces das Salvaguardas de Implantação. Quando você exclui um namespace, a atividade nesse namespace não é afetada pelos avisos ou imposição das Salvaguardas de Implantação.
Por exemplo, para excluir os namespaces ns1 e ns2, use uma lista separada por espaço de namespaces com o --excluded-ns sinalizador, conforme mostrado no exemplo a seguir:
az aks safeguards update --resource-group <resource-group-name> --name <cluster-name> --level Warn --excluded-ns ns1 ns2
Ativar os Padrões de Segurança dos Pods
Nota
O Azure Kubernetes Service (AKS) utiliza Privileged Pod Security Standards por defeito. Se quiseres reverter à configuração predefinida, define a --pss-level flag para Privileged.
Para ativar os Padrões de Segurança dos Pods nas Salvaguardas de Implementação, use a --pss-level flag para selecionar um dos seguintes níveis: Baseline, Restricted, ou Privileged.
az aks safeguards update --resource-group <resource-group-name> --name <cluster-name> --level Warn --pss-level <Baseline|Restricted|Privileged>
Atualize a versão do seu Deployment Safeguard
As Salvaguardas de Implantação aderem ao esquema de versionamento de addon do AKS. Cada nova versão de um Deployment Safeguard será disponibilizada como uma nova versão menor no AKS. Essas atualizações serão comunicadas através das notas de versão do AKS GitHub e refletidas na tabela "Políticas de Salvaguardas de Implantação" em nossa documentação.
Para saber mais sobre o controle de versão e addons do AKS, consulte a seguinte documentação: aks-component-versions e aks-versioning-for-addons.
Verificar a conformidade entre clusters
Depois de implantar seu manifesto do Kubernetes, você verá avisos ou uma possível mensagem de negação em sua CLI ou terminal se o cluster não estiver em conformidade com as Salvaguardas de Implantação, conforme mostrado nos exemplos a seguir:
Avise
$ kubectl apply -f deployment.yaml
Warning: [azurepolicy-k8sazurev1antiaffinityrules-ceffa082711831ebffd1] Deployment with 2 replicas should have either podAntiAffinity or topologySpreadConstraints set to avoid disruptions due to nodes crashing
deployment.apps/simple-web created
Fazer cumprir
Com as mutações Deployment Safeguard, o Enforce nível muta os teus recursos Kubernetes quando aplicável. No entanto, seus recursos do Kubernetes ainda precisam passar por todas as proteções para serem implantados com êxito. Se alguma política de salvaguarda falhar, seu recurso será negado e não será implantado.
$ kubectl apply -f deployment.yaml
Error from server (Forbidden): error when creating "deployment.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev1antiaffinityrules-ceffa082711831ebffd1] Deployment with 2 replicas should have either podAntiAffinity or topologySpreadConstraints set to avoid disruptions due to nodes crashing
Se os seus recursos Kubernetes cumprirem as salvaguardas de mutação aplicáveis e cumprirem todos os outros requisitos de salvaguarda, serão implementados com sucesso, como mostrado no exemplo seguinte:
$ kubectl apply -f deployment.yaml
deployment.apps/simple-web created
Verificar a conformidade entre clusters usando o painel da Política do Azure
Para verificar se as Salvaguardas de Implantação foram aplicadas e verificar a conformidade do cluster, navegue até a página do portal do Azure do cluster e selecione Políticas e, em seguida, selecione Ir para a Política do Azure.
Na lista de políticas e iniciativas, selecione a iniciativa associada às Salvaguardas de Implantação. Você vê um painel mostrando o estado de conformidade em todo o cluster AKS.
Nota
Para avaliar corretamente a conformidade em todo o cluster AKS, a iniciativa Política do Azure deve ter como escopo o grupo de recursos do cluster.
Desativar salvaguardas de implantação
Para desabilitar as Salvaguardas de Implantação no cluster, use o delete comando.
az aks safeguards delete --resource-group <resource-group-name> --name <cluster-name>
FAQ
Posso criar as minhas próprias mutações?
N.º Se você tiver uma ideia para uma salvaguarda, abra um problema no repositório AKS GitHub e adicione [Deployment Safeguards request] ao início do título.
Posso escolher quais mutações quero no Enforcement?
N.º As Salvaguardas de Implantação são tudo ou nada. Assim que ativares Aviso ou Aplicar, todas as salvaguardas estarão ativas.
Por que meu recurso de implantação foi admitido mesmo não seguindo as práticas recomendadas?
As Salvaguardas de Implantação impõem padrões de práticas recomendadas por meio de controles de Política do Azure e têm políticas que validam em relação aos recursos do Kubernetes. Para avaliar e impor componentes de cluster, a Política do Azure estende o Gatekeeper. Atualmente, a aplicação do Gatekeeper também opera em um fail-open modelo. Como não há garantia de que o Gatekeeper responde à nossa chamada de rede, garantimos que, nesse caso, a validação é ignorada para que a recusa não bloqueie as suas implementações.
Para saber mais, consulte Validação de carga de trabalho no Gatekeeper.
Próximos passos
- Saiba mais sobre as práticas recomendadas para operar um cluster AKS.