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-file argumentos 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: