Referência do Kubernetes do Center for Internet Security (CIS)

Como um serviço seguro, Azure Kubernetes Service (AKS) está em conformidade com as normas SOC, ISO, PCI DSS e HIPAA. Este artigo aborda a proteção de segurança aplicada ao AKS com base na referência cis kubernetes. Para obter mais informações sobre a segurança do AKS, veja Conceitos de segurança para aplicações e clusters no Azure Kubernetes Service (AKS). Para obter mais informações sobre a referência cis, veja Referências do Center for Internet Security (CIS).

Referência CIS do Kubernetes

Seguem-se os resultados das recomendações cis kubernetes V1.24 Benchmark v1.0.0 no AKS. Estes são aplicáveis ao AKS 1.21.x através do AKS 1.24.x.

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

Os testes de referência cis fornecem dois níveis de definições de segurança:

  • L1, ou Nível 1, recomenda requisitos de segurança básicos essenciais 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 definições de segurança para ambientes que exijam maior segurança, o que pode resultar em algumas funcionalidades reduzidas.

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

  • Pass - A recomendação foi aplicada.
  • Falha – a recomendação não foi aplicada.
  • N/D - A recomendação está relacionada com requisitos de permissão de ficheiro de manifesto que não são relevantes para o AKS. Por predefinição, os clusters do Kubernetes utilizam um modelo de manifesto para implementar os pods do plano de controlo, que dependem de ficheiros da VM do nó. A referência cis kubernetes recomenda que estes ficheiros tenham determinados requisitos de permissão. Os clusters do AKS utilizam um gráfico Helm para implementar pods do plano de controlo e não dependem de ficheiros na VM do nó.
  • Depende do Ambiente – a recomendação é aplicada no ambiente específico do utilizador e não é controlada pelo AKS. As recomendações classificadas afetam a classificação de referência, quer a recomendação se aplique ou não ao ambiente específico do utilizador.
  • Controlo Equivalente - a recomendação foi implementada de uma forma diferente e equivalente.
CIS ID Descrição da recomendação Tipo de Classificação Level Estado
1 Componentes do Plano de Controlo
1.1 Ficheiros de Configuração do Nó do Plano de Controlo
1.1.1 Confirme que as permissões do ficheiro de especificação do pod do servidor da API estão definidas como 600 ou mais restritivas Pontuado L1 N/D
1.1.2 Confirme que a propriedade do ficheiro de especificação do pod do servidor da API está definida como root:root Pontuado L1 N/D
1.1.3 Confirme que as permissões do ficheiro de especificação do pod do gestor do controlador estão definidas como 600 ou mais restritivas Pontuado L1 N/D
1.1.4 Certifique-se de que a propriedade do ficheiro de especificação do pod do gestor do controlador está definida como root:root Pontuado L1 N/D
1.1.5 Confirme que as permissões do ficheiro de especificação do pod do scheduler estão definidas como 600 ou mais restritivas Pontuado L1 N/D
1.1.6 Certifique-se de que a propriedade do ficheiro de especificação do pod do scheduler está definida como root:root Pontuado L1 N/D
1.1.7 Confirme que as permissões do ficheiro de especificação do pod etcd estão definidas como 600 ou mais restritivas Pontuado L1 N/D
1.1.8 Certifique-se de que a propriedade do ficheiro de especificação do pod etcd está definida como root:root Pontuado L1 N/D
1.1.9 Confirme que as permissões de ficheiro da Interface de Rede de Contentor estão definidas como 600 ou mais restritivas Não Marcado L1 N/D
1.1.10 Confirme que a propriedade do ficheiro da Interface de Rede de Contentor está definida como root:root Não Marcado L1 N/D
1.1.11 Confirme que as permissões do diretório de dados etcd estão definidas como 700 ou mais restritivas Pontuado L1 N/D
1.1.12 Certifique-se de que a propriedade do diretório de dados etcd está definida como etcd:etcd Pontuado L1 N/D
1.1.13 Confirme que as permissões do ficheiro admin.conf estão definidas como 600 ou mais restritivas Pontuado L1 N/D
1.1.14 Confirme que a propriedade do ficheiro admin.conf está definida como root:root Pontuado L1 N/D
1.1.15 Certifique-se de que as permissões de ficheiro scheduler.conf estão definidas como 600 ou mais restritivas Pontuado L1 N/D
1.1.16 Confirme que a propriedade do ficheiro scheduler.conf está definida como root:root Pontuado L1 N/D
1.1.17 Confirme que as permissões do ficheiro controller-manager.conf estão definidas como 600 ou mais restritivas Pontuado L1 N/D
1.1.18 Confirme que a propriedade do ficheiro controller-manager.conf está definida como root:root Pontuado L1 N/D
1.1.19 Certifique-se de que o diretório PKI do Kubernetes e a propriedade do ficheiro estão definidos como root:root Pontuado L1 N/D
1.1.20 Confirme que as permissões do ficheiro de certificado PKI do Kubernetes estão definidas como 600 ou mais restritivas Pontuado L1 N/D
1.1.21 Certifique-se de que as permissões do ficheiro de chave PKI do Kubernetes estão definidas como 600 Pontuado L1 N/D
1.2 Servidor de API
1.2.1 Certifique-se de que o --anonymous-auth argumento está definido como falso Não Marcado L1 Aprovação
1.2.2 Certifique-se de que o --token-auth-file parâmetro não está definido Pontuado L1 Reprovado
1.2.3 Certifique-se de que --DenyServiceExternalIPs não está definido Pontuado L1 Aprovação
1.2.4 Certifique-se de que os --kubelet-client-certificate argumentos e --kubelet-client-key estão definidos conforme adequado Pontuado L1 Aprovação
1.2.5 Certifique-se de que o --kubelet-certificate-authority argumento está definido conforme adequado Pontuado L1 Reprovado
1.2.6 Certifique-se de que o --authorization-mode argumento não está definido como AlwaysAllow Pontuado L1 Aprovação
1.2.7 Certifique-se de que o --authorization-mode argumento inclui Node Pontuado L1 Aprovação
1.2.8 Confirme que o --authorization-mode argumento inclui RBAC Pontuado L1 Aprovação
1.2.9 Certifique-se de que o plug-in de controlo de admissão EventRateLimit está definido Não Marcado L1 Reprovado
1.2.10 Certifique-se de que o plug-in de controlo de admissão AlwaysAdmit não está definido Pontuado L1 Aprovação
1.2.11 Certifique-se de que o plug-in de controlo de admissão AlwaysPullImages está definido Não Marcado L1 Reprovado
1.2.12 Certifique-se de que o plug-in de controlo de admissão SecurityContextDeny está definido se PodSecurityPolicy não for utilizado Não Marcado L1 Reprovado
1.2.13 Certifique-se de que o plug-in de controlo de admissão ServiceAccount está definido Pontuado L1 Aprovação
1.2.14 Certifique-se de que o plug-in de controlo de admissão NamespaceLifecycle está definido Pontuado L1 Aprovação
1.2.15 Certifique-se de que o plug-in de controlo de admissão NodeRestriction está definido Pontuado L1 Aprovação
1.2.16 Certifique-se de que o --secure-port argumento não está definido como 0 Pontuado L1 Aprovação
1.2.17 Certifique-se de que o --profiling argumento está definido como falso Pontuado L1 Aprovação
1.2.18 Certifique-se de que o --audit-log-path argumento está definido Pontuado L1 Aprovação
1.2.19 Certifique-se de que o --audit-log-maxage argumento está definido como 30 ou conforme adequado Pontuado L1 Controlo Equivalente
1.2.20 Certifique-se de que o --audit-log-maxbackup argumento está definido como 10 ou conforme adequado Pontuado L1 Controlo Equivalente
1.2.21 Certifique-se de que o --audit-log-maxsize argumento está definido como 100 ou conforme adequado Pontuado L1 Aprovação
1.2.22 Certifique-se de que o --request-timeout argumento está definido conforme adequado Pontuado L1 Aprovação
1.2.23 Certifique-se de que o --service-account-lookup argumento está definido como verdadeiro Pontuado L1 Aprovação
1.2.24 Certifique-se de que o --service-account-key-file argumento está definido conforme adequado Pontuado L1 Aprovação
1.2.25 Certifique-se de que os --etcd-certfile argumentos e --etcd-keyfile estão definidos conforme adequado Pontuado L1 Aprovação
1.2.26 Certifique-se de que os --tls-cert-file argumentos e --tls-private-key-file estão definidos conforme adequado Pontuado L1 Aprovação
1.2.27 Certifique-se de que o --client-ca-file argumento está definido conforme adequado Pontuado L1 Aprovação
1.2.28 Certifique-se de que o --etcd-cafile argumento está definido conforme adequado Pontuado L1 Aprovação
1.2.29 Certifique-se de que o --encryption-provider-config argumento está definido conforme adequado Pontuado L1 Depende do Ambiente
1.2.30 Certifique-se de que os fornecedores de encriptação estão configurados corretamente Pontuado L1 Depende do Ambiente
1.2.31 Certifique-se de que o Servidor de API utiliza apenas Cifras Criptográficas Fortes Não Pontuado L1 Aprovação
1.3 Gestor de Controladores
1.3.1 Certifique-se de que o --terminated-pod-gc-threshold argumento está definido conforme adequado Pontuado L1 Aprovação
1.3.2 Certifique-se de que o --profiling argumento está definido como falso Pontuado L1 Aprovação
1.3.3 Confirme que o --use-service-account-credentials argumento está definido como verdadeiro Pontuado L1 Aprovação
1.3.4 Certifique-se de que o --service-account-private-key-file argumento está definido conforme adequado Pontuado L1 Aprovação
1.3.5 Certifique-se de que o --root-ca-file argumento está definido conforme adequado Pontuado L1 Aprovação
1.3.6 Certifique-se de que o argumento RotateKubeletServerCertificate está definido como verdadeiro Pontuado L2 Reprovado
1.3.7 Certifique-se de que o --bind-address argumento está definido como 127.0.0.1 Pontuado L1 Controlo Equivalente
1.4 Scheduler
1.4.1 Certifique-se de que o --profiling argumento está definido como falso Pontuado L1 Aprovação
1.4.2 Certifique-se de que o --bind-address argumento está definido como 127.0.0.1 Pontuado L1 Controlo Equivalente
2 etcd
2.1 Certifique-se de que os --cert-file argumentos e --key-file estão definidos conforme adequado Pontuado L1 Aprovação
2,2 Confirme que o --client-cert-auth argumento está definido como verdadeiro Pontuado L1 Aprovação
2.3 Confirme que o --auto-tls argumento não está definido como verdadeiro Pontuado L1 Aprovação
2,4 Certifique-se de que os --peer-cert-file argumentos e --peer-key-file estão definidos conforme adequado Pontuado L1 Aprovação
2.5 Confirme que o --peer-client-cert-auth argumento está definido como verdadeiro Pontuado L1 Aprovação
2,6 Confirme que o --peer-auto-tls argumento não está definido como verdadeiro Pontuado L1 Aprovação
2.7 Certifique-se de que é utilizada uma Autoridade de Certificação exclusiva para etc. Não Marcado L2 Aprovação
3 Configuração do Plano de Controlo
3,1 Autenticação e Autorização
3.1.1 A autenticação de certificado de cliente não deve ser utilizada para os utilizadores Não Marcado L2 Aprovação
3.2 Registo
3.2.1 Certifique-se de que é criada uma política de auditoria mínima Pontuado L1 Aprovação
3.2.2 Certifique-se de que a política de auditoria abrange as principais preocupações de segurança Não Marcado L2 Aprovação
4 Nós de Trabalho
4.1 Ficheiros de Configuração de Nó de Trabalho
4.1.1 Confirme que as permissões do ficheiro do serviço kubelet estão definidas como 600 ou mais restritivas Pontuado L1 Aprovação
4.1.2 Confirme que a propriedade do ficheiro do serviço kubelet está definida como root:root Pontuado L1 Aprovação
4.1.3 Se existir um ficheiro kubeconfig de proxy, confirme que as permissões estão definidas como 600 ou mais restritivas Pontuado L1 N/D
4.1.4 Se existir um ficheiro kubeconfig de proxy, confirme que a propriedade está definida como root:root Pontuado L1 N/D
4.1.5 Confirme que as permissões de --kubeconfig ficheiro kubelet.conf estão definidas como 600 ou mais restritivas Pontuado L1 Aprovação
4.1.6 Confirme que a propriedade do --kubeconfig ficheiro kubelet.conf está definida como root:root Pontuado L1 Aprovação
4.1.7 Confirme que as permissões de ficheiro das autoridades de certificação estão definidas como 600 ou mais restritivas Pontuado L1 Aprovação
4.1.8 Confirme que a propriedade do ficheiro das autoridades de certificação do cliente está definida como root:root Pontuado L1 Aprovação
4.1.9 Se o ficheiro de configuração kubelet config.yaml estiver a ser utilizado, confirme que as permissões estão definidas como 600 ou mais restritivas Pontuado L1 Aprovação
4.1.10 Se o ficheiro de configuração do kubelet config.yaml estiver a ser utilizado, confirme que a propriedade do ficheiro está definida como root:root Pontuado L1 Aprovação
4.2 Kubelet
4.2.1 Certifique-se de que o --anonymous-auth argumento está definido como falso Pontuado L1 Aprovação
4.2.2 Certifique-se de que o --authorization-mode argumento não está definido como AlwaysAllow Pontuado L1 Aprovação
4.2.3 Certifique-se de que o --client-ca-file argumento está definido conforme adequado Pontuado L1 Aprovação
4.2.4 Certifique-se de que o --read-only-port argumento está definido como 0 Pontuado L1 Aprovação
4.2.5 Certifique-se de que o --streaming-connection-idle-timeout argumento não está definido como 0 Pontuado L1 Aprovação
4.2.6 Confirme que o --protect-kernel-defaults argumento está definido como verdadeiro Pontuado L1 Aprovação
4.2.7 Confirme que o --make-iptables-util-chains argumento está definido como verdadeiro Pontuado L1 Aprovação
4.2.8 Certifique-se de que o --hostname-override argumento não está definido Não Marcado L1 Aprovação
4.2.9 Confirme que o argumento eventRecordQPS está definido para um nível que garante a captura de eventos adequada Não Marcado L2 Aprovação
4.2.10 Certifique-se de que os --tls-cert-fileargumentos e --tls-private-key-file estão definidos conforme adequado Pontuado L1 Aprovação
4.2.11 Confirme que o --rotate-certificates argumento não está definido como falso Pontuado L1 Aprovação
4.2.12 Certifique-se de que o argumento RotateKubeletServerCertificate está definido como verdadeiro Pontuado L1 Aprovação
4.2.13 Certifique-se de que o Kubelet utiliza apenas Cifras Criptográficas Fortes Não Marcado L1 Aprovação
5 Políticas
5.1 RBAC e Contas de Serviço
5.1.1 Certifique-se de que a função de administrador de cluster só é utilizada quando necessário Não Marcado L1 Depende do Ambiente
5.1.2 Minimizar o acesso aos segredos Não Marcado L1 Depende do Ambiente
5.1.3 Minimizar a utilização de carateres universais em Funções e ClusterRoles Não Marcado L1 Depende do Ambiente
5.1.4 Minimizar o acesso para criar pods Não Marcado L1 Depende do Ambiente
5.1.5 Confirme que as contas de serviço predefinidas não são utilizadas ativamente Pontuado L1 Depende do Ambiente
5.1.6 Certifique-se de que os Tokens da Conta de Serviço só são montados quando necessário Não Marcado L1 Depende do Ambiente
5,2 Políticas de Segurança de Pods
5.2.1 Minimizar a admissão de contentores com privilégios Não Marcado L1 Depende do Ambiente
5.2.2 Minimizar a admissão de contentores que pretendem partilhar o espaço de nomes do ID do processo de anfitrião Pontuado L1 Depende do Ambiente
5.2.3 Minimizar a admissão de contentores que pretendem partilhar o espaço de nomes IPC do anfitrião Pontuado L1 Depende do Ambiente
5.2.4 Minimizar a admissão de contentores que pretendem partilhar o espaço de nomes de rede de anfitrião Pontuado L1 Depende do Ambiente
5.2.5 Minimizar a admissão de contentores com allowPrivilegeEscalation Pontuado L1 Depende do Ambiente
5.2.6 Minimizar a admissão de contentores de raiz Não Marcado L2 Depende do Ambiente
5.2.7 Minimizar a admissão de contentores com a capacidade de NET_RAW Não Marcado L1 Depende do Ambiente
5.2.8 Minimizar a admissão de contentores com capacidades adicionadas Não Marcado L1 Depende do Ambiente
5.2.9 Minimizar a admissão de contentores com capacidades atribuídas Não Pontuado L2 Depende do Ambiente
5.3 Políticas de Rede e CNI
5.3.1 Certifique-se de que a CNI em utilização suporta Políticas de Rede Não Pontuado L1 Aprovação
5.3.2 Certifique-se de que todos os Espaços de Nomes têm Políticas de Rede definidas Pontuado L2 Depende do Ambiente
5.4 Gestão de Segredos
5.4.1 Preferir utilizar segredos como ficheiros em vez de segredos como variáveis de ambiente Não Pontuado L1 Depende do Ambiente
5.4.2 Considerar 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 com o controlador de admissão ImagePolicyWebhook Não Pontuado L2 Depende do Ambiente
5,6 Políticas Gerais
5.6.1 Criar limites administrativos entre recursos com espaços de nomes Não Pontuado L1 Depende do Ambiente
5.6.2 Certifique-se de que o perfil seccomp está definido como docker/predefinição nas definições do pod Não Pontuado L2 Depende do Ambiente
5.6.3 Aplicar Contexto de Segurança aos Seus Pods e Contentores Não Pontuado L2 Depende do Ambiente
5.6.4 O espaço de nomes predefinido não deve ser utilizado Pontuado L2 Depende do Ambiente

Nota

Além da referência cis do Kubernetes, também existe uma referência cis do AKS disponível.

Notas adicionais

  • O SO protegido por segurança é criado 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 controladores de módulo kernel desnecessários foram desativados no SO.

Passos seguintes

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