Partilhar via


Proteja seus clusters do Serviço Kubernetes do Azure (AKS) com a Política do Azure

Você pode aplicar e impor políticas de segurança internas em seus clusters do Serviço Kubernetes do Azure (AKS) usando a Política do Azure. A Política do Azure ajuda a impor padrões organizacionais e a avaliar a conformidade em escala. Depois de instalar o complemento de Política do Azure para AKS, você pode aplicar definições de política individuais ou grupos de definições de política chamadas iniciativas (às vezes chamadas de conjuntos de políticas) ao seu cluster. Consulte Definições internas da Política do Azure para AKS para obter uma lista completa das definições de política e iniciativa do AKS.

Este artigo mostra como aplicar definições de política ao cluster e verificar se essas atribuições estão sendo impostas.

Pré-requisitos

Atribuir uma definição ou iniciativa de política interna

Você pode aplicar uma definição de política ou iniciativa no portal do Azure usando as seguintes etapas:

  1. Navegue até o serviço de Política do Azure no portal do Azure chamado Política.
  2. No painel esquerdo da página Política do Azure, selecione Definições.
  3. Em Categorias, selecione Kubernetes.
  4. Escolha a definição de política ou a iniciativa a que pretende candidatar-se. Para este exemplo, selecione a iniciativa Kubernetes cluster pod security baseline standards for Linux-based workloads .
  5. Selecione Atribuir.
  6. Defina o Escopo para o grupo de recursos do cluster AKS com o complemento Azure Policy habilitado.
  7. Selecione a página Parâmetros e atualize o Efeito de para deny para bloquear novas implantações que violem a iniciativa de linha de audit base. Você também pode adicionar namespaces extras para excluir da avaliação. Para este exemplo, mantenha os valores padrão.
  8. Selecione Rever + criar>Criar para submeter a atribuição de política.

Criar e atribuir uma definição de política personalizada

As políticas personalizadas permitem definir regras para usar o Azure. Por exemplo, você pode impor os seguintes tipos de regras:

  • Práticas de segurança
  • Gestão de custos
  • Regras específicas da organização (como nomenclatura ou localizações)

Antes de criar uma política personalizada, verifique a lista de padrões e exemplos comuns para ver se o seu caso já está coberto.

As definições de política personalizadas são escritas em JSON. Para saber mais sobre como criar uma política personalizada, consulte Estrutura de definição de política do Azure e Criar uma definição de política personalizada.

Nota

O Azure Policy agora utiliza uma nova propriedade conhecida como templateInfo , que permite definir o tipo de origem para o modelo de restrição. Ao definir templateInfo em definições de política, não é necessário definir constraintTemplate ou propriedades de restrição . Você ainda precisa definir apiGroups e tipos. Para obter mais informações sobre isso, consulte Noções básicas sobre os efeitos da Política do Azure.

Depois de criar sua definição de política personalizada, consulte Atribuir uma definição de política para obter um passo a passo sobre como atribuir a política ao cluster do Kubernetes.

Validar se uma Política do Azure está em execução

  • Confirme se as atribuições de política são aplicadas ao cluster usando o comando a seguir kubectl get .

    kubectl get constrainttemplates
    

    Nota

    As atribuições de política podem levar até 20 minutos para serem sincronizadas em cada cluster.

    Sua saída deve ser semelhante à saída de exemplo a seguir:

    NAME                                     AGE
    k8sazureallowedcapabilities              23m
    k8sazureallowedusersgroups               23m
    k8sazureblockhostnamespace               23m
    k8sazurecontainerallowedimages           23m
    k8sazurecontainerallowedports            23m
    k8sazurecontainerlimits                  23m
    k8sazurecontainernoprivilege             23m
    k8sazurecontainernoprivilegeescalation   23m
    k8sazureenforceapparmor                  23m
    k8sazurehostfilesystem                   23m
    k8sazurehostnetworkingports              23m
    k8sazurereadonlyrootfilesystem           23m
    k8sazureserviceallowedports              23m
    

Validar a rejeição de um pod privilegiado

Vamos primeiro testar o que acontece quando você agenda um pod com o contexto de segurança do privileged: true. Esse contexto de segurança aumenta os privilégios do pod. A iniciativa desautoriza pods privilegiados, por isso o pedido é negado, o que resulta na rejeição da implantação.

  1. Crie um arquivo nomeado nginx-privileged.yaml e cole no seguinte manifesto YAML.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-privileged
    spec:
      containers:
        - name: nginx-privileged
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          securityContext:
            privileged: true
    
  2. Crie o pod usando o kubectl apply comando e especifique o nome do seu manifesto YAML.

    kubectl apply -f nginx-privileged.yaml
    

    Como esperado, o pod não consegue ser agendado, conforme mostrado na saída de exemplo a seguir:

    Error from server ([denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}): error when creating "privileged.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}
    

    O pod não atinge o estágio de agendamento, portanto, não há recursos para excluir antes de seguir em frente.

Testar a criação de um pod sem privilégios

No exemplo anterior, a imagem do contêiner tentou usar automaticamente o root para vincular o NGINX à porta 80. A iniciativa política nega este pedido, pelo que o pod não arranca. Agora, vamos tentar executar esse mesmo pod NGINX sem acesso privilegiado.

  1. Crie um arquivo nomeado nginx-unprivileged.yaml e cole no seguinte manifesto YAML.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-unprivileged
    spec:
      containers:
        - name: nginx-unprivileged
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    
  2. Crie o pod usando o kubectl apply comando e especifique o nome do seu manifesto YAML.

    kubectl apply -f nginx-unprivileged.yaml
    
  3. Verifique o status do pod usando o kubectl get pods comando.

    kubectl get pods
    

    Sua saída deve ser semelhante à saída de exemplo a seguir, que mostra que o pod foi agendado com êxito e tem um status de Execução:

    NAME                 READY   STATUS    RESTARTS   AGE
    nginx-unprivileged   1/1     Running   0          18s
    

    Este exemplo mostra a iniciativa de linha de base que afeta apenas as implantações que violam as políticas na coleção. As implantações permitidas continuam funcionando.

  4. Exclua o pod sem privilégios NGINX usando o kubectl delete comando e especifique o nome do seu manifesto YAML.

    kubectl delete -f nginx-unprivileged.yaml
    

Desativar uma política ou iniciativa

Você pode remover a iniciativa de linha de base no portal do Azure usando as seguintes etapas:

  1. Navegue até o painel Política no portal do Azure.
  2. Selecione Tarefas.
  3. Selecione o botão ... ao lado dos padrões de linha de base de segurança do pod de cluster do Kubernetes para a iniciativa de carga de trabalho baseada em Linux.
  4. Selecione Excluir atribuição.

Próximos passos

Para obter mais informações sobre como funciona a Política do Azure, consulte os seguintes artigos: