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

Veja a seguir os resultados das recomendações do CIS Kubernetes V1.27 Benchmark v1.8.0 no AKS. Os resultados são aplicáveis ao AKS 1.21.x pelo AKS 1.27.x.

As recomendações Pontuadas afetam a pontuação do parâmetro de comparação se não forem aplicadas, enquanto as recomendações Não pontuadas não.

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.

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

  • Aprovado - a recomendação foi aplicada.
  • Reprovada: 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 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. As recomendações com pontuação afetam a pontuação do benchmark, quer a recomendação se aplique ou não ao ambiente específico do usuário.
  • Controle equivalente – a recomendação foi implementada de maneira diferente e equivalente.
ID do CIS Descrição da recomendação Tipo de pontuaçã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 Com pontuação 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 Com pontuação 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 Com pontuação 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 Com pontuação 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 Com pontuação L1 N/D
1.1.6 Verificar se a propriedade do arquivo especificação de pod do agendador está definida como root:root Com pontuação 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 Com pontuação L1 N/D
1.1.8 Verificar se a propriedade do arquivo especificação de pod do etcd está definida como root:root Com pontuação 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 Sem pontuação L1 N/D
1.1.10 Verificar se a propriedade do arquivo adaptador de rede de contêiner está definida como root:root Sem pontuação 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 Com pontuação L1 N/D
1.1.12 Verificar se a propriedade do diretório de dados do etcd está definida como etcd:etcd Com pontuação 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 Com pontuação L1 N/D
1.1.14 Verificar se a propriedade do arquivo admin.conf está definida como root:root Com pontuação 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 Com pontuação L1 N/D
1.1.16 Verificar se a propriedade do arquivo scheduler.conf está definida como root:root Com pontuação 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 Com pontuação L1 N/D
1.1.18 Verificar se a propriedade do arquivo controller-manager.conf está definida como root:root Com pontuação L1 N/D
1.1.19 Verificar se a propriedade do arquivo e do diretório PKI do Kubernetes está definida como root:root Com pontuação 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 Com pontuação L1 N/D
1.1.21 Verificar se as permissões do arquivo chave PKI do Kubernetes estão definidas como 600 Com pontuação L1 N/D
1,2 Servidor de API
1.2.1 Verificar se o argumento --anonymous-auth está definido como false Sem pontuação L1 Aprovado
1.2.2 Verificar se o parâmetro --token-auth-file não está definido Com pontuação L1 Falha
1.2.3 Verificar se --DenyServiceExternalIPs não está definido Com pontuação L1 Falha
1.2.4 Verificar se os argumentos --kubelet-client-certificate e --kubelet-client-key estão definidos conforme apropriado Com pontuação L1 Aprovado
1.2.5 Verificar se o argumento --kubelet-certificate-authority está definido conforme apropriado Com pontuação L1 Falha
1.2.6 Verificar se o argumento --authorization-mode não está definido AlwaysAllow Com pontuação L1 Aprovado
1.2.7 Verificar se o argumento --authorization-mode inclui o Node Com pontuação L1 Aprovado
1.2.8 Verificar se o argumento --authorization-mode inclui o RBAC Com pontuação L1 Aprovado
1.2.9 Verificar se o plug-in de controle de admissão EventRateLimit está definido Sem pontuação L1 Falha
1.2.10 Verificar se o plug-in de controle de admissão AlwaysAdmit não está definido Com pontuação L1 Aprovado
1.2.11 Verificar se plug-in de controle de admissão AlwaysPullImages está definido Sem pontuação L1 Falha
1.2.12 Verificar se o plug-in de controle de admissão SecurityContextDeny está definido se PodSecurityPolicy não for usado Sem pontuação L1 Falha
1.2.13 Verificar se o plug-in de controle de admissão ServiceAccount está definido Com pontuação L1 Aprovado
1.2.14 Verificar se o plug-in de controle de admissão NamespaceLifecycle está definido Com pontuação L1 Aprovado
1.2.15 Verificar se o plug-in de controle de admissão NodeRestriction está definido Com pontuação L1 Aprovado
1.2.16 Verificar se o argumento --secure-port não está definido como 0 Com pontuação L1 Aprovado
1.2.17 Verificar se o argumento --profiling está definido como false Com pontuação L1 Aprovado
1.2.18 Verificar se o argumento --audit-log-path está definido Com pontuação L1 Controle equivalente
1.2.19 Verificar se o argumento --audit-log-maxage está definido como 30 ou conforme apropriado Com pontuação L1 Controle equivalente
1.2.20 Verificar se o argumento --audit-log-maxbackup está definido como 10 ou conforme apropriado Com pontuação L1 Aprovado
1.2.21 Verificar se o argumento --audit-log-maxsize está definido como 100 ou conforme apropriado Com pontuação L1 Aprovado
1.2.22 Verificar se o argumento --request-timeout está definido conforme apropriado Com pontuação L1 Aprovado
1.2.23 Verificar se o argumento --service-account-lookup está definido como true Com pontuação L1 Aprovado
1.2.24 Verificar se o argumento --service-account-key-file está definido conforme apropriado Com pontuação L1 Aprovado
1.2.25 Verificar se os argumentos --etcd-certfile e --etcd-keyfile estão definidos conforme apropriado Com pontuação L1 Aprovado
1.2.26 Verificar se os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme apropriado Com pontuação L1 Aprovado
1.2.27 Verificar se o argumento --client-ca-file está definido conforme apropriado Com pontuação L1 Aprovado
1.2.28 Verificar se o argumento --etcd-cafile está definido conforme apropriado Com pontuação L1 Depende do ambiente
1.2.29 Verificar se o argumento --encryption-provider-config está definido conforme apropriado Com pontuação L1 Depende do ambiente
1.2.30 Verificar se os provedores de criptografia estão configurados adequadamente Com pontuação L1 Depende do ambiente
1.2.31 Verificar se o servidor de API usa apenas codificações criptográficas fortes Sem pontuação L1 Aprovado
1,3 Gerenciador do controlador
1.3.1 Verificar se o argumento --terminated-pod-gc-threshold está definido conforme apropriado Com pontuação L1 Aprovado
1.3.2 Verificar se o argumento --profiling está definido como false Com pontuação L1 Aprovado
1.3.3 Verificar se o argumento --use-service-account-credentials está definido como true Com pontuação L1 Aprovado
1.3.4 Verificar se o argumento --service-account-private-key-file está definido conforme apropriado Com pontuação L1 Aprovado
1.3.5 Verificar se o argumento --root-ca-file está definido conforme apropriado Com pontuação L1 Aprovado
1.3.6 Verificar se o argumento RotateKubeletServerCertificate está definido como true Com pontuação L2 Falha
1.3.7 Verificar se o argumento --bind-address está definido como 127.0.0.1 Com pontuação L1 Controle equivalente
1.4 Agendador
1.4.1 Verificar se o argumento --profiling está definido como false Com pontuação L1 Aprovado
1.4.2 Verificar se o argumento --bind-address está definido como 127.0.0.1 Com pontuação L1 Controle equivalente
2 etcd
2.1 Verificar se os argumentos --cert-file e --key-file estão definidos conforme apropriado Com pontuação L1 Aprovado
2.2 Verificar se o argumento --client-cert-auth está definido como true Com pontuação L1 Aprovado
2.3 Verificar se o argumento --auto-tls não está definido como true Com pontuação L1 Aprovado
2.4 Verificar se os argumentos --peer-cert-file e --peer-key-file estão definidos conforme apropriado Com pontuação L1 Aprovado
2.5 Verificar se o argumento --peer-client-cert-auth está definido como true Com pontuação L1 Aprovado
2.6 Verificar se o argumento --peer-auto-tls não está definido como true Com pontuação L1 Aprovado
2.7 Verificar se uma autoridade de certificação exclusiva é usada para o etcd Sem pontuação 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 Sem pontuação L2 Aprovado
3.1.2 A autenticação do token da conta de serviço não deve ser usada para os usuários Sem pontuação L2 Aprovado
3.1.3 A autenticação do token de inicialização não deve ser usada para os usuários Sem pontuação L2 Aprovado
3.2 Log
3.2.1 Verificar se uma política de auditoria mínima é criada Com pontuação L1 Aprovado
3.2.2 Verificar se a política de auditoria abrange as principais preocupações de segurança Sem pontuação 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 Com pontuação L1 Aprovado
4.1.2 Verificar se a propriedade do arquivo serviço Kubelet está definida como root:root Com pontuação 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 Com pontuação L1 N/D
4.1.4 Se o arquivo kubeconfig do proxy existir, verifique se a propriedade está definida como root:root Com pontuação 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 Com pontuação L1 Aprovado
4.1.6 Verificar se a propriedade do arquivo --kubeconfig kubelet.conf está definida como root:root Com pontuação 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 Com pontuação L1 Aprovado
4.1.8 Verificar se a propriedade do arquivo autoridades de certificação do cliente está definida como root:root Com pontuação 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 Com pontuação 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 Com pontuação L1 Aprovado
4.2 Kubelet
4.2.1 Verificar se o argumento --anonymous-auth está definido como false Com pontuação L1 Aprovado
4.2.2 Verificar se o argumento --authorization-mode não está definido AlwaysAllow Com pontuação L1 Aprovado
4.2.3 Verificar se o argumento --client-ca-file está definido conforme apropriado Com pontuação L1 Aprovado
4.2.4 Verificar se o argumento --read-only-port está definido como 0 Com pontuação L1 Aprovado
4.2.5 Verificar se o argumento --streaming-connection-idle-timeout não está definido como 0 Com pontuação L1 Aprovado
4.2.6 Verificar se o argumento --protect-kernel-defaults está definido como true Com pontuação L1 Aprovado
4.2.7 Verificar se o argumento --make-iptables-util-chains está definido como true Com pontuação L1 Aprovado
4.2.8 Verificar se o argumento --hostname-override não está definido Sem pontuação L1 Aprovado
4.2.9 Verificar se o argumento eventRecordQPS está definido com um nível que garanta a captura adequada de eventos Sem pontuação L2 Aprovado
4.2.10 Verificar se os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme apropriado Com pontuação L1 Aprovado
4.2.11 Verificar se o argumento --rotate-certificates não está definido como false Com pontuação L1 Aprovado
4.2.12 Verificar se o argumento RotateKubeletServerCertificate está definido como true Com pontuação L1 Aprovado
4.2.13 Verificar se o Kubelet usa apenas codificações criptográficas fortes Sem pontuação 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 Sem pontuação L1 Depende do ambiente
5.1.2 Minimizar o acesso a segredos Sem pontuação L1 Depende do ambiente
5.1.3 Minimizar o uso de curinga em Roles e ClusterRoles Sem pontuação L1 Depende do ambiente
5.1.4 Minimizar o acesso para criar pods Sem pontuação L1 Depende do ambiente
5.1.5 Verificar se as contas de serviço padrão não são usadas ativamente Com pontuação L1 Depende do ambiente
5.1.6 Verificar se os tokens da conta de serviço só são montados quando necessário Sem pontuação L1 Depende do ambiente
5.1.7 Evitar usar o grupo system:masters Sem pontuação L1 Depende do ambiente
5.1.8 Limitar o uso das permissões Bind, Impersonate e Escalate no cluster do Kubernetes Sem pontuação L1 Depende do ambiente
5.1.9 Minimizar o acesso para criar volumes persistentes Sem pontuação L1 Depende do ambiente
5.1.10 Minimizar o acesso ao sub-recurso do proxy de nós Sem pontuação L1 Depende do ambiente
5.1.11 Minimizar o acesso ao sub-recurso de aprovação dos objetos certificatesigningrequests Sem pontuação L1 Depende do ambiente
5.1.12 Minimizar o acesso aos objetos de configuração do webhook Sem pontuação L1 Depende do ambiente
5.1.13 Minimizar o acesso à criação do token da conta de serviço Sem pontuação L1 Depende do ambiente
5.2 Política 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 Sem pontuação L1 Depende do ambiente
5.2.2 Minimizar a admissão de contêineres privilegiados Sem pontuação 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 Com pontuação L1 Depende do ambiente
5.2.4 Minimizar a admissão de contêineres que desejam compartilhar o namespace do IPC do host Com pontuação L1 Depende do ambiente
5.2.5 Minimizar a admissão de contêineres que desejam compartilhar o namespace da rede do host Com pontuação L1 Depende do ambiente
5.2.6 Minimizar a admissão de contêineres com allowPrivilegeEscalation Com pontuação L1 Depende do ambiente
5.2.6 Minimizar a admissão de contêineres raiz Sem pontuação L2 Depende do ambiente
5.2.7 Minimizar a admissão de contêineres com a funcionalidade NET_RAW Sem pontuação L1 Depende do ambiente
5.2.8 Minimizar a admissão de contêineres com funcionalidades adicionadas Sem pontuação L1 Depende do ambiente
5.2.9 Minimizar a admissão de contêineres com funcionalidades atribuídas Sem pontuação L1 Depende do ambiente
5.2.10 Minimizar a admissão de contêineres com funcionalidades atribuídas Sem pontuação L2
5.2.11 Minimizar a admissão dos Contêineres do HostProcess do Windows Sem pontuação L1 Depende do ambiente
5.2.12 Minimizar a admissão dos volumes do HostPath Sem pontuação L1 Depende do ambiente
5.2.13 Minimizar a admissão dos contêineres que usam HostPorts Sem pontuação 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 Sem pontuação L1 Aprovado
5.3.2 Verificar se todos os namespaces têm políticas de rede definidas Com pontuação 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 Sem pontuação L1 Depende do ambiente
5.4.2 Considerar o armazenamento de segredo externo Sem pontuação 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 Sem pontuação L2 Falha
5.7 Políticas gerais
5.7.1 Criar limites administrativos entre recursos usando namespaces Sem pontuação L1 Depende do ambiente
5.7.2 Verificar se o perfil seccomp está definido como docker/padrão em suas definições de pod Sem pontuação L2 Depende do ambiente
5.7.3 Aplicar contexto de segurança a seus pods e contêineres Sem pontuação L2 Depende do ambiente
5.7.4 O namespace padrão não deve ser usado Com pontuação 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 de kernel desnecessários foram desabilitados no sistema operacional.

Próximas etapas

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