

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á.

# Configurar a autenticação de TLS mútuo para aplicativos em execução no Amazon EKS
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Resumo
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-summary"></a>

O Transport Layer Security (TLS) mútuo baseado em certificado é um componente opcional do TLS que fornece autenticação bidirecional entre servidores e clientes. Com o TLS mútuo, os clientes devem fornecer um certificado X.509 durante o processo de negociação da sessão. O servidor usa esse certificado para identificar e autenticar o cliente.

O TLS mútuo é um requisito comum para aplicativos da Internet das Coisas (IoT) e pode ser usado business-to-business para aplicativos ou padrões [como](https://docs.aws.amazon.com/wellarchitected/latest/financial-services-industry-lens/open-banking.html) o Open Banking.

Esse padrão descreve como configurar o TLS mútuo para aplicativos em execução em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) usando um controlador de entrada NGINX. Você pode habilitar atributos de TLS mútuos integrados para o controlador de entrada NGINX anotando o recurso de entrada. Para obter mais informações sobre anotações de TLS mútuas em controladores NGINX, consulte [Autenticação de certificado de cliente](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#client-certificate-authentication) na documentação do Kubernetes.

**Importante**  
Esse padrão usa certificados autoassinados. Recomendamos que você use esse padrão apenas com clusters de teste e não em ambientes de produção. Se quiser usar esse padrão em um ambiente de produção, você pode usar a [AWS Private Certificate Authority (AWS Private CA)](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) ou seu padrão existente de infraestrutura de chave pública (PKI) para emitir certificados privados.

## Pré-requisitos e limitações
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-prereqs"></a>

**Pré-requisitos **
+ Uma conta ativa da Amazon Web Services (AWS).
+ Um cluster do Amazon EKS existente.
+ AWS Command Line Interface (AWS CLI) versão 1.7 ou superior, instalada e configurada no macOS, Linux ou Windows.
+ O utilitário de linha de comando kubectl, instalado e configurado para acessar o cluster do Amazon EKS. Para obter mais informações , consulte [Instalação do kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) na documentação do Amazon EKS.
+ Um nome de Sistema de Nomes de Domínio (DNS) existente para testar o aplicativo.

**Limitações**
+ Esse padrão usa certificados autoassinados. Recomendamos que você use esse padrão apenas com clusters de teste e não em ambientes de produção.

## Arquitetura
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-architecture"></a>

![Configurar a autenticação de TLS mútuo para aplicativos em execução no Amazon EKS](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/ae2761e3-7ed2-4c2a-ba54-a4ddce8a1e7e/images/cefc60f9-2f29-4052-b7ae-df4eb6395e1c.png)


**Pilha de tecnologia**
+ Amazon EKS
+ Amazon Route 53
+ Kubectl

## Ferramentas
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-tools"></a>
+ O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.
+ O [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) é um serviço web de DNS altamente disponível e escalável.
+ [Kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) é um utilitário de linha de comando que você usa para interagir com um cluster do Amazon EKS.

## Épicos
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-epics"></a>

### Gerar os certificados autoassinados
<a name="generate-the-self-signed-certificates"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Gerar o certificado e a chave de CA. | Gere a chave e o certificado da autoridade de certificação (CA) executando o comando a seguir.<pre>openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 356 -nodes -subj '/CN=Test Cert Authority'</pre> | DevOps engenheiro | 
| Gerar a chave e o certificado do servidor e assinar com o certificado CA. | Gerar a chave e o certificado do servidor e assinar com o certificado CA, executando o seguinte comando.<pre>openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN= <your_domain_name> ' && openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt</pre>Certifique-se de substituir `<your_domain_name>` pelo seu nome de domínio existente. | DevOps engenheiro | 
|  Gerar a chave e o certificado de cliente e assinar com o certificado CA. | Gere a chave e o certificado do cliente e assine com o certificado CA, executando os seguintes comandos.<pre>openssl req -new -newkey rsa:4096 -keyout client.key -out client.csr -nodes -subj '/CN=Test' && openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt</pre> | DevOps engenheiro | 

### Implementar o controlador de entrada NGINX
<a name="deploy-the-nginx-ingress-controller"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implantar o controlador de entrada do NGINX no seu cluster do Amazon EKS. | Implante o controlador de entrada do NGINX com o comando a seguir.<pre>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/aws/deploy.yaml</pre> | DevOps engenheiro | 
|  Verificar se o serviço do controlador de entrada do NGINX está em execução. | Verifique se o serviço do controlador de entrada do NGINX está em execução.<pre>kubectl get svc -n ingress-nginx</pre>Certifique-se de que o campo do endereço de serviço contenha o nome de domínio do Network Load Balancer. | DevOps engenheiro | 

### Criar um namespace no cluster do Amazon EKS para testar o TLS mútuo
<a name="create-a-namespace-in-the-amazon-eks-cluster-to-test-mutual-tls"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um namespace no cluster do Amazon EKS.  | Crie um namespace chamado `mtls` no seu cluster do Amazon EKS, executando o comando a seguir. <pre>kubectl create ns mtls</pre><br />Isso implanta o aplicativo de exemplo para testar o TLS mútuo. | DevOps engenheiro | 

### Criar a implantação e o serviço para o aplicativo de exemplo
<a name="create-the-deployment-and-service-for-the-sample-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar a implantação e o serviço do Kubernetes no namespace mtls. | Crie um arquivo chamado `mtls.yaml`. Cole o seguinte código no arquivo. <pre>kind: Deployment<br />apiVersion: apps/v1<br />metadata:<br />  name: mtls-app<br />  labels:<br />    app: mtls<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: mtls<br />  template:<br />    metadata:<br />      labels:<br />        app: mtls<br />    spec:<br />      containers:<br />      - name: mtls-app<br />        image: hashicorp/http-echo<br />        args:<br />          - "-text=mTLS is working"<br /><br /><br />---<br /><br />kind: Service<br />apiVersion: v1<br />metadata:<br />  name: mtls-service<br />spec:<br />  selector:<br />    app: mtls<br />  ports:<br />    - port: 5678 # Default port for image</pre><br /> Crie a implantação e o serviço do Kubernetes no `mtls` namespace, executando o comando a seguir.<pre>kubectl create -f mtls.yaml -n mtls</pre> | DevOps engenheiro | 
| Verificar se a implantação do Kubernetes foi criada. | Execute o comando a seguir para verificar se a implantação foi criada e se tem um pod no status disponível.<pre>kubectl get deploy -n mtls</pre> | DevOps engenheiro | 
| Verificar se o serviço Kubernetes foi criado. | Verifique se o serviço do Kubernetes foi criado, executando o comando a seguir.<pre>kubectl get service -n mtls</pre> | DevOps engenheiro | 

### Criar um segredo no namespace mtls
<a name="create-a-secret-in-the-mtls-namespace"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um segredo para o recurso de entrada. | Execute o comando a seguir para criar um segredo para o controlador de entrada NGINX usando os certificados que você criou anteriormente.<pre>kubectl create secret generic mtls-certs --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt -n mtls </pre><br />Seu segredo tem um certificado de servidor para o cliente identificar o servidor e um certificado CA para o servidor verificar os certificados do cliente. | DevOps engenheiro | 

### Criar o recurso de entrada no namespace mtls
<a name="create-the-ingress-resource-in-the-mtls-namespace"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar o recurso de ingresso no namespace mtls. | Crie um arquivo chamado `ingress.yaml`. Cole o código a seguir no arquivo (substitua `<your_domain_name>` pelo nome de domínio existente).<pre>apiVersion: networking.k8s.io/v1<br />kind: Ingress<br />metadata:<br />  annotations:<br />    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"<br />    nginx.ingress.kubernetes.io/auth-tls-secret: mtls/mtls-certs<br />  name: mtls-ingress<br />spec:<br />  ingressClassName: nginx<br />  rules:<br />  - host: "*.<your_domain_name>"<br />    http:<br />      paths:<br />      - path: /<br />        pathType: Prefix<br />        backend:<br />          service:<br />            name: mtls-service<br />            port:<br />              number: 5678<br />  tls:<br />  - hosts:<br />    - "*.<your_domain_name>"<br />    secretName: mtls-certs</pre><br />Crie o recurso de entrada no namespace `mtls` executando o comando a seguir.<pre>kubectl create -f ingress.yaml -n mtls</pre><br />Isso significa que o controlador de ingresso NGINX pode rotear o tráfego para seu aplicativo de exemplo. | DevOps engenheiro | 
| Verificar se o recurso de ingresso foi criado. | Verifique se o recurso de ingresso foi criado, executando o comando a seguir.<pre>kubectl get ing -n mtls</pre>Certifique-se de que o endereço do recurso de entrada exiba o balanceador de carga criado para o controlador de entrada NGINX. | DevOps engenheiro | 

### Configurar o DNS para apontar o nome do host para o balanceador de carga
<a name="configure-dns-to-point-the-hostname-to-the-load-balancer"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um registro CNAME que aponte para o balanceador de carga do controlador de entrada NGINX. | Faça login no Console de Gerenciamento da AWS, abra o console do Amazon Route 53 e crie um registro de nome canônico (CNAME) que aponta `mtls.<your_domain_name>` para o balanceador de carga do controlador de entrada NGINX.<br />Para obter informações, consulte [Criar registros usando o console do Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) no Guia do desenvolvedor do Amazon Route 53. | DevOps engenheiro | 

### Teste a aplicação
<a name="test-the-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Testar a configuração de TLS mútuo sem certificados. | Execute o comando a seguir.<pre>curl -k https://mtls.<your_domain_name> </pre><br />Você deve receber a resposta de erro “400 Nenhum certificado SSL obrigatório foi enviado”. | DevOps engenheiro | 
| Testar a configuração de TS mútuo com certificados. | Execute o comando a seguir.<pre>curl -k https://mtls.<your_domain_name> --cert client.crt --key client.key</pre><br />Você deve receber a resposta “O mTLS está processando”. | DevOps engenheiro | 

## Recursos relacionados
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-resources"></a>
+ [Criar registros usando o console do Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html)
+ [Usar um Network Load Balancer com o controlador de entrada NGINX no Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/)
+ [Autenticação de certificado de cliente](https://kubernetes.github.io/ingress-nginx/examples/auth/client-certs/)