Compartilhar via


Benchmark do Kubernetes do CIS (Center for Internet Security)

Como um serviço seguro, o AKS (Serviço de Kubernetes do Azure) está em conformidade com os padrões SOC, ISO, PCI DSS e HIPAA. Este artigo aborda a proteção de segurança aplicada ao AKS com base no benchmark do Kubernetes do CIS. Para saber mais sobre a segurança do AKS, confira Conceitos de segurança para aplicativos e clusters no AKS (Serviço de Kubernetes do Azure). Para obter mais informações sobre o benchmark do CIS, consulte Benchmarks do CIS (Center for Internet Security).

Benchmark do Kubernetes CIS

A seguir estão os resultados das recomendações do CIS Kubernetes V1.27 Benchmark v1.9.0 no AKS. Os resultados são aplicáveis ​​ao AKS 1.27.x até o AKS 1.29.x.

Níveis de segurança

Os benchmarks do CIS fornecem dois níveis de configurações de segurança:

  • L1, ou Nível 1, recomenda requisitos básicos de segurança essenciais que podem ser configurados em qualquer sistema e devem causar pouca ou nenhuma interrupção de serviço ou funcionalidade reduzida.
  • L2, ou Nível 2, recomenda configurações de segurança para ambientes que exigem maior segurança que podem reduzir a funcionalidade.

Status da avaliação

Um status de avaliação é incluído para cada recomendação. O status da avaliação indica se a recomendação fornecida pode ser automatizada ou requer etapas manuais para ser implementada. Ambos os status são igualmente importantes e são determinados e apoiados conforme definido abaixo:

  • Automatizado: representa recomendações para as quais a avaliação de um controle técnico pode ser totalmente automatizada e validada para um estado de aprovação/reprovação. As recomendações incluirão as informações necessárias para implementar a automação.
  • Manual: representa recomendações para as quais a avaliação de um controle técnico não pode ser totalmente automatizada e requer todas ou algumas etapas manuais para validar se o estado configurado está definido conforme o esperado. O estado esperado pode variar dependendo do ambiente.

Recomendações automatizadas afetam a pontuação de referência se não forem aplicadas, enquanto recomendações manuais não.

Status de atestado

As recomendações podem ter um dos seguintes status de atestado:

  • Passar: A recomendação foi aplicada.
  • Falhar: A recomendação não foi aplicada.
  • N/A: A recomendação está relacionada aos requisitos de permissão do arquivo manifesto que não são relevantes para o AKS. Por padrão, os clusters do Kubernetes usam um modelo de manifesto para implantar os pods do painel de controle, que dependem de arquivos da VM do nó. O benchmark do Kubernetes do CIS recomenda que esses arquivos devem ter determinados requisitos de permissão. Os clusters do AKS usam um gráfico do Helm para implantar pods do painel de controle e não dependem de arquivos na VM do nó.
  • Depende do ambiente: A recomendação é aplicada no ambiente específico do usuário e não é controlada pelo AKS. Recomendações automatizadas afetam a pontuação de referência, independentemente de a recomendação se aplicar ao ambiente específico do usuário ou não.
  • Controle Equivalente: A recomendação foi implementada de uma maneira diferente e equivalente.

Detalhes do benchmark

ID do CIS Descrição da recomendação Status da avaliação Nível Status
1 Componentes do painel de controle
1,1 Arquivos de configuração de nó do painel de controle
1.1.1 Verificar se as permissões de arquivo de especificação do pod do servidor de API estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 N/D
1.1.2 Verificar se a propriedade do arquivo especificação de pod do servidor de API está definida como root:root Automatizado L1 N/D
1.1.3 Verificar se as permissões de arquivo de especificação do pod do gerenciador do controlador estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 N/D
1.1.4 Verificar se a propriedade do arquivo especificação de pod do gerenciador do controlador está definida como root:root Automatizado L1 N/D
1.1.5 Verificar se as permissões de arquivo de especificação do pod do agendador estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 N/D
1.1.6 Verificar se a propriedade do arquivo especificação de pod do agendador está definida como root:root Automatizado L1 N/D
1.1.7 Verificar se as permissões de arquivo de especificação do pod do etcd estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 N/D
1.1.8 Verificar se a propriedade do arquivo especificação de pod do etcd está definida como root:root Automatizado L1 N/D
1.1.9 Verificar se as permissões de arquivo do Adaptador de Rede de Contêiner estão definidas como 600 ou com uma opção mais restritiva Manual L1 N/D
1.1.10 Verificar se a propriedade do arquivo adaptador de rede de contêiner está definida como root:root Manual L1 N/D
1.1.11 Verificar se as permissões do diretório de dados do etcd estão definidas como 700 ou mais restritivas Automatizado L1 N/D
1.1.12 Verificar se a propriedade do diretório de dados do etcd está definida como etcd:etcd Automatizado L1 N/D
1.1.13 Verificar se as permissões do arquivo admin.conf estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 N/D
1.1.14 Verificar se a propriedade do arquivo admin.conf está definida como root:root Automatizado L1 N/D
1.1.15 Verificar se as permissões do arquivo scheduler.conf estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 N/D
1.1.16 Verificar se a propriedade do arquivo scheduler.conf está definida como root:root Automatizado L1 N/D
1.1.17 Verificar se as permissões do arquivo controller-manager.conf estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 N/D
1.1.18 Verificar se a propriedade do arquivo controller-manager.conf está definida como root:root Automatizado L1 N/D
1.1.19 Verificar se a propriedade do arquivo e do diretório PKI do Kubernetes está definida como root:root Automatizado L1 N/D
1.1.20 Verificar se as permissões de arquivo do certificado de PKI do Kubernetes estão definidas como 600 ou com uma opção mais restritiva Manual L1 N/D
1.1.21 Verificar se as permissões do arquivo chave PKI do Kubernetes estão definidas como 600 Manual L1 N/D
1,2 Servidor de API
1.2.1 Verificar se o argumento --anonymous-auth está definido como false Manual L1 Aprovado
1.2.2 Verificar se o parâmetro --token-auth-file não está definido Automatizado L1 Falha
1.2.3 Verificar se --DenyServiceExternalIPs não está definido Manual L1 Falha
1.2.4 Verificar se os argumentos --kubelet-client-certificate e --kubelet-client-key estão definidos conforme apropriado Automatizado L1 Aprovado
1.2.5 Verificar se o argumento --kubelet-certificate-authority está definido conforme apropriado Automatizado L1 Falha
1.2.6 Verificar se o argumento --authorization-mode não está definido AlwaysAllow Automatizado L1 Aprovado
1.2.7 Verificar se o argumento --authorization-mode inclui o Node Automatizado L1 Aprovado
1.2.8 Verificar se o argumento --authorization-mode inclui o RBAC Automatizado L1 Aprovado
1.2.9 Verificar se o plug-in de controle de admissão EventRateLimit está definido Manual L1 Falha
1.2.10 Verificar se o plug-in de controle de admissão AlwaysAdmit não está definido Automatizado L1 Aprovado
1.2.11 Verificar se plug-in de controle de admissão AlwaysPullImages está definido Manual L1 Falha
1.2.12 Verificar se o plug-in de controle de admissão ServiceAccount está definido Automatizado L2 Reprovado
1.2.13 Verificar se o plug-in de controle de admissão NamespaceLifecycle está definido Automatizado L2 Aprovado
1.2.14 Verificar se o plug-in de controle de admissão NodeRestriction está definido Automatizado L2 Aprovado
1.2.15 Verificar se o argumento --profiling está definido como false Automatizado L1 Aprovado
1.2.16 Verificar se o argumento --audit-log-path está definido Automatizado L1 Aprovado
1.2.17 Verificar se o argumento --audit-log-maxage está definido como 30 ou conforme apropriado Automatizado L1 Controle equivalente
1.2.18 Verificar se o argumento --audit-log-maxbackup está definido como 10 ou conforme apropriado Automatizado L1 Controle equivalente
1.2.19 Verificar se o argumento --audit-log-maxsize está definido como 100 ou conforme apropriado Automatizado L1 Aprovado
1.2.20 Verificar se o argumento --request-timeout está definido conforme apropriado Manual L1 Aprovado
1.2.21 Verificar se o argumento --service-account-lookup está definido como true Automatizado L1 Aprovado
1.2.22 Verificar se o argumento --service-account-key-file está definido conforme apropriado Automatizado L1 Aprovado
1.2.23 Verificar se os argumentos --etcd-certfile e --etcd-keyfile estão definidos conforme apropriado Automatizado L1 Aprovado
1.2.24 Verificar se os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme apropriado Automatizado L1 Aprovado
1.2.25 Verificar se o argumento --client-ca-file está definido conforme apropriado Automatizado L1 Aprovado
1.2.26 Verificar se o argumento --etcd-cafile está definido conforme apropriado Automatizado L1 Aprovado
1.2.27 Verificar se o argumento --encryption-provider-config está definido conforme apropriado Manual L1 Depende do ambiente
1.2.28 Verificar se os provedores de criptografia estão configurados adequadamente Manual L1 Depende do ambiente
1.2.29 Verificar se o servidor de API usa apenas codificações criptográficas fortes Manual L1 Aprovado
1,3 Gerenciador do controlador
1.3.1 Verificar se o argumento --terminated-pod-gc-threshold está definido conforme apropriado Manual L1 Aprovado
1.3.2 Verificar se o argumento --profiling está definido como false Automatizado L1 Aprovado
1.3.3 Verificar se o argumento --use-service-account-credentials está definido como true Automatizado L1 Aprovado
1.3.4 Verificar se o argumento --service-account-private-key-file está definido conforme apropriado Automatizado L1 Aprovado
1.3.5 Verificar se o argumento --root-ca-file está definido conforme apropriado Automatizado L1 Aprovado
1.3.6 Verificar se o argumento RotateKubeletServerCertificate está definido como true Automatizado L2 Aprovado
1.3.7 Verificar se o argumento --bind-address está definido como 127.0.0.1 Automatizado L1 Controle equivalente
1.4 Agendador
1.4.1 Verificar se o argumento --profiling está definido como false Automatizado L1 Aprovado
1.4.2 Verificar se o argumento --bind-address está definido como 127.0.0.1 Automatizado L1 Controle equivalente
2 etcd
2.1 Verificar se os argumentos --cert-file e --key-file estão definidos conforme apropriado Automatizado L1 Aprovado
2.2 Verificar se o argumento --client-cert-auth está definido como true Automatizado L1 Aprovado
2.3 Verificar se o argumento --auto-tls não está definido como true Automatizado L1 Aprovado
2.4 Verificar se os argumentos --peer-cert-file e --peer-key-file estão definidos conforme apropriado Automatizado L1 Aprovado
2.5 Verificar se o argumento --peer-client-cert-auth está definido como true Automatizado L1 Aprovado
2.6 Verificar se o argumento --peer-auto-tls não está definido como true Automatizado L1 Aprovado
2.7 Verificar se uma autoridade de certificação exclusiva é usada para o etcd Manual L2 Aprovado
3 Configuração do painel de controle
3.1 Autenticação e autorização
3.1.1 A autenticação do certificado do cliente não deve ser usada para usuários Manual L1 Aprovado
3.1.2 A autenticação do token da conta de serviço não deve ser usada para os usuários Manual L1 Aprovado
3.1.3 A autenticação do token de inicialização não deve ser usada para os usuários Manual L1 Aprovado
3.2 Log
3.2.1 Verificar se uma política de auditoria mínima é criada Manual L1 Aprovado
3.2.2 Verificar se a política de auditoria abrange as principais preocupações de segurança Manual L2 Aprovado
4 Nós de trabalho
4.1 Arquivos de configuração de nó de trabalho
4.1.1 Verificar se as permissões de arquivo do serviço do kubelet estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 Aprovado
4.1.2 Verificar se a propriedade do arquivo serviço Kubelet está definida como root:root Automatizado L1 Aprovado
4.1.3 Se o arquivo kubeconfig do proxy existir, verifique se as permissões estão definidas como 600 ou com uma opção mais restritiva Manual L1 N/D
4.1.4 Se o arquivo kubeconfig do proxy existir, verifique se a propriedade está definida como root:root Manual L1 N/D
4.1.5 Verificar se as permissões do arquivo --kubeconfig kubelet.conf estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 Aprovado
4.1.6 Verificar se a propriedade do arquivo --kubeconfig kubelet.conf está definida como root:root Automatizado L1 Aprovado
4.1.7 Verificar se as permissões do arquivo de autoridades de certificação estão definidas como 600 ou com uma opção mais restritiva Manual L1 Aprovado
4.1.8 Verificar se a propriedade do arquivo autoridades de certificação do cliente está definida como root:root Manual L1 Aprovado
4.1.9 Se o arquivo de configuração config.yaml do kubelet estiver sendo usado, verifique se as permissões estão definidas como 600 ou com uma opção mais restritiva Automatizado L1 Aprovado
4.1.10 Se o arquivo de configuração config.yaml do kubelet estiver sendo usado, verifique se a propriedade do arquivo está definida como root:root Automatizado L1 Aprovado
4.2 Kubelet
4.2.1 Verificar se o argumento --anonymous-auth está definido como false Automatizado L1 Aprovado
4.2.2 Verificar se o argumento --authorization-mode não está definido AlwaysAllow Automatizado L1 Aprovado
4.2.3 Verificar se o argumento --client-ca-file está definido conforme apropriado Automatizado L1 Aprovado
4.2.4 Verificar se o argumento --read-only-port está definido como 0 Manual L1 Aprovado
4.2.5 Verificar se o argumento --streaming-connection-idle-timeout não está definido como 0 Manual L1 Aprovado
4.2.6 Verificar se o argumento --make-iptables-util-chains está definido como true Automatizado L1 Aprovado
4.2.7 Verificar se o argumento --hostname-override não está definido Manual L1 Aprovado
4.2.8 Certifique-se de que o argumento --eventRecordQPS esteja definido em um nível que garanta a captura de eventos apropriada Manual L2 Aprovado
4.2.9 Verificar se os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme apropriado Manual L1 Aprovado
4.2.10 Verificar se o argumento --rotate-certificates não está definido como false Automatizado L1 Aprovado
4.2.11 Verifique se o argumento RotateKubeletServerCertificate está definido como verdadeiro Manual L1 Reprovado
4.2.12 Verificar se o Kubelet usa apenas codificações criptográficas fortes Manual L1 Aprovado
4.2.13 Garanta que um limite seja definido nos PIDs do pod Manual L1 Aprovado
4.3 kube-proxy
4.3.1 Certifique-se de que o serviço de métricas do kube-proxy esteja vinculado ao localhost Automatizado L1 Aprovado
5 Políticas
5.1 Contas de serviço e RBAC
5.1.1 Verificar se a função cluster-admin só é usada quando necessário Automatizado L1 Depende do ambiente
5.1.2 Minimizar o acesso a segredos Automatizado L1 Depende do ambiente
5.1.3 Minimizar o uso de curinga em Roles e ClusterRoles Automatizado L1 Depende do ambiente
5.1.4 Minimizar o acesso para criar pods Automatizado L1 Depende do ambiente
5.1.5 Verificar se as contas de serviço padrão não são usadas ativamente Automatizado L1 Depende do ambiente
5.1.6 Verificar se os tokens da conta de serviço só são montados quando necessário Automatizado L1 Depende do ambiente
5.1.7 Evitar usar o grupo system:masters Manual L1 Depende do ambiente
5.1.8 Limitar o uso das permissões Bind, Impersonate e Escalate no cluster do Kubernetes Manual L1 Depende do ambiente
5.1.9 Minimizar o acesso para criar volumes persistentes Manual L1 Depende do ambiente
5.1.10 Minimizar o acesso ao sub-recurso do proxy de nós Manual L1 Depende do ambiente
5.1.11 Minimizar o acesso ao sub-recurso de aprovação dos objetos certificatesigningrequests Manual L1 Depende do ambiente
5.1.12 Minimizar o acesso aos objetos de configuração do webhook Manual L1 Depende do ambiente
5.1.13 Minimizar o acesso à criação do token da conta de serviço Manual L1 Depende do ambiente
5.2 Padrões de segurança de pods
5.2.1 Certifique-se de que o cluster tenha pelo menos um mecanismo de controle de política ativo em vigor Manual L1 Depende do ambiente
5.2.2 Minimizar a admissão de contêineres privilegiados Manual L1 Depende do ambiente
5.2.3 Minimizar a admissão de contêineres que desejam compartilhar o namespace da ID do processo de host Manual L1 Depende do ambiente
5.2.4 Minimizar a admissão de contêineres que desejam compartilhar o namespace do IPC do host Manual L1 Depende do ambiente
5.2.5 Minimizar a admissão de contêineres que desejam compartilhar o namespace da rede do host Manual L1 Depende do ambiente
5.2.6 Minimizar a admissão de contêineres com allowPrivilegeEscalation Manual L1 Depende do ambiente
5.2.7 Minimizar a admissão de contêineres raiz Manual L2 Depende do ambiente
5.2.8 Minimizar a admissão de contêineres com a funcionalidade NET_RAW Manual L1 Depende do ambiente
5.2.9 Minimizar a admissão de contêineres com funcionalidades adicionadas Manual L1 Depende do ambiente
5.2.10 Minimizar a admissão de contêineres com funcionalidades atribuídas Manual L2 Depende do ambiente
5.2.11 Minimizar a admissão dos Contêineres do HostProcess do Windows Manual L1 Depende do ambiente
5.2.12 Minimizar a admissão dos volumes do HostPath Manual L1 Depende do ambiente
5.2.13 Minimizar a admissão dos contêineres que usam HostPorts Manual L1 Depende do ambiente
5,3 CNI e políticas de rede
5.3.1 Verificar se a CNI em uso dá suporte a políticas de rede Manual L1 Aprovado
5.3.2 Verificar se todos os namespaces têm políticas de rede definidas Manual L2 Depende do ambiente
5.4 Gerenciamento de segredos
5.4.1 Preferir usar segredos como arquivos em vez de segredos como variáveis de ambiente Manual L2 Depende do ambiente
5.4.2 Considerar o armazenamento de segredo externo Manual L2 Depende do ambiente
5.5 Controle de admissão extensível
5.5.1 Configurar a proveniência de imagens usando o controlador de admissão ImagePolicyWebhook Manual L2 Reprovado
5.6 Políticas gerais
5.6.1 Criar limites administrativos entre recursos usando namespaces Manual L1 Depende do ambiente
5.6.2 Verificar se o perfil seccomp está definido como docker/padrão em suas definições de pod Manual L2 Depende do ambiente
5.6.3 Aplicar contexto de segurança a seus pods e contêineres Manual L2 Depende do ambiente
5.6.4 O namespace padrão não deve ser usado Manual L2 Depende do ambiente

Observação

Além do benchmark do CIS do Kubernetes, também há um benchmark cis do AKS disponível.

Observações adicionais

  • O sistema operacional protegido por segurança é criado e mantido especificamente para o AKS e não tem suporte fora da plataforma AKS.
  • Para reduzir ainda mais a área de superfície de ataque, alguns drivers de módulo do kernel desnecessários são desabilitados no sistema operacional.

Próximas etapas

Para saber mais sobre a segurança do AKS, confira os seguintes artigos: