Compartilhar via


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 Benchmark v1.12.0 no AKS. Os resultados são aplicáveis ao AKS 1.32.x até o AKS 1.34.x. Para linhas do tempo de suporte, consulte versões do Kubernetes com suporte.

Observação

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

Níveis de segurança

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.

Status da avaliação

Um status de avaliação é incluído para cada recomendação. O status da avaliação indica se a recomendação fornecida pode ser automatizada ou requer etapas manuais para ser implementada. Ambos os status são igualmente importantes e são determinados e suportados da seguinte maneira:

  • 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 incluem 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 afetarão a pontuação do benchmark se não forem aplicadas e as recomendações Manuais não afetarão.

Status do atestado

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

  • Aprovação: 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 do 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 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 Automáticas 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.

Detalhes do benchmark

ID do CIS Descrição da recomendação Status da avaliação Nível Status Motivo
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 Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.2 Verificar se a propriedade do arquivo especificação de pod do servidor de API está definida como root: root Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
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 Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.4 Verificar se a propriedade do arquivo especificação de pod do gerenciador do controlador está definida como root: root Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
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 Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.6 Verificar se a propriedade do arquivo especificação de pod do agendador está definida como root: root Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
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 Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.8 Verificar se a propriedade do arquivo especificação de pod do etcd está definida como root: root Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
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 Manual L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.10 Verificar se a propriedade do arquivo adaptador de rede de contêiner está definida como root: root Manual L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.11 Verificar se as permissões do diretório de dados do etcd estão definidas como 700 ou mais restritivas Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.12 Verificar se a propriedade do diretório de dados do etcd está definida como etcd:etcd Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.13 Verificar se as permissões do arquivo admin.conf estão definidas como 600 ou com uma opção mais restritiva Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.14 Verificar se a propriedade do arquivo admin.conf está definida como root: root Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.15 Verificar se as permissões do arquivo scheduler.conf estão definidas como 600 ou com uma opção mais restritiva Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.16 Verificar se a propriedade do arquivo scheduler.conf está definida como root: root Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
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 Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.18 Verificar se a propriedade do arquivo controller-manager.conf está definida como root: root Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.19 Verificar se a propriedade do arquivo e do diretório PKI do Kubernetes está definida como root: root Automatizados L1 N/D N/A porque o AKS é uma solução gerenciada
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 Manual L1 N/D N/A porque o AKS é uma solução gerenciada
1.1.21 Verificar se as permissões do arquivo chave PKI do Kubernetes estão definidas como 600 Manual L1 N/D N/A porque o AKS é uma solução gerenciada
1.2 Servidor de API
1.2.1 Verificar se o argumento --anonymous-auth está definido como false Manual L1 Aprovado
1.2.2 Verificar se o parâmetro --token-auth-file não está definido Automatizados L1 Falha Girado automaticamente pelo AKS, o parâmetro atualmente é definido
1.2.3 Verifique se isso --DenyServiceExternalIPs não está definido Manual L1 Falha Os clientes podem usar o Azure Policy para Kubernetes para negar serviços com IP externo.
1.2.4 Verificar se os argumentos --kubelet-client-certificate e --kubelet-client-key estão definidos conforme apropriado Automatizados L1 Aprovado
1.2.5 Verificar se o argumento --kubelet-certificate-authority está definido conforme apropriado Automatizados L1 Falha O certificado de serviço kubelet usa certificado autoassinado
1.2.6 Verificar se o argumento --authorization-mode está definido como AlwaysAllow Automatizados L1 Aprovado
1.2.7 Verificar se o argumento --authorization-mode inclui o Node Automatizados L1 Aprovado
1.2.8 Verificar se o argumento --authorization-mode inclui o RBAC Automatizados L1 Aprovado
1.2.9 Verificar se o plug-in de controle de admissão EventRateLimit está definido Manual L1 Falha Impacto operacional
1.2.10 Verificar se o plug-in de controle de admissão AlwaysAdmit não está definido Automatizados L1 Aprovado
1.2.11 Verificar se plug-in de controle de admissão AlwaysPullImages está definido Manual L1 Falha Impacto operacional
1.2.12 Verificar se o plug-in de controle de admissão ServiceAccount está definido Automatizados L2 Aprovado
1.2.13 Verificar se o plug-in de controle de admissão NamespaceLifecycle está definido Automatizados L2 Aprovado
1.2.14 Verificar se o plug-in de controle de admissão NodeRestriction está definido Automatizados L2 Aprovado
1.2.15 Verificar se o argumento --profiling está definido como false Automatizados L1 Aprovado
1.2.16 Verificar se o argumento --audit-log-path está definido Automatizados L1 Aprovado
1.2.17 Verificar se o argumento --audit-log-maxage está definido como 30 ou conforme apropriado Automatizados L1 Controle equivalente O AKS armazena o log de auditoria por 14 dias, Deployment.yaml tem o valor 0.
1.2.18 Verificar se o argumento --audit-log-maxbackup está definido como 10 ou conforme apropriado Automatizados L1 Controle equivalente O AKS armazena o log de auditoria por 14 dias, Deployment.yaml tem o valor 0.
1.2.19 Verificar se o argumento --audit-log-maxsize está definido como 100 ou conforme apropriado Automatizados L1 Aprovado
1.2.20 Verificar se o argumento --request-timeout está definido conforme apropriado Manual L1 Aprovado O parâmetro não está definido, o que definirá o valor padrão = 60s (que é compatível)
1.2.21 Verificar se o argumento --service-account-lookup está definido como true Automatizados L1 Aprovado O parâmetro não está definido, o que definirá o valor padrão como true (que está em conformidade)
1.2.22 Verificar se o argumento --service-account-key-file está definido conforme apropriado Automatizados L1 Aprovado
1.2.23 Verificar se os argumentos --etcd-certfile e --etcd-keyfile estão definidos conforme apropriado Automatizados L1 Aprovado
1.2.24 Verificar se os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme apropriado Automatizados L1 Aprovado
1.2.25 Verificar se o argumento --client-ca-file está definido conforme apropriado Automatizados L1 Aprovado
1.2.26 Verificar se o argumento --etcd-cafile está definido conforme apropriado Automatizados L1 Aprovado
1.2.27 Verificar se o argumento --encryption-provider-config está definido conforme apropriado Manual L1 Depende do ambiente O argumento é definido quando o KMS do Azure está habilitado
1.2.28 Verificar se os provedores de criptografia estão configurados adequadamente Manual L1 Depende do ambiente O argumento é definido quando o KMS do Azure está habilitado
1.2.29 Verificar se o servidor de API usa apenas codificações criptográficas fortes Manual L1 Aprovado O AKS dá suporte a um subconjunto de 4 ciphersuites fortes de 21 recomendados do CIS
1.2.30 Verificar se o parâmetro --service-account-extend-token-expiration está definido como false Automatizados L1 Depende do ambiente Esse parâmetro é definido como false quando o OIDC está habilitado no cluster
1,3 Gerenciador do controlador
1.3.1 Verificar se o argumento --terminated-pod-gc-threshold está definido conforme apropriado Manual L1 Aprovado O AKS define o valor padrão como 6000 em vez de 12500
1.3.2 Verificar se o argumento --profiling está definido como false Automatizados L1 Aprovado
1.3.3 Verificar se o argumento --use-service-account-credentials está definido como true Automatizados L1 Aprovado
1.3.4 Verificar se o argumento --service-account-private-key-file está definido conforme apropriado Automatizados L1 Aprovado
1.3.5 Verificar se o argumento --root-ca-file está definido conforme apropriado Automatizados L1 Aprovado
1.3.6 Verificar se o argumento RotateKubeletServerCertificate está definido como true Automatizados L2 Aprovado Parâmetro definido como true, consulte Kubelet Serving Certificate Rotation
1.3.7 Verificar se o argumento --bind-address está definido como 127.0.0.1 Automatizados L1 Controle equivalente O IP do pod é usado
1.4 Agendador
1.4.1 Verificar se o argumento --profiling está definido como false Automatizados L1 Aprovado
1.4.2 Verificar se o argumento --bind-address está definido como 127.0.0.1 Automatizados L1 Controle equivalente O IP do pod é usado
2 etcd
2.1 Verificar se os argumentos --cert-file e --key-file estão definidos conforme apropriado Automatizados L1 Aprovado
2.2 Verificar se o argumento --client-cert-auth está definido como true Automatizados L1 Aprovado
2.3 Verificar se o argumento --auto-tls não está definido como true Automatizados L1 Aprovado O parâmetro não está definido, o que definirá o valor padrão como false (que está em conformidade)
2,4 Verificar se os argumentos --peer-cert-file e --peer-key-file estão definidos conforme apropriado Automatizados L1 Aprovado
2.5 Verificar se o argumento --peer-client-cert-auth está definido como true Automatizados L1 Aprovado
2.6 Verificar se o argumento --peer-auto-tls não está definido como true Automatizados L1 Aprovado O parâmetro não está definido, o que definirá o valor padrão como false (que está em conformidade)
2.7 Verificar se uma autoridade de certificação exclusiva é usada para etcd Manual L2 Aprovado --client-ca-file para api-server é diferente de --trusted-ca-file para etcd
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 Manual L1 Aprovado Ao implantar um cluster do AKS, as contas locais são habilitadas por padrão. Você pode desabilitar contas locais para desabilitar certificados de cliente para autenticação.
3.1.2 A autenticação de token de conta de serviço não deve ser usada para usuários Manual L1 Aprovado O AKS dá suporte à autenticação do Microsoft Entra para solicitações enviadas ao plano de controle de cluster. O uso de tokens acccount de serviço é deixado para o cliente (para impor uma prática recomendada, conforme necessário)
3.1.3 A autenticação de token bootstrap não deve ser usada para usuários Manual L1 Aprovado Tokens de inicialização não podem ser usados pelos usuários
3.2 Registro em log
3.2.1 Verificar se uma política de auditoria mínima é criada Manual L1 Aprovado
3.2.2 Verificar se a política de auditoria abrange as principais preocupações de segurança Manual 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 Automatizados L1 Aprovado
4.1.2 Verificar se a propriedade do arquivo serviço Kubelet está definida como root: root Automatizados 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 Manual L1 N/D
4.1.4 Se o arquivo kubeconfig do proxy existir, verifique se a propriedade está definida como root: root Manual 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 Automatizados L1 Aprovado
4.1.6 Verificar se a propriedade do arquivo --kubeconfig kubelet.conf está definida como root: root Automatizados 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 Manual L1 Aprovado
4.1.8 Verificar se a propriedade do arquivo autoridades de certificação do cliente está definida como root: root Manual 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 Automatizados 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 Automatizados L1 Aprovado
4.2 Kubelet
4.2.1 Verificar se o argumento --anonymous-auth está definido como false Automatizados L1 Aprovado
4.2.2 Verificar se o argumento --authorization-mode está definido como AlwaysAllow Automatizados L1 Aprovado
4.2.3 Verificar se o argumento --client-ca-file está definido conforme apropriado Automatizados L1 Aprovado
4.2.4 Verificar se o argumento --read-only-port está definido como 0 Manual L1 Aprovado
4.2.5 Verificar se o argumento --streaming-connection-idle-timeout está definido como 0 Manual L1 Aprovado
4.2.6 Verificar se o argumento --make-iptables-util-chains está definido como true Automatizados L1 Aprovado
4.2.7 Verificar se o argumento --hostname-override não está definido Manual L1 Aprovado
4.2.8 Verificar se o argumento --eventRecordQPS está definido como um nível que garanta a captura adequada de eventos Manual L2 Aprovado
4.2.9 Verificar se os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme apropriado Manual L1 Aprovado
4.2.10 Verificar se o argumento --rotate-certificates não está definido como false Automatizados L1 Aprovado
4.2.11 Verificar se o argumento RotateKubeletServerCertificate está definido como true Manual L1 Aprovado
4.2.12 Verificar se o Kubelet usa apenas codificações criptográficas fortes Manual L1 Aprovado
4.2.13 Garanta que um limite seja definido nos PIDs do pod Manual L1 Aprovado
4.2.14 Certifique-se de que o Kubelet imponha o uso do perfil seccomp RuntimeDefault Manual L1 Depende do ambiente O AKS usa Unconfinedcomo padrão . A Configuração de Nó Personalizado pode ser usada para habilitar RuntimeDefault o perfil seccomp.
4.3 kube-proxy
4.3.1 Certifique-se de que o serviço de métricas do kube-proxy esteja vinculado ao localhost Automatizados L1 Falha O AKS tem a extração central do Prometheus para kube-proxy e aplica alerta e correção automática quando KubeProxyStale é detectado. O metrics-bind-address é definido para essa finalidade.
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 Automatizados L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.1.2 Minimizar o acesso a segredos Automatizados L1 Depende do ambiente
5.1.3 Minimizar o uso de curinga em Roles e ClusterRoles Automatizados L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.1.4 Minimizar o acesso para criar pods Automatizados L1 Depende do ambiente
5.1.5 Verificar se as contas de serviço padrão não são usadas ativamente Automatizados L1 Depende do ambiente
5.1.6 Verificar se os tokens da conta de serviço só são montados quando necessário Automatizados L1 Depende do ambiente
5.1.7 Evitar usar o 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 Minimizar o acesso para criar volumes persistentes Manual L1 Depende do ambiente
5.1.10 Minimizar o acesso à sub-fonte de proxy de nós Manual L1 Depende do ambiente
5.1.11 Minimizar o acesso à sub-fonte de aprovação de certificatesigningrequests objetos Manual L1 Depende do ambiente
5.1.12 Minimizar o acesso aos objetos de configuração do webhook Manual L1 Depende do ambiente
5.1.13 Minimizar o acesso à criação do token da conta de serviço Manual L1 Depende do ambiente
5.2 Pod Padrões de Segurança
5.2.1 Certifique-se de que o cluster tenha pelo menos um mecanismo de controle de política ativo em vigor Manual L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.2.2 Minimizar a admissão de contêineres privilegiados Manual L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.2.3 Minimizar a admissão de contêineres que desejam compartilhar o namespace da ID do processo de host Manual L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.2.4 Minimizar a admissão de contêineres que desejam compartilhar o namespace do IPC do host Manual L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.2.5 Minimizar a admissão de contêineres que desejam compartilhar o namespace da rede do host Manual L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.2.6 Minimizar a admissão de contêineres com allowPrivilegeEscalation Manual L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.2.7 Minimizar a admissão de contêineres raiz Manual L2 Depende do ambiente
5.2.8 Minimizar a admissão de contêineres com a funcionalidade NET_RAW Manual L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.2.9 Minimizar a admissão de contêineres com funcionalidades adicionadas Manual L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.2.10 Minimizar a admissão de contêineres com funcionalidades atribuídas Manual L2 Depende do ambiente
5.2.11 Minimizar a admissão dos Contêineres do HostProcess do Windows Manual L1 Depende do ambiente
5.2.12 Minimizar a admissão dos volumes do HostPath Manual L1 Depende do ambiente Use as Definições de políticas internas do Azure Policy para o Serviço de Kubernetes do Azure
5.2.13 Minimizar a admissão dos contêineres que usam HostPorts Manual 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 Manual L1 Aprovado
5.3.2 Verificar se todos os namespaces têm políticas de rede definidas Manual 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 Manual L2 Depende do ambiente
5.4.2 Considerar o armazenamento de segredo externo Manual 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 Manual L2 Falha Controle equivalente implementado
5.6 Políticas gerais
5.6.1 Criar limites administrativos entre recursos usando namespaces Manual L1 Depende do ambiente
5.6.2 Verificar se o perfil seccomp está definido como docker/padrão em suas definições de pod Manual L2 Depende do ambiente
5.6.3 Aplicar contexto de segurança a 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

Outras anotações

  • 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 estão desabilitados no sistema operacional.

Próximas etapas

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