Quatro etapas para reforçar a segurança do Amazon EKS
Kamil Potrec
21 de julho de 2021
0 minutos de leituraNa primeira parte desta série de artigos, exploramos como implantar o Amazon EKS com Terraform e vimos como proteger a implementação inicial de RBAC e o Instance Metadata Service. Neste segundo artigo, vamos conhecer outras práticas recomendadas para reforçar a segurança do Amazon EKS, incluindo a importância de funções de IAM dedicadas para entrega contínua, de uma arquitetura mult conta para isolar clusters do Amazon EKS e de criptografar seus segredos no plano de controle. Por fim, mostraremos como incorporar ferramentas de análise estática aos seus pipelines de CD para detectar esses problemas antes que cheguem aos ambientes de produção.
Acompanhe quem implantou o cluster
O serviço Amazon EKS se integra ao serviço Identity Access Management para autenticar usuários no cluster. As decisões de autorização são realizadas pelo modelo nativo de RBAC do Kubernetes. A configuração de RBAC é mapeada para as identidades do IAM por meio do aws-auth ConfigMap. No entanto, há um mapeamento especial que não aparece em nenhum arquivo de configuração ou definição. A entidade do IAM usada para criar o cluster é mapeada automaticamente para o system:masters, um grupo integrado do Kubernetes. Isso está bem documentado na documentação do usuário, mas ainda tem implicações importantes para a auditabilidade das permissões do cluster.
Para demonstrar o impacto dessa configuração, vamos excluir todas as Roles e ClusterRoles do nosso cluster de demonstração.
O Amazon EKS usa autenticação de token por webhook para se integrar ao IAM. Podemos ver a configuração nos argumentos do servidor da API.
O AWS IAM tem o conceito de identificadores exclusivos, que podem ser usados em serviços específicos para evitar configurações incorretas causadas pela reutilização de nomes. A documentação do Amazon EKS não deixa claro se a permissão system:masters está vinculada ao identificador exclusivo da entidade ou ao seu nome amigável. Para verificar se a remoção da entidade original revogaria todas as permissões no cluster, excluímos a função temporária e a recriamos.
Como você pode ver, agora temos uma função completamente nova, identificada por um RoleId diferente. No entanto, o serviço de autenticação do Amazon EKS usa o nome amigável da função para nos conceder as mesmas permissões de system:masters.
A maneira mais eficaz de atenuar esse problema é usar um sistema centralizado de implantação, utilizar uma função dedicada para as implantações e evitar ao máximo o uso de credenciais pessoais. Ferramentas como o aws-vault podem ajudar você a alternar entre diferentes funções com segurança.
Agora, vamos ver como os nós se autenticam no plano de controle.
Use contas separadas para isolar os clusters
O Amazon EKS exige que todos os nós tenham um perfil de instância associado às duas políticas a seguir: AmazonEKSWorkerNodePolicy e AmazonEC2ContainerRegistryReadOnly.
Por padrão, essas políticas concedem privilégios a todos os recursos da conta da AWS. Isso significa que um pod comprometido nesse cluster poderá enumerar informações sobre qualquer recurso, VPC, sub-rede e imagem da conta.
Na verdade, o nó do Amazon EKS precisa acessar mais uma política gerenciada, chamada AmazonEKS_CNI_Policy. Essa política permite que o nó aloque endereços IP e execute qualquer funcionalidade relacionada à rede.
Essa política permite que quem a chama modifique a configuração de rede de qualquer instância da conta. A própria Amazon recomenda que essa política seja associada diretamente à conta de serviço do Kubernetes aws-node. Por padrão, o módulo do Terraform associa essa política ao perfil do IAM. Podemos mudar esse comportamento definindo o atributo attach_worker_cni_policy como false.
Criptografe seus Secrets
Um dos componentes do plano de controle gerenciados pelo serviço Amazon EKS é o armazenamento de chave-valor etcd. O servidor da API do Kubernetes o utiliza para armazenar todos os objetos e configurações. Por padrão, o Kubernetes não criptografa os dados armazenados nesse repositório de chave-valor. A AWS é responsável pela segurança dos componentes do plano de controle, mas ainda podemos aplicar uma estratégia de defesa em profundidade para aumentar a segurança dos nossos dados.
O serviço AWS KMS é um dos provedores de criptografia que podem oferecer criptografia de envelope para objetos do tipo secrets armazenados no cluster. Ao definir a opção `cluster_encryption_config`, podemos especificar uma chave do KMS que será usada para criptografar chaves intermediárias de criptografia de dados, que, por sua vez, serão usadas para criptografar objetos específicos. Este artigo do blog do Amazon EKS, publicado pela AWS, apresenta uma ótima visão geral do processo. A partir daí, quem tiver acesso a um cluster etcd não poderá ler nossos segredos sem também ter acesso à nossa chave do KMS. Todo o processo é totalmente transparente para o usuário final.
Detecte problemas no pipeline de implantação
A infraestrutura como código nos permite descrever de forma declarativa o estado desejado do cluster do Amazon EKS. Com isso, podemos detectar estaticamente alguns desses problemas antes de qualquer implantação.
No Terraform, podemos gerar um plano da configuração que será implantada.
Esse plano pode ser convertido para o formato JSON, o que nos permite fazer uma análise estática de todos os atributos.
Depois de entender a estrutura do plano do Terraform, podemos usar o Open Policy Agent e sua linguagem declarativa para escrever testes simples.
Você pode experimentar este exemplo simples no Rego Playground online.
Escrever essas regras pode ser trabalhoso. É preciso analisar as estruturas de saída do Terraform, processar os arquivos, manter bibliotecas e apresentar os resultados de forma útil. É aí que produtos como o Snyk IaC podem ajudar. Veja um exemplo da análise de segurança realizada na nossa implantação padrão.
Com a análise de IaC da Snyk, você pode detectar problemas na configuração do Terraform antes de implantar em produção, ajudando a manter seus ambientes de produção seguros. https://app.snyk.io — crie uma conta grátis! Além disso, você também pode experimentar a ferramenta gratuita de verificação de código da Snyk para ter uma ideia rápida da segurança do seu código.
Proteja a infraestrutura desde a origem
A Snyk automatiza a segurança e a conformidade de IaC nos fluxos de trabalho e detecta recursos com configurações divergentes ou ausentes.



