Ativar mTLS no AWS App Mesh usando a AWS Private CA no Amazon EKS - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Ativar mTLS no AWS App Mesh usando a AWS Private CA no Amazon EKS

Criado por Omar Kahil (AWS), Emmanuel Saliu (AWS) e Muhammad Shahzad (AWS)

Ambiente: PoC ou piloto

Tecnologias: contêineres e microsserviços

Serviços da AWS: AWS App Mesh; Amazon EKS; AWS Certificate Manager (ACM)

Resumo

Este padrão mostra como implementar o Mutual Transport Layer Security (mTLS) no Amazon Web Services (AWS) usando certificados da AWS Private Certificate Authority (AWS Private CA) no AWS App Mesh. Ele usa a API do serviço de descoberta secreta (SDS) Envoy por meio do Secure Production Identity Framework for Everyone (SPIFFE). O SPIFFE é um projeto de código aberto da Cloud Native Computing Foundation (CNCF) com amplo suporte da comunidade que fornece gerenciamento de identidade de workload refinado e dinâmico. Para implementar os padrões do SPIFFE, use o ambiente de runtime SPIRE SPIFFE.

O uso do mTLS no App Mesh oferece autenticação bidirecional de pares, pois adiciona uma camada de segurança sobre o TLS e permite que os serviços na malha verifiquem o cliente que está fazendo a conexão. O cliente na relação cliente-servidor também fornece um certificado X.509 durante o processo de negociação da sessão. O servidor usa esse certificado para identificar e autenticar o cliente. Isso ajuda a verificar se o certificado foi emitido por uma autoridade de certificação (CA) confiável e se o certificado é válido.

Pré-requisitos e limitações

Pré-requisitos

  • Um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) com grupos de nós autogerenciados ou gerenciados

  • App Mesh Controller implantado no cluster com o SDS ativado

  • Um certificado privado do AWS Certificate Manager (ACM) que é emitido pela AWS Private CA

Limitações

  • O SPIRE não pode ser instalado no AWS Fargate porque o agente SPIRE deve ser executado como um Kubernetes. DaemonSet

Versões do produto

  • AWS App Mesh Controller chart 1.3.0 ou superior

Arquitetura

O diagrama a seguir mostra o cluster EKS com App Mesh na VPC. O servidor SPIRE em um nó de processamento se comunica com os SPIRE Agents em outros nós de processamento e com a AWS Private CA. O Envoy é usado para comunicação mTLS entre os nós de processamento do SPIRE Agent.

Cluster EKS com nós de processamento que contêm os Spire Agents, com Envoys for mTLS, e um nó de processamento com SPIRE Server, que se comunica com a ACM Private CA.

O diagrama ilustra as seguintes etapas:

  1. O certificado é emitido.

  2. Solicite o certificado e sua assinatura autenticada.

Ferramentas

Serviços da AWS

  • AWS Private CA – O AWS Private Certificate Authority (AWS Private CA) permite a criação de hierarquias de autoridade de certificação privada (CA), incluindo autoridades de certificação raiz e subordinadas, sem os custos de investimento e manutenção da operação de uma CA on-premises.

  • AWS App Mesh - O AWS App Mesh é uma malha de serviço que facilita o monitoramento e o controle de serviços. O App Mesh padroniza como seus serviços se comunicam, dando visibilidade consistente e controle de tráfego de rede para cada serviço em uma aplicação.

  • Amazon EKS – O Amazon Elastic Kubernetes Service (Amazon EKS) é um serviço gerenciado que você pode usar para executar o Kubernetes na AWS, eliminando a necessidade de instalar, operar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.

Outras ferramentas

  • Helm - O Helm é um gerenciador de pacotes para o Kubernetes que ajuda a instalar e gerenciar aplicações em seu cluster do Kubernetes. Esse padrão usa o Helm para implantar o controlador do AWS App Mesh.

  • Chart do AWS App Mesh Controller – O chart do controlador do AWS App Mesh é usado por esse padrão para habilitar o AWS App Mesh no Amazon EKS.

Épicos

TarefaDescriçãoHabilidades necessárias

Configure o App Mesh com o Amazon EKS.

Siga as etapas básicas de implantação fornecidas no repositório.

DevOps engenheiro

Instale o SPIRE.

Instale o SPIRE no cluster EKS usando spire_setup.yaml.

DevOps engenheiro

Instale o certificado da AWS Private CA.

Crie e instale um certificado para sua CA raiz privada seguindo as instruções na documentação da AWS.

DevOps engenheiro

Conceda permissões para a função de instância do nó do cluster.

Para anexar políticas à função de instância do nó do cluster, use o código que está na seção Informações adicionais.

DevOps engenheiro

Adicione o plug-in SPIRE para a AWS Private CA.

Para adicionar o plug-in à configuração do servidor SPIRE, use o código que está na seção Informações adicionais. Substitua o nome do recurso da Amazon (ARN) certificate_authority_arn pelo seu ARN da CA privada. O algoritmo de assinatura usado deve ser o mesmo da CA privada. Substitua your_region pela sua região da AWS.

Para obter mais informações sobre o plug-in, consulte Plug-in do servidor: UpstreamAuthority “aws_pca”.

DevOps engenheiro

Atualize bundle.cert.

Depois de criar o SPIRE Server, um arquivo spire-bundle.yaml será criado. Altere o valor bundle.crt no arquivo spire-bundle.yaml da CA privada para o certificado público.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Registre entradas de nós e workload com o SPIRE.

Para registrar o nó e a workload (serviços) no servidor SPIRE, use o código no repositório.

DevOps engenheiro

Crie uma malha no App Mesh com o mTLS ativado.

Crie uma nova malha no App Mesh com todos os componentes do seu aplicativo de microsserviços (por exemplo, serviço virtual, roteador virtual e nós virtuais).

DevOps engenheiro

Inspecione as entradas registradas.

Você pode inspecionar as entradas registradas para seus nós e workloads executando o comando a seguir.

kubectl exec -n spire spire-server-0 -- /opt/spire/bin/spire-server entry show

Isso mostrará as entradas dos SPIRE Agents.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Verifique o tráfego do mTLS.

  1. Do serviço de front-end, envie um cabeçalho HTTP para o serviço de back-end e verifique uma resposta bem-sucedida com os serviços registrados no SPIRE.

  2. Para autenticação TLS mútua, você pode inspecionar a estatística ssl.handshake executando o comando a seguir.

    kubectl exec -it $POD -n $NAMESPACE -c envoy -- curl http://localhost:9901/stats | grep ssl.handshake

    Depois de executar o comando anterior, você deverá ver a contagem ssl.handshake de receptores, que será semelhante ao seguinte exemplo:

    listener.0.0.0.0_15000.ssl.handshake: 2
DevOps engenheiro

Verifique se os certificados estão sendo emitidos pela AWS Private CA.

Você pode verificar se os plug-ins foram configurados corretamente e se os certificados estão sendo emitidos pela sua CA privada upstream visualizando os registros em seu SPIRE Server. Execute o seguinte comando .

kubectl logs spire-server-0 -n spire

Em seguida, visualize os logs que são gerados. Esse código pressupõe que seu servidor se chame spire-server-0 e esteja hospedado em seu namespace spire. Você deve ver o carregamento bem-sucedido dos plug-ins e uma conexão sendo estabelecida com sua CA privada upstream.

DevOps engenheiro

Recursos relacionados

Mais informações

Conceda permissões para a função de instância do nó do cluster

{     "Version": "2012-10-17",     "Statement": [         {             "Sid": "ACMPCASigning",             "Effect": "Allow",             "Action": [                 "acm-pca:DescribeCertificateAuthority",                 "acm-pca:IssueCertificate",                 "acm-pca:GetCertificate",                 "acm:ExportCertificate"             ],             "Resource": "*"         }     ] } AWS Managed Policy: "AWSAppMeshEnvoyAccess"

Adicione o plug-in SPIRE para ACM

Add the SPIRE plugin for ACM Change certificate_authority_arn to your PCA ARN. The signing algorithm used must be the same as the signing algorithm on the PCA. Change your_region to the appropriate AWS Region. UpstreamAuthority "aws_pca" {     plugin_data {         region = "your_region"         certificate_authority_arn = "arn:aws:acm-pca:...."         signing_algorithm = "your_signing_algorithm"     } }