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.8.0 sobre AKS. Os resultados são aplicáveis ao AKS 1.21.x através do AKS 1.27.x.

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

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.

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

  • Passe - A recomendação foi aplicada.
  • Reprovado - A recomendação não foi aplicada.
  • N/A - A recomendação refere-se aos requisitos de permissão de 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 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 pontuadas afetam a pontuação de referência, quer a recomendação se aplique ao ambiente específico do usuário ou não.
  • Controle equivalente - A recomendação foi implementada de maneira diferente e equivalente .
CIS ID Descrição da recomendação Tipo de pontuaçã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 Pontuação 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 Pontuação 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 Pontuação 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 Pontuação 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 Pontuação 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 Pontuação 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 Pontuação 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 Pontuação 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 Não pontuado L1 N/A
1.1.10 Verifique se a propriedade do arquivo da Interface de Rede de Contêiner está definida como root:root Não pontuado 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 Pontuação L1 N/A
1.1.12 Certifique-se de que a propriedade do diretório de dados etcd esteja definida como etcd:etcd Pontuação L1 N/A
1.1.13 Verifique se as permissões do arquivo admin.conf estão definidas como 600 ou mais restritivas Pontuação L1 N/A
1.1.14 Verifique se a propriedade do arquivo admin.conf está definida como root:root Pontuação L1 N/A
1.1.15 Verifique se as permissões do arquivo scheduler.conf estão definidas como 600 ou mais restritivas Pontuação L1 N/A
1.1.16 Verifique se a propriedade do arquivo scheduler.conf está definida como root:root Pontuação L1 N/A
1.1.17 Verifique se as permissões do arquivo controller-manager.conf estão definidas como 600 ou mais restritivas Pontuação L1 N/A
1.1.18 Verifique se a propriedade do arquivo controller-manager.conf está definida como root:root Pontuação 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 Pontuação 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 Pontuação L1 N/A
1.1.21 Verifique se as permissões do arquivo de chave PKI do Kubernetes estão definidas como 600 Pontuação L1 N/A
1.2 Servidor de API
1.2.1 Verifique se o --anonymous-auth argumento está definido como false Não pontuado L1 Aprovação
1.2.2 Certifique-se de que o --token-auth-file parâmetro não está definido Pontuação L1 Reprovado
1.2.3 Certifique-se de que --DenyServiceExternalIPs não está definido Pontuação L1 Reprovado
1.2.4 Certifique-se de que os --kubelet-client-certificate argumentos e --kubelet-client-key são definidos conforme apropriado Pontuação L1 Aprovação
1.2.5 Certifique-se de que o --kubelet-certificate-authority argumento está definido conforme apropriado Pontuação L1 Reprovado
1.2.6 Verifique se o --authorization-mode argumento não está definido como AlwaysAllow Pontuação L1 Aprovação
1.2.7 Certifique-se de que o --authorization-mode argumento inclui Node Pontuação L1 Aprovação
1.2.8 Certifique-se de que o --authorization-mode argumento inclui RBAC Pontuação L1 Aprovação
1.2.9 Certifique-se de que o plug-in de controle de admissão EventRateLimit esteja definido Não pontuado L1 Reprovado
1.2.10 Certifique-se de que o plug-in de controle de admissão AlwaysAdmit não está definido Pontuação L1 Aprovação
1.2.11 Certifique-se de que o plug-in de controle de admissão AlwaysPullImages está definido Não pontuado L1 Reprovado
1.2.12 Certifique-se de que o plug-in de controle de admissão SecurityContextDeny esteja definido se PodSecurityPolicy não for usado Não pontuado L1 Reprovado
1.2.13 Certifique-se de que o plug-in de controle de admissão ServiceAccount está definido Pontuação L1 Aprovação
1.2.14 Certifique-se de que o plug-in de controle de admissão NamespaceLifecycle esteja definido Pontuação L1 Aprovação
1.2.15 Certifique-se de que o plug-in de controle de admissão NodeRestriction esteja definido Pontuação L1 Aprovação
1.2.16 Certifique-se de que o --secure-port argumento não está definido como 0 Pontuação L1 Aprovação
1.2.17 Verifique se o --profiling argumento está definido como false Pontuação L1 Aprovação
1.2.18 Certifique-se de que o --audit-log-path argumento está definido Pontuação L1 Controlo Equivalente
1.2.19 Certifique-se de que o --audit-log-maxage argumento está definido como 30 ou conforme apropriado Pontuação L1 Controlo Equivalente
1.2.20 Certifique-se de que o --audit-log-maxbackup argumento está definido como 10 ou conforme apropriado Pontuação L1 Aprovação
1.2.21 Certifique-se de que o --audit-log-maxsize argumento está definido como 100 ou conforme apropriado Pontuação L1 Aprovação
1.2.22 Certifique-se de que o --request-timeout argumento está definido conforme apropriado Pontuação L1 Aprovação
1.2.23 Certifique-se de que o --service-account-lookup argumento está definido como true Pontuação L1 Aprovação
1.2.24 Certifique-se de que o --service-account-key-file argumento está definido conforme apropriado Pontuação L1 Aprovação
1.2.25 Certifique-se de que os --etcd-certfile argumentos e --etcd-keyfile são definidos conforme apropriado Pontuação L1 Aprovação
1.2.26 Certifique-se de que os --tls-cert-file argumentos e --tls-private-key-file são definidos conforme apropriado Pontuação L1 Aprovação
1.2.27 Certifique-se de que o --client-ca-file argumento está definido conforme apropriado Pontuação L1 Aprovação
1.2.28 Certifique-se de que o --etcd-cafile argumento está definido conforme apropriado Pontuação L1 Depende do ambiente
1.2.29 Certifique-se de que o --encryption-provider-config argumento está definido conforme apropriado Pontuação L1 Depende do ambiente
1.2.30 Verifique se os provedores de criptografia estão configurados adequadamente Pontuação L1 Depende do ambiente
1.2.31 Certifique-se de que o Servidor de API use apenas Cifras Criptográficas Fortes Não pontuado 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 Pontuação L1 Aprovação
1.3.2 Verifique se o --profiling argumento está definido como false Pontuação L1 Aprovação
1.3.3 Certifique-se de que o --use-service-account-credentials argumento está definido como true Pontuação L1 Aprovação
1.3.4 Certifique-se de que o --service-account-private-key-file argumento está definido conforme apropriado Pontuação L1 Aprovação
1.3.5 Certifique-se de que o --root-ca-file argumento está definido conforme apropriado Pontuação L1 Aprovação
1.3.6 Verifique se o argumento RotateKubeletServerCertificate está definido como true Pontuação L2 Reprovado
1.3.7 Verifique se o --bind-address argumento está definido como 127.0.0.1 Pontuação L1 Controlo Equivalente
1.4 Agendador
1.4.1 Verifique se o --profiling argumento está definido como false Pontuação L1 Aprovação
1.4.2 Verifique se o --bind-address argumento está definido como 127.0.0.1 Pontuação L1 Controlo Equivalente
2 etcd
2.1 Certifique-se de que os --cert-file argumentos e --key-file são definidos conforme apropriado Pontuação L1 Aprovação
2.2 Certifique-se de que o --client-cert-auth argumento está definido como true Pontuação L1 Aprovação
2.3 Certifique-se de que o --auto-tls argumento não está definido como true Pontuação L1 Aprovação
2.4 Certifique-se de que os --peer-cert-file argumentos e --peer-key-file são definidos conforme apropriado Pontuação L1 Aprovação
2.5 Certifique-se de que o --peer-client-cert-auth argumento está definido como true Pontuação L1 Aprovação
2.6 Certifique-se de que o --peer-auto-tls argumento não está definido como true Pontuação L1 Aprovação
2,7 Certifique-se de que uma Autoridade de Certificação exclusiva seja usada para etcd Não pontuado 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 Não pontuado L2 Aprovação
3.1.2 A autenticação de token de conta de serviço não deve ser usada para usuários Não pontuado L2 Aprovação
3.1.3 A autenticação de token de bootstrap não deve ser usada para usuários Não pontuado L2 Aprovação
3.2 Registo
3.2.1 Garantir que uma política de auditoria mínima seja criada Pontuação L1 Aprovação
3.2.2 Garantir que a política de auditoria cobre as principais preocupações de segurança Não pontuado 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 Pontuação L1 Aprovação
4.1.2 Certifique-se de que a propriedade do arquivo de serviço kubelet esteja definida como root:root Pontuação 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 Pontuação L1 N/A
4.1.4 Se existir um arquivo kubeconfig proxy, verifique se a propriedade está definida como root:root Pontuação L1 N/A
4.1.5 Verifique se as permissões do --kubeconfig arquivo kubelet.conf estão definidas como 600 ou mais restritivas Pontuação L1 Aprovação
4.1.6 Verifique se a propriedade do --kubeconfig arquivo kubelet.conf está definida como root:root Pontuação 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 Pontuação L1 Aprovação
4.1.8 Verifique se a propriedade do arquivo das autoridades de certificação do cliente está definida como root:root Pontuação 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 Pontuação 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 Pontuação L1 Aprovação
4.2 Kubelet
4.2.1 Verifique se o --anonymous-auth argumento está definido como false Pontuação L1 Aprovação
4.2.2 Verifique se o --authorization-mode argumento não está definido como AlwaysAllow Pontuação L1 Aprovação
4.2.3 Certifique-se de que o --client-ca-file argumento está definido conforme apropriado Pontuação L1 Aprovação
4.2.4 Verifique se o --read-only-port argumento está definido como 0 Pontuação L1 Aprovação
4.2.5 Certifique-se de que o --streaming-connection-idle-timeout argumento não está definido como 0 Pontuação L1 Aprovação
4.2.6 Certifique-se de que o --protect-kernel-defaults argumento está definido como true Pontuação L1 Aprovação
4.2.7 Certifique-se de que o --make-iptables-util-chains argumento está definido como true Pontuação L1 Aprovação
4.2.8 Certifique-se de que o --hostname-override argumento não está definido Não pontuado L1 Aprovação
4.2.9 Certifique-se de que o argumento eventRecordQPS esteja definido para um nível que garanta a captura de eventos apropriada Não pontuado L2 Aprovação
4.2.10 Certifique-se de que os --tls-cert-fileargumentos e --tls-private-key-file são definidos conforme apropriado Pontuação L1 Aprovação
4.2.11 Certifique-se de que o --rotate-certificates argumento não está definido como false Pontuação L1 Aprovação
4.2.12 Verifique se o argumento RotateKubeletServerCertificate está definido como true Pontuação L1 Aprovação
4.2.13 Certifique-se de que o Kubelet faça uso apenas de Cifras Criptográficas Fortes Não pontuado 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 Não pontuado L1 Depende do ambiente
5.1.2 Minimizar o acesso a segredos Não pontuado L1 Depende do ambiente
5.1.3 Minimizar o uso de curingas em Roles e ClusterRoles Não pontuado L1 Depende do ambiente
5.1.4 Minimize o acesso para criar pods Não pontuado L1 Depende do ambiente
5.1.5 Verifique se as contas de serviço padrão não são usadas ativamente Pontuação L1 Depende do ambiente
5.1.6 Certifique-se de que os Tokens de Conta de Serviço sejam montados apenas quando necessário Não pontuado L1 Depende do ambiente
5.1.7 Evite o uso do grupo system:masters Não pontuado L1 Depende do ambiente
5.1.8 Limitar o uso das permissões Bind, Impersonate e Escalate no cluster do Kubernetes Não pontuado L1 Depende do ambiente
5.1.9 Minimize o acesso para criar volumes persistentes Não pontuado L1 Depende do ambiente
5.1.10 Minimizar o acesso ao subrecurso proxy dos nós Não pontuado L1 Depende do ambiente
5.1.11 Minimizar o acesso ao subrecurso de aprovação de objetos certificatesigningrequests Não pontuado L1 Depende do ambiente
5.1.12 Minimizar o acesso a objetos de configuração do webhook Não pontuado L1 Depende do ambiente
5.1.13 Minimizar o acesso à criação de token de conta de serviço Não pontuado L1 Depende do ambiente
5,2 Políticas 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 Não pontuado L1 Depende do ambiente
5.2.2 Minimizar a admissão de contentores privilegiados Não pontuado 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 Pontuação L1 Depende do ambiente
5.2.4 Minimizar a admissão de contêineres que desejam compartilhar o namespace IPC do host Pontuação L1 Depende do ambiente
5.2.5 Minimizar a admissão de contêineres que desejam compartilhar o namespace de rede do host Pontuação L1 Depende do ambiente
5.2.6 Minimize a admissão de contêineres com allowPrivilegeEscalation Pontuação L1 Depende do ambiente
5.2.6 Minimizar a admissão de recipientes raiz Não pontuado L2 Depende do ambiente
5.2.7 Minimizar a admissão de contentores com a capacidade NET_RAW Não pontuado L1 Depende do ambiente
5.2.8 Minimize a admissão de contêineres com recursos adicionais Não pontuado L1 Depende do ambiente
5.2.9 Minimizar a admissão de contêineres com recursos atribuídos Não pontuado L1 Depende do ambiente
5.2.10 Minimizar a admissão de contêineres com recursos atribuídos Não pontuado L2
5.2.11 Minimizar a admissão de contêineres do Windows HostProcess Não pontuado L1 Depende do ambiente
5.2.12 Minimizar a admissão de volumes do HostPath Não pontuado L1 Depende do ambiente
5.2.13 Minimizar a admissão de contêineres que usam HostPorts Não pontuado 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 Não pontuado L1 Aprovação
5.3.2 Verifique se todos os namespaces têm políticas de rede definidas Pontuação 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 Não pontuado L1 Depende do ambiente
5.4.2 Considere o armazenamento de segredos externos Não pontuado 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 Não pontuado L2 Reprovado
5.7 Políticas Gerais
5.7.1 Criar limites administrativos entre recursos usando namespaces Não pontuado L1 Depende do ambiente
5.7.2 Verifique se o perfil seccomp está definido como docker/default nas definições do pod Não pontuado L2 Depende do ambiente
5.7.3 Aplique o contexto de segurança aos seus pods e contêineres Não pontuado L2 Depende do ambiente
5.7.4 O namespace padrão não deve ser usado Pontuação 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 foram desativados no sistema operacional.

Próximos passos

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