Partilhar via


Benchmark Kubernetes do Center for Internet Security (CIS)

Como um serviço seguro, o Serviço Kubernetes do Azure (AKS) 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 obter mais informações sobre a segurança do AKS, consulte Conceitos de segurança para aplicativos e clusters no Serviço Kubernetes do Azure (AKS). Para obter mais informações sobre o benchmark CIS, consulte Center for Internet Security (CIS) Benchmarks.

Benchmark do Kubernetes CIS

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

Níveis de segurança

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

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

Estado da avaliação

Um status de avaliação é incluído para cada recomendação. O status da avaliação indica se a recomendação dada pode ser automatizada ou requer etapas manuais para ser implementada. Ambos os status são igualmente importantes e são determinados e suportados 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.

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

Estado do atestado

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

  • Pass: A recomendação foi aplicada.
  • Falha: A recomendação não foi aplicada.
  • N/A: A recomendação está relacionada aos requisitos de permissão de arquivo de 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 de plano de controle, que dependem de arquivos da VM do nó. O benchmark do Kubernetes do CIS recomenda que esses arquivos devem ter certos requisitos de permissão. Os clusters AKS usam um gráfico Helm para implantar pods de plano 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. As recomendações automatizadas afetam a pontuação de referência, quer a recomendação se aplique ao ambiente específico do usuário ou não.
  • Controlo equivalente: A recomendação foi implementada de forma diferente e equivalente.

Detalhes do benchmark

CIS ID Descrição da recomendação Estado da avaliação Level Status
1 Componentes do plano de controle
1.1 Arquivos de configuração do nó do plano de controle
1.1.1 Verifique se as permissões do arquivo de especificação do pod do servidor API estão definidas como 600 ou mais restritivas Automatizado L1 N/A
1.1.2 Verifique se a propriedade do arquivo de especificação do pod do servidor API está definida como root:root Automatizado L1 N/A
1.1.3 Verifique se as permissões do arquivo de especificação do pod do gerenciador do controlador estão definidas como 600 ou mais restritivas Automatizado L1 N/A
1.1.4 Certifique-se de que a propriedade do arquivo de especificação do pod do gerenciador do controlador esteja definida como root:root Automatizado L1 N/A
1.1.5 Verifique se as permissões do arquivo de especificação do pod do agendador estão definidas como 600 ou mais restritivas Automatizado L1 N/A
1.1.6 Certifique-se de que a propriedade do arquivo de especificação do pod do agendador esteja definida como root:root Automatizado L1 N/A
1.1.7 Verifique se as permissões do arquivo de especificação do pod etcd estão definidas como 600 ou mais restritivas Automatizado L1 N/A
1.1.8 Certifique-se de que a propriedade do arquivo de especificação do pod etcd esteja definida como root:root Automatizado L1 N/A
1.1.9 Verifique se as permissões do arquivo da Interface de Rede de Contêiner estão definidas como 600 ou mais restritivas Manual L1 N/A
1.1.10 Verifique se a propriedade do arquivo da Interface de Rede de Contêiner está definida como root:root Manual L1 N/A
1.1.11 Certifique-se de que as permissões do diretório de dados etcd estejam definidas como 700 ou mais restritivas Automatizado L1 N/A
1.1.12 Certifique-se de que a propriedade do diretório de dados etcd esteja definida como etcd:etcd Automatizado L1 N/A
1.1.13 Verifique se as permissões do arquivo admin.conf estão definidas como 600 ou mais restritivas Automatizado L1 N/A
1.1.14 Verifique se a propriedade do arquivo admin.conf está definida como root:root Automatizado L1 N/A
1.1.15 Verifique se as permissões do arquivo scheduler.conf estão definidas como 600 ou mais restritivas Automatizado L1 N/A
1.1.16 Verifique se a propriedade do arquivo scheduler.conf está definida como root:root Automatizado L1 N/A
1.1.17 Verifique se as permissões do arquivo controller-manager.conf estão definidas como 600 ou mais restritivas Automatizado L1 N/A
1.1.18 Verifique se a propriedade do arquivo controller-manager.conf está definida como root:root Automatizado L1 N/A
1.1.19 Verifique se o diretório PKI do Kubernetes e a propriedade do arquivo estão definidos como root:root Automatizado L1 N/A
1.1.20 Verifique se as permissões do arquivo de certificado PKI do Kubernetes estão definidas como 600 ou mais restritivas Manual L1 N/A
1.1.21 Verifique se as permissões do arquivo de chave PKI do Kubernetes estão definidas como 600 Manual L1 N/A
1.2 Servidor de API
1.2.1 Verifique se o --anonymous-auth argumento está definido como false Manual L1 Aprovação
1.2.2 Certifique-se de que o --token-auth-file parâmetro não está definido Automatizado L1 Reprovado
1.2.3 Certifique-se de que --DenyServiceExternalIPs não está definido Manual L1 Reprovado
1.2.4 Certifique-se de que os --kubelet-client-certificate argumentos e --kubelet-client-key são definidos conforme apropriado Automatizado L1 Aprovação
1.2.5 Certifique-se de que o --kubelet-certificate-authority argumento está definido conforme apropriado Automatizado L1 Reprovado
1.2.6 Verifique se o --authorization-mode argumento não está definido como AlwaysAllow Automatizado L1 Aprovação
1.2.7 Certifique-se de que o --authorization-mode argumento inclui Node Automatizado L1 Aprovação
1.2.8 Certifique-se de que o --authorization-mode argumento inclui RBAC Automatizado L1 Aprovação
1.2.9 Certifique-se de que o plug-in de controle de admissão EventRateLimit esteja definido Manual L1 Reprovado
1.2.10 Certifique-se de que o plug-in de controle de admissão AlwaysAdmit não está definido Automatizado L1 Aprovação
1.2.11 Certifique-se de que o plug-in de controle de admissão AlwaysPullImages está definido Manual L1 Reprovado
1.2.12 Certifique-se de que o plug-in de controle de admissão ServiceAccount está definido Automatizado L2 Reprovado
1.2.13 Certifique-se de que o plug-in de controle de admissão NamespaceLifecycle esteja definido Automatizado L2 Aprovação
1.2.14 Certifique-se de que o plug-in de controle de admissão NodeRestriction esteja definido Automatizado L2 Aprovação
1.2.15 Verifique se o --profiling argumento está definido como false Automatizado L1 Aprovação
1.2.16 Certifique-se de que o --audit-log-path argumento está definido Automatizado L1 Aprovação
1.2.17 Certifique-se de que o --audit-log-maxage argumento está definido como 30 ou conforme apropriado Automatizado L1 Controlo Equivalente
1.2.18 Certifique-se de que o --audit-log-maxbackup argumento está definido como 10 ou conforme apropriado Automatizado L1 Controlo Equivalente
1.2.19 Certifique-se de que o --audit-log-maxsize argumento está definido como 100 ou conforme apropriado Automatizado L1 Aprovação
1.2.20 Certifique-se de que o --request-timeout argumento está definido conforme apropriado Manual L1 Aprovação
1.2.21 Certifique-se de que o --service-account-lookup argumento está definido como true Automatizado L1 Aprovação
1.2.22 Certifique-se de que o --service-account-key-file argumento está definido conforme apropriado Automatizado L1 Aprovação
1.2.23 Certifique-se de que os --etcd-certfile argumentos e --etcd-keyfile são definidos conforme apropriado Automatizado L1 Aprovação
1.2.24 Certifique-se de que os --tls-cert-file argumentos e --tls-private-key-file são definidos conforme apropriado Automatizado L1 Aprovação
1.2.25 Certifique-se de que o --client-ca-file argumento está definido conforme apropriado Automatizado L1 Aprovação
1.2.26 Certifique-se de que o --etcd-cafile argumento está definido conforme apropriado Automatizado L1 Aprovação
1.2.27 Certifique-se de que o --encryption-provider-config argumento está definido conforme apropriado Manual L1 Depende do ambiente
1.2.28 Verifique se os provedores de criptografia estão configurados adequadamente Manual L1 Depende do ambiente
1.2.29 Certifique-se de que o Servidor de API use apenas Cifras Criptográficas Fortes Manual L1 Aprovação
1.3 Gerente de Controladoria
1.3.1 Certifique-se de que o --terminated-pod-gc-threshold argumento está definido conforme apropriado Manual L1 Aprovação
1.3.2 Verifique se o --profiling argumento está definido como false Automatizado L1 Aprovação
1.3.3 Certifique-se de que o --use-service-account-credentials argumento está definido como true Automatizado L1 Aprovação
1.3.4 Certifique-se de que o --service-account-private-key-file argumento está definido conforme apropriado Automatizado L1 Aprovação
1.3.5 Certifique-se de que o --root-ca-file argumento está definido conforme apropriado Automatizado L1 Aprovação
1.3.6 Verifique se o argumento RotateKubeletServerCertificate está definido como true Automatizado L2 Aprovação
1.3.7 Verifique se o --bind-address argumento está definido como 127.0.0.1 Automatizado L1 Controlo Equivalente
1.4 Agendador
1.4.1 Verifique se o --profiling argumento está definido como false Automatizado L1 Aprovação
1.4.2 Verifique se o --bind-address argumento está definido como 127.0.0.1 Automatizado L1 Controlo Equivalente
2 etcd
2.1 Certifique-se de que os --cert-file argumentos e --key-file são definidos conforme apropriado Automatizado L1 Aprovação
2.2 Certifique-se de que o --client-cert-auth argumento está definido como true Automatizado L1 Aprovação
2.3 Certifique-se de que o --auto-tls argumento não está definido como true Automatizado L1 Aprovação
2.4 Certifique-se de que os --peer-cert-file argumentos e --peer-key-file são definidos conforme apropriado Automatizado L1 Aprovação
2.5 Certifique-se de que o --peer-client-cert-auth argumento está definido como true Automatizado L1 Aprovação
2.6 Certifique-se de que o --peer-auto-tls argumento não está definido como true Automatizado L1 Aprovação
2,7 Certifique-se de que uma Autoridade de Certificação exclusiva seja usada para etcd Manual L2 Aprovação
3 Configuração do plano de controle
3.1 Autenticação e Autorização
3.1.1 A autenticação de certificado de cliente não deve ser usada para usuários Manual L1 Aprovação
3.1.2 A autenticação de token de conta de serviço não deve ser usada para usuários Manual L1 Aprovação
3.1.3 A autenticação de token de bootstrap não deve ser usada para usuários Manual L1 Aprovação
3.2 Registo
3.2.1 Garantir que uma política de auditoria mínima seja criada Manual L1 Aprovação
3.2.2 Garantir que a política de auditoria cobre as principais preocupações de segurança Manual L2 Aprovação
4 Nós de Trabalho
4.1 Arquivos de configuração do nó de trabalho
4.1.1 Verifique se as permissões do arquivo de serviço kubelet estão definidas como 600 ou mais restritivas Automatizado L1 Aprovação
4.1.2 Certifique-se de que a propriedade do arquivo de serviço kubelet esteja definida como root:root Automatizado L1 Aprovação
4.1.3 Se existir um arquivo kubeconfig proxy, verifique se as permissões estão definidas como 600 ou mais restritivas Manual L1 N/A
4.1.4 Se existir um arquivo kubeconfig proxy, verifique se a propriedade está definida como root:root Manual L1 N/A
4.1.5 Verifique se as permissões do --kubeconfig arquivo kubelet.conf estão definidas como 600 ou mais restritivas Automatizado L1 Aprovação
4.1.6 Verifique se a propriedade do --kubeconfig arquivo kubelet.conf está definida como root:root Automatizado L1 Aprovação
4.1.7 Verifique se as permissões de arquivo das autoridades de certificação estão definidas como 600 ou mais restritivas Manual L1 Aprovação
4.1.8 Verifique se a propriedade do arquivo das autoridades de certificação do cliente está definida como root:root Manual L1 Aprovação
4.1.9 Se o arquivo de configuração kubelet config.yaml estiver sendo usado, verifique as permissões definidas como 600 ou mais restritivas Automatizado L1 Aprovação
4.1.10 Se o arquivo de configuração kubelet config.yaml estiver sendo usado, verifique se a propriedade do arquivo está definida como root:root Automatizado L1 Aprovação
4.2 Kubelet
4.2.1 Verifique se o --anonymous-auth argumento está definido como false Automatizado L1 Aprovação
4.2.2 Verifique se o --authorization-mode argumento não está definido como AlwaysAllow Automatizado L1 Aprovação
4.2.3 Certifique-se de que o --client-ca-file argumento está definido conforme apropriado Automatizado L1 Aprovação
4.2.4 Verifique se o --read-only-port argumento está definido como 0 Manual L1 Aprovação
4.2.5 Certifique-se de que o --streaming-connection-idle-timeout argumento não está definido como 0 Manual L1 Aprovação
4.2.6 Certifique-se de que o --make-iptables-util-chains argumento está definido como true Automatizado L1 Aprovação
4.2.7 Certifique-se de que o --hostname-override argumento não está definido Manual L1 Aprovação
4.2.8 Certifique-se de que o --eventRecordQPS argumento esteja definido para um nível que garanta a captura de eventos apropriada Manual L2 Aprovação
4.2.9 Certifique-se de que os --tls-cert-file argumentos e --tls-private-key-file são definidos conforme apropriado Manual L1 Aprovação
4.2.10 Certifique-se de que o --rotate-certificates argumento não está definido como false Automatizado L1 Aprovação
4.2.11 Verifique se o argumento RotateKubeletServerCertificate está definido como true Manual L1 Reprovado
4.2.12 Certifique-se de que o Kubelet faça uso apenas de Cifras Criptográficas Fortes Manual L1 Aprovação
4.2.13 Certifique-se de que um limite está definido em PIDs pod Manual L1 Aprovação
4.3 kube-proxy
4.3.1 Certifique-se de que o serviço de métricas kube-proxy esteja vinculado ao localhost Automatizado L1 Aprovação
5 Políticas
5.1 RBAC e Contas de Serviço
5.1.1 Verifique se a função de administrador de cluster 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 curingas em Roles e ClusterRoles Automatizado L1 Depende do ambiente
5.1.4 Minimize o acesso para criar pods Automatizado L1 Depende do ambiente
5.1.5 Verifique se as contas de serviço padrão não são usadas ativamente Automatizado L1 Depende do ambiente
5.1.6 Certifique-se de que os Tokens de Conta de Serviço sejam montados apenas quando necessário Automatizado L1 Depende do ambiente
5.1.7 Evite o uso do 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 Minimize o acesso para criar volumes persistentes Manual L1 Depende do ambiente
5.1.10 Minimizar o acesso ao subrecurso proxy dos nós Manual L1 Depende do ambiente
5.1.11 Minimizar o acesso ao subrecurso de aprovação de objetos certificatesigningrequests Manual L1 Depende do ambiente
5.1.12 Minimizar o acesso a objetos de configuração do webhook Manual L1 Depende do ambiente
5.1.13 Minimizar o acesso à criação de token de conta de serviço Manual L1 Depende do ambiente
5,2 Padrões de Segurança do Pod
5.2.1 Verifique se o cluster tem pelo menos um mecanismo de controle de política ativa em vigor Manual L1 Depende do ambiente
5.2.2 Minimizar a admissão de contentores privilegiados Manual L1 Depende do ambiente
5.2.3 Minimize a admissão de contêineres que desejam compartilhar o namespace de ID do processo do host Manual L1 Depende do ambiente
5.2.4 Minimizar a admissão de contêineres que desejam compartilhar o namespace IPC do host Manual L1 Depende do ambiente
5.2.5 Minimizar a admissão de contêineres que desejam compartilhar o namespace de rede do host Manual L1 Depende do ambiente
5.2.6 Minimize a admissão de contêineres com allowPrivilegeEscalation Manual L1 Depende do ambiente
5.2.7 Minimizar a admissão de recipientes raiz Manual L2 Depende do ambiente
5.2.8 Minimizar a admissão de contentores com a capacidade NET_RAW Manual L1 Depende do ambiente
5.2.9 Minimize a admissão de contêineres com recursos adicionais Manual L1 Depende do ambiente
5.2.10 Minimizar a admissão de contêineres com recursos atribuídos Manual L2 Depende do ambiente
5.2.11 Minimizar a admissão de contêineres do Windows HostProcess Manual L1 Depende do ambiente
5.2.12 Minimizar a admissão de volumes do HostPath Manual L1 Depende do ambiente
5.2.13 Minimizar a admissão de contêineres que usam HostPorts Manual L1 Depende do ambiente
5.3 Políticas de Rede e CNI
5.3.1 Garantir que a CNI em uso ofereça suporte às Políticas de Rede Manual L1 Aprovação
5.3.2 Verifique se todos os namespaces têm políticas de rede definidas Manual L2 Depende do ambiente
5.4 Gestão de segredos
5.4.1 Prefira usar segredos como arquivos em vez de segredos como variáveis de ambiente Manual L2 Depende do ambiente
5.4.2 Considere o armazenamento de segredos externos Manual L2 Depende do ambiente
5,5 Controlo de admissão extensível
5.5.1 Configurar a proveniência da imagem 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 Verifique se o perfil seccomp está definido como docker/default nas definições do pod Manual L2 Depende do ambiente
5.6.3 Aplique o contexto de segurança aos 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

Nota

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

Notas adicionais

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

Próximos passos

Para obter mais informações sobre a segurança do AKS, consulte os seguintes artigos: