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-file argumentos 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:
Azure Kubernetes Service
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários