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á.
Configure a end-to-end criptografia para aplicativos na Amazon EKS usando cert-manager e Let's Encrypt
Criado por Mahendra Revanasiddappa () e Vasanth Jeyaraj () AWS AWS
Repositório de códigos: nd-to-end criptografia E na Amazon EKS | Ambiente: PoC ou piloto | Tecnologias: DevOps; Contêineres e microsserviços; Segurança, identidade e conformidade |
Workload: todas as outras workloads | AWSserviços: AmazonEKS; Amazon Route 53 |
Resumo
A implementação da end-to-end criptografia pode ser complexa e você precisa gerenciar certificados para cada ativo em sua arquitetura de microsserviços. Embora você possa encerrar a conexão Transport Layer Security (TLS) na borda da rede Amazon Web Services (AWS) com um Network Load Balancer ou API Amazon Gateway, algumas organizações end-to-end exigem criptografia.
Esse padrão usa o NGINX Ingress Controller para entrada. Isso ocorre porque quando você cria uma entrada do Kubernetes, o recurso de entrada usa um Network Load Balancer. O Network Load Balancer não permite fazer o upload de certificados de cliente. Portanto, você não pode obter reciprocidade TLS com o ingresso do Kubernetes.
Esse padrão é destinado a organizações que exigem autenticação mútua entre todos os microsserviços em seus aplicativos. A Mutual TLS reduz a carga de manter nomes de usuário ou senhas e também pode usar a estrutura de segurança pronta para uso. A abordagem desse padrão é compatível se sua organização tiver um grande número de dispositivos conectados ou precisar cumprir rígidas diretrizes de segurança.
Esse padrão ajuda a aumentar a postura de segurança da sua organização implementando end-to-end criptografia para aplicativos executados no Amazon Elastic Kubernetes Service (Amazon). EKS Esse padrão fornece um exemplo de aplicativo e código no EKS repositório de nd-to-end criptografia GitHub E na Amazon
Público-alvo
Esse padrão é recomendado para usuários com experiência com KubernetesTLS, Amazon Route 53 e Domain Name System (). DNS
Pré-requisitos e limitações
Pré-requisitos
Uma conta da AWS ativa.
Um EKS cluster existente da Amazon.
AWSInterface de linha de comando (AWSCLI) versão 1.7 ou posterior, instalada e configurada no macOS, Linux ou Windows.
O utilitário de linha de
kubectl
comando, instalado e configurado para acessar o EKS cluster da Amazon. Para obter mais informações sobre isso, consulte Instalando o kubectl na documentação da AmazonEKS.Um DNS nome existente para testar o aplicativo. Para obter mais informações, consulte Registrar nomes de domínio usando o Amazon Route 53 na documentação do Amazon Route 53.
A versão mais recente do Helm instalada em sua máquina local. Para obter mais informações sobre isso, consulte Usando o Helm com a Amazon EKS na EKS documentação da Amazon e no repositório do GitHub Helm
. A nd-to-end criptografia GitHub E no EKS repositório da Amazon
, clonada em sua máquina local. Substitua os seguintes valores nos
trustpolicy.json
arquivospolicy.json
e da nd-to-end criptografia GitHub E clonada no EKS repositório da Amazon: <account number>
— Substitua AWS pelo ID da conta na qual você deseja implantar a solução.<zone id>
: substitua pelo ID de zona do Route 53 do nome de domínio.<node_group_role>
— Substitua pelo nome da função AWS Identity and Access Management (IAM) associada aos EKS nós da Amazon.<namespace>
— Substitua pelo namespace Kubernetes no qual você implanta o NGINX Ingress Controller e o aplicativo de amostra.<application-domain-name>
— Substitua pelo nome de DNS domínio do Route 53.
Limitações
Esse padrão não descreve como alternar certificados e apenas demonstra como usar certificados com microsserviços na Amazon. EKS
Arquitetura
O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.
O diagrama mostra o seguinte fluxo de trabalho:
Um cliente envia uma solicitação para acessar o aplicativo com o DNS nome.
O registro do Route 53 é um CNAME para o Network Load Balancer.
O Network Load Balancer encaminha a solicitação para o NGINX Ingress Controller que está configurado com um ouvinte. TLS A comunicação entre o NGINX Ingress Controller e o Network Load Balancer HTTPS segue o protocolo.
O NGINX Ingress Controller executa o roteamento baseado em caminhos com base na solicitação do cliente ao serviço do aplicativo.
O serviço do aplicativo encaminha a solicitação para o pod do aplicativo. O aplicativo é projetado para usar o mesmo certificado chamando segredos.
Os pods executam o aplicativo de amostra usando os certificados do gerenciador de certificados. A comunicação entre o NGINX Ingress Controller e os pods usa. HTTPS
Observação: o gerenciador de certificados é executado em seu próprio namespace. Ele usa uma função de cluster do Kubernetes para provisionar certificados como segredos em namespaces específicos. Você pode anexar esses namespaces aos pods de aplicativos e NGINX ao Ingress Controller. |
Ferramentas
AWSserviços
O Amazon Elastic Kubernetes Service (EKSAmazon) é um serviço gerenciado que você pode usar para executar o AWS Kubernetes sem precisar instalar, operar e manter seu próprio plano de controle ou nós do Kubernetes.
O Balanceador de carga Elastic distribui automaticamente seu tráfego de entrada entre vários destinos, contêineres e endereços IP.
AWSO Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
O Amazon Route 53 é um serviço DNS web altamente disponível e escalável.
Outras ferramentas
O gerenciador de certificado
é um complemento do Kubernetes que solicita certificados, os distribui para contêineres do Kubernetes e automatiza a renovação de certificados. NGINXO Ingress Controller
é uma solução de gerenciamento de tráfego para aplicativos nativos da nuvem em Kubernetes e ambientes em contêineres.
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie uma zona hospedada no Route 53. | Faça login no AWS Management Console, abra o console do Amazon Route 53, escolha Hosted zones e, em seguida, escolha Create hosted zone. Crie uma zona hospedada pública e registre o ID da zona. Para obter mais informações, consulte Criar uma zona hospedada pública na documentação do Amazon Route 53. Nota: ACME DNS 01 usa o DNS provedor para publicar um desafio para o cert-manager emitir o certificado. Esse desafio pede que você prove que controla o seu nome DNS de domínio colocando um valor específico em um TXT registro sob esse nome de domínio. Depois que o Let's Encrypt fornece um token ao seu cliente, ele cria um TXT registro derivado desse token e da chave da sua conta, e coloca esse registro em | AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie a IAM política para o cert-manager. | É necessária uma IAM política para fornecer ao cert-manager permissão para validar que você é proprietário do domínio do Route 53. O Digite o comando a seguir AWS CLI para criar a IAM política.
| AWS DevOps |
Crie a IAM função para cert-manager. | Depois de criar a IAM política, você deve criar uma IAM função. A IAM função de Digite o comando a seguir AWS CLI para criar a IAM função.
| AWS DevOps |
Anexe a política ao perfil. | Digite o comando a seguir AWS CLI para anexar a IAM política à IAM função.
| AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Implante o NGINX Ingress Controller. | Instale a versão mais recente do Instale o NGINX Ingress Controller executando o seguinte comando Helm a partir do
| AWS DevOps |
Verifique se o NGINX Ingress Controller está instalado. | Digite o comando | AWS DevOps |
Crie um registro A da Route 53. | O registro A aponta para o Network Load Balancer criado pelo NGINX Ingress Controller.
| AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Implantar NGINX VirtualServer. | O NGINX VirtualServer recurso é uma configuração de balanceamento de carga que é uma alternativa ao recurso de entrada. A configuração para criar o NGINX VirtualServer recurso está disponível no
Importante: certifique-se de atualizar o nome de domínio do aplicativo, o segredo do certificado e o nome do serviço do aplicativo no arquivo | AWS DevOps |
Verifique NGINX VirtualServer se foi criado. | Digite o comando a seguir
Observação: verifique se a coluna | AWS DevOps |
Implante o servidor NGINX web com TLS ativado. | Esse padrão usa um servidor NGINX web TLS habilitado como aplicativo para testar a end-to-end criptografia. Os arquivos de configuração necessários para implantar o aplicativo de teste estão disponíveis no diretório Execute o seguinte comando no
| AWS DevOps |
Verifique se os recursos do aplicativo de teste foram criados. | Insira os seguintes comandos
| AWS DevOps |
Valide o aplicativo. |
| AWS DevOps |
Recursos relacionados
AWSrecursos
Criar registros usando o console do Amazon Route 53 (documentação do Amazon Route 53)
Usando um Network Load Balancer com o controlador de NGINX entrada na Amazon EKS (AWSpostagem no
blog)
Outros recursos
Route 53
(documentação do gerenciador de certificado) Configurando o DNS 01 Challenge Provider
(documentação do cert-manager) DNSDesafio do Let's Encrypt
(documentação do Let's Encrypt)