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:
Azure Kubernetes Service