Partilhar via


Usar a implantação de medidas de segurança para impor as melhores práticas no AKS (Serviço de Kubernetes do Azure) (versão prévia)

Este artigo mostra como usar a implantação de medidas de segurança para impor as melhores práticas em um cluster do AKS (Serviço de Kubernetes do Azure).

Visão geral

Ao longo do ciclo de vida de desenvolvimento, é comum que bugs, problemas e outras questões surjam se a implantação inicial dos recursos do Kubernetes incluir configurações incorretas. Para aliviar a carga do desenvolvimento do Kubernetes, o Serviço de Kubernetes do Azure (AKS) oferece a implantação de medidas de segurança (versão prévia). A implantação de medidas de segurança impõem as melhores práticas do Kubernetes em seu cluster do AKS por meio dos controles do Azure Policy.

A implantação de medidas de segurança oferece dois níveis de configuração:

  • Warning: exibe mensagens de aviso no terminal de código para alertar você sobre as configurações de cluster fora de conformidade, mas ainda permite que a solicitação seja concluída.
  • Enforcement: impõe configurações que estão em conformidade, negando e modificando as implantações se elas não seguem as melhores práticas.

Depois de configurar a implantação de medidas de segurança para "Aviso" ou "Imposição", a implantação de medidas de segurança avalia programaticamente seus clusters no momento da criação ou da atualização em relação à conformidade. A implantação de medidas de segurança também exibe informações de conformidade agregadas em suas cargas de trabalho em um nível de recurso por meio do painel de conformidade do Azure Policy no portal do Azure ou em sua CLI ou terminal. A execução de uma carga de trabalho não compatível indica que o cluster não está seguindo as melhores práticas e que as cargas de trabalho em seu cluster correm o risco de apresentar problemas causados pela configuração do cluster.

Importante

As versões prévias do recurso AKS estão disponíveis em uma base de autoatendimento e aceitação. As visualizações são fornecidas "como estão" e "conforme disponíveis" e estão excluídas dos acordos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

Pré-requisitos

Instalar a extensão da CLI aks-preview

  1. Instale a extensão da CLI aks-preview usando o comando az extension add.

    az extension add --name aks-preview
    
  2. Atualize a extensão para garantir que você tenha a versão mais recente usando o comando az extension update.

    az extension update --name aks-preview
    

Registrar o sinalizador de recursos da implantação de medidas de segurança

  1. Registre o sinalizador de recurso SafeguardsPreview usando o comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    Demora alguns minutos para o status exibir Registrado.

  2. Verifique o status do registro usando o comando az feature show.

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Quando o status reflete Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Políticas de implantação de medidas de segurança

Observação

No momento, as políticas ReadOnlyRootFilesystem e RootfilesystemInitContainers só estão disponíveis no Linux.

A tabela a seguir lista as políticas que passam a ficar ativas e os recursos do Kubernetes que são o destino delas quando a implantação de medidas de segurança é habilitada. Veja a implantação de medidas de segurança atualmente disponível no portal do Azure como uma definição do Azure Policy ou nas Definições internas do Azure Policy para o Serviço de Kubernetes do Azure. A intenção por trás dessa 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 implantação de medidas de segurança Recurso do Kubernetes de destino Resultado da mutação, se disponível
[Versão prévia]: não é possível editar nós individuais. N/D
Os limites de recursos de CPU e memória de contêineres de cluster do Kubernetes não devem exceder os limites especificados Pod Define os limites de recursos da CPU como 500m se não está definido e define os limites de memória como 500Mi se não há nenhum caminho presente
[Versão prévia]: o conjunto de regras de antiafinidade é obrigatório Implantação, StatefulSet, ReplicationController, ReplicaSet N/D
[Versão prévia]: sem rótulos específicos do AKS Implantação, StatefulSet, Replicaset N/D
Os contêineres de cluster do Kubernetes devem usar somente as imagens permitidas Pod N/D
[Versão prévia]: tintas reservadas do pool do sistema Remove o taint CriticalAddonsOnly de um pool de nós de usuário se ele não está definido. O AKS usa o taint CriticalAddonsOnly para manter os pods do cliente longe do pool do sistema. Essa configuração garante uma separação clara entre os componentes do AKS e os pods de cliente e impede a remoção de pods de clientes que não toleram o taint CriticalAddonsOnly.
Verificar se os contêineres de cluster têm investigações de preparação ou atividade configuradas Pod N/D
Os clusters do Kubernetes devem usar o StorageClass do driver da CSI (Interface de Armazenamento de Contêiner) StorageClass N/D
[Versão prévia]: os contêineres de cluster do Kubernetes só devem efetuar pull de imagens quando os segredos de pull de imagem estiverem presentes Pod N/D
[Versão prévia]: o cluster do Kubernetes deve implementar Orçamentos precisos de Interrupção do Pod Implantação, ReplicaSet, StatefulSet Define maxUnavailable no recurso PodDisruptionBudget como 1.
[Versão prévia]: os serviços de cluster do Kubernetes devem usar seletores exclusivos Serviço N/D
[Versão prévia]: o ReadOnlyRootFilesystem está definido como true na especificação do pod Pod Define readOnlyRootFilesystem na especificação do pod como true, caso não esteja definido. Essa configuração impede que os contêineres façam gravações no sistema de arquivos raiz.
[Versão prévia]: RootfilesystemInitContainers está definido como true na especificação do pod Pod Define rootFilesystemInitContainers como true na especificação do pod, caso não esteja definido.
[Versão prévia]: as imagens de contêiner de cluster do Kubernetes não devem incluir a marca de imagem mais recente Implantação, StatefulSet, ReplicationController, ReplicaSet N/D
[Versão prévia]: as imagens de contêiner de cluster do Kubernetes devem incluir o gancho preStop Implantação, StatefulSet, ReplicationController, ReplicaSet N/D

Caso deseje enviar uma ideia ou uma solicitação de implantação de medidas de segurança, abra um problema no repositório GitHub do AKS e adicione [deployment safeguards request] ao início do título.

Habilitar a implantação de medidas de segurança

Observação

Se você habilitou o Azure Policy pela primeira vez para usar as proteções de implantação, talvez seja necessário aguardar até 20 minutos para que o Azure Policy entre em vigor.

Usar o nível Enforcement da implantação de medidas de segurança significa que você está aceitando o bloqueio e a alteração das implantações. Considere como essas políticas podem funcionar com o cluster do AKS antes de habilitar Enforcement.

Habilitar a implantação de medidas de segurança em um novo cluster

Habilite a implantação de medidas de segurança em um novo cluster usando o comando az aks create com os sinalizadores --safeguards-level e --safeguards-version.

Caso deseje receber avisos de não conformidade, defina --safeguards-level como Warning. Caso deseje negar ou alterar todas as implantações fora de conformidade, defina-o como Enforcement. Para receber avisos, defina --safeguards-level como "Aviso". Para negar todas as implantações que não seguem a implantação de medidas de segurança, defina o --safeguards-level como “Imposição”. Para definir a versão da implantação de medidas de segurança, use o sinalizador --safeguards-version. Atualmente, a V2.0.0 é a última versão da implantação de medidas de segurança.

az aks create \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --enable-addons azure-policy \
    --safeguards-level Warning \
    --safeguards-version v2.0.0 \
    --generate-ssh-keys

Habilitar a implantação de medidas de segurança em um cluster existente

Habilite a implantação de medidas de segurança em um cluster existente que tenha o complemento do Azure Policy habilitado por meio do comando az aks update com os sinalizadores --safeguards-level e --safeguards-version. Caso deseje receber avisos de não conformidade, defina --safeguards-level como Warning. Caso deseje negar ou alterar todas as implantações fora de conformidade, defina-o como Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0

Caso deseje atualizar o nível da implantação de medidas de segurança de um cluster existente, use o comando az aks update com o sinalizador --safeguards-level definido como Warning ou Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement

Excluindo namespaces

Você também pode excluir determinados namespaces da implantação de medidas de segurança. Quando você exclui um namespace, a atividade nesse namespace não é afetada por avisos ou imposições da implantação de medidas de segurança.

Por exemplo, para excluir os namespaces ns1 e ns2, use uma lista separada por vírgulas de namespaces com o sinalizador --safeguards-excluded-ns, conforme mostrado no seguinte exemplo:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2 

Atualizar sua versão da implantação de medidas de segurança

Observação

A v2.0.0 é a última versão da implantação de medidas de segurança.

Atualize a versão da implantação de medidas de segurança usando o comando az aks update com o sinalizador --safeguards-version definido com a nova versão. O seguinte exemplo atualiza um cluster existente para que ele use a versão 2.0.0:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0

Verificar a conformidade entre clusters

Depois de implantar o manifesto do Kubernetes, você verá avisos ou uma possível mensagem de negação na CLI ou no terminal se o cluster não estiver em conformidade com a implantação de medidas de segurança, conforme mostrado nos seguintes exemplos:

Aviso

$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created

Aplicação

Com as mutações da implantação de medidas de segurança, o nível Enforcement altera os recursos do Kubernetes, quando aplicável. No entanto, os recursos do Kubernetes ainda precisam ser aprovados em todas as medidas para serem implantados com êxito. Se as políticas da medida não forem bem-sucedidas, o recurso será negado e não será implantado.

$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.

Se os recursos do Kubernetes cumprirem as medidas de mutação aplicáveis e atenderem a todos os outros requisitos das medidas, eles serão implantados com êxito, conforme mostrado no seguinte exemplo:

$ kubectl apply -f pod.yml
pod/my-pod created

Verificar a conformidade entre clusters usando o painel do Azure Policy

Para verificar se a implantação de medidas de segurança foi aplicada e verificar a conformidade do cluster, navegue até a página do portal do Azure do seu cluster, selecione Políticas e selecione Ir para o Azure Policy.

Na lista de políticas e iniciativas, selecione a iniciativa associada à implantação de medidas de segurança. Você verá um painel mostrando o estado de conformidade no seu cluster do AKS.

Observação

Para avaliar corretamente a conformidade em seu cluster do AKS, a iniciativa do Azure Policy deve estar no escopo do grupo de recursos do cluster.

Desabilitar a implantação de medidas de segurança

Desabilite a implantação de medidas de segurança no seu cluster usando o comando az aks update e defina --safeguards-level como Off.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off

--

Perguntas frequentes

Habilitei a implantação de medidas de segurança com o Azure Policy pela primeira vez. Por que não vejo avisos? Por que meus pods não estão sendo recusados?

O Azure Policy pode levar até 35 minutos para ser sincronizado com o cluster depois que ele estiver habilitado pela primeira vez.

Mudei de Aviso para Imposição. Isso entrará em vigor imediatamente?

Ao alternar os níveis da implantação de medidas de segurança, talvez seja necessário aguardar até 15 minutos para que o novo nível entre em vigor.

Posso criar minhas mutações?

Não. Caso tenha uma ideia para uma medida, abra um problema no repositório GitHub do AKS e adicione [deployment safeguards request] ao início do título.

Posso escolher quais mutações serão incluídas na imposição?

Não. No caso da implantação de medidas de segurança, é tudo ou nada. Depois de ativar o Aviso ou a Imposição, todas as medidas ficarão ativas.

Por que meu recurso de implantação foi admitido mesmo que não estivesse seguindo as melhores práticas?

A implantação de medidas de segurança impõe padrões de práticas recomendadas por meio dos controles do Azure Policy e possui políticas que são validadas em relação aos recursos do Kubernetes. Para avaliar e impor componentes de cluster, o Azure Policy estende o Gatekeeper. A imposição do gatekeeper também opera atualmente em um modelo fail-open. Como não há garantia de que o Gatekeeper responderá à nossa chamada de rede, garantimos que, nesse caso, a validação seja ignorada para que a negação não bloqueie suas implantações.

Para saber mais, confira validação da carga de trabalho no Gatekeeper.

Próximas etapas