

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configurer le end-to-end chiffrement des applications sur Amazon EKS à l'aide du gestionnaire de certificats et de Let's Encrypt
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt"></a>

*Mahendra Evasiddappa et Vasanth Jeyaraj, Amazon Web Services*

## Résumé
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-summary"></a>

La mise en œuvre du end-to-end chiffrement peut être complexe et vous devez gérer les certificats pour chaque actif de votre architecture de microservices. Bien que vous puissiez mettre fin à la connexion TLS (Transport Layer Security) à la périphérie du réseau Amazon Web Services (AWS) à l'aide d'un Network Load Balancer ou d'Amazon API Gateway, certaines organisations end-to-end exigent le chiffrement.

Ce modèle utilise le contrôleur d'entrée NGINX pour l'entrée. En effet, lorsque vous créez une entrée Kubernetes, la ressource d'entrée utilise un Network Load Balancer. Le Network Load Balancer n'autorise pas le téléchargement de certificats clients. Par conséquent, vous ne pouvez pas obtenir un TLS mutuel avec Kubernetes Ingress.

Ce modèle est destiné aux organisations qui ont besoin d'une authentification mutuelle entre tous les microservices de leurs applications. Le protocole TLS mutuel réduit le fardeau lié à la gestion des noms d'utilisateur ou des mots de passe et peut également utiliser le cadre de sécurité clé en main. L'approche de ce modèle est compatible si votre entreprise possède un grand nombre d'appareils connectés ou doit se conformer à des directives de sécurité strictes.

Ce modèle permet d'améliorer le niveau de sécurité de votre entreprise en implémentant le end-to-end chiffrement pour les applications exécutées sur Amazon Elastic Kubernetes Service (Amazon EKS). Ce modèle fournit un exemple d'application et de code dans le référentiel de GitHub [End-to-end chiffrement sur Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme) pour montrer comment un microservice fonctionne avec le end-to-end chiffrement sur Amazon EKS. L'approche du modèle utilise [cert-manager](https://cert-manager.io/docs/), un module complémentaire de Kubernetes, avec [Let's Encrypt](https://letsencrypt.org/) comme autorité de certification (CA). Let's Encrypt est une solution rentable pour gérer les certificats et fournit des certificats gratuits valables pendant 90 jours. Cert-Manager automatise le provisionnement à la demande et la rotation des certificats lorsqu'un nouveau microservice est déployé sur Amazon EKS. 

**Public visé**

Ce modèle est recommandé aux utilisateurs qui ont de l'expérience avec Kubernetes, TLS, Amazon Route 53 et le système de noms de domaine (DNS).

## Conditions préalables et limitations
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Un cluster Amazon EKS existant.
+ Interface de ligne de commande AWS (AWS CLI) version 1.7 ou ultérieure, installée et configurée sur macOS, Linux ou Windows.
+ L'utilitaire de ligne de `kubectl` commande, installé et configuré pour accéder au cluster Amazon EKS. Pour plus d'informations à ce sujet, consultez la section [Installation de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dans la documentation Amazon EKS.
+ Nom DNS existant pour tester l'application. Pour plus d'informations à ce sujet, consultez la section [Enregistrement de noms de domaine à l'aide d'Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) dans la documentation Amazon Route 53. 
+ La dernière version de [Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html), installée sur votre machine locale. Pour plus d'informations à ce sujet, consultez la section [Utilisation de Helm avec Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) dans la documentation Amazon EKS et dans le référentiel GitHub [Helm](https://github.com/helm/helm). 
+ Le GitHub [End-to-end chiffrement sur le référentiel Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme), cloné sur votre machine locale. 
+ Remplacez les valeurs suivantes dans les `trustpolicy.json` fichiers `policy.json` et du référentiel de GitHub [End-to-end chiffrement cloné sur Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme) :
  + `<account number>`— Remplacez-le par l'ID de compte AWS du compte dans lequel vous souhaitez déployer la solution. 
  + `<zone id>`— Remplacez par l'ID de zone Route 53 du nom de domaine. 
  + `<node_group_role>`— Remplacez par le nom du rôle AWS Identity and Access Management (IAM) associé aux nœuds Amazon EKS.
  + `<namespace>`— Remplacez par l'espace de noms Kubernetes dans lequel vous déployez le NGINX Ingress Controller et l'exemple d'application.
  + `<application-domain-name>`— Remplacez par le nom de domaine DNS de Route 53.

**Limites**
+ Ce modèle ne décrit pas comment alterner les certificats et montre uniquement comment utiliser les certificats avec des microservices sur Amazon EKS. 

## Architecture
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-architecture"></a>

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![Flux de travail pour configurer le chiffrement des applications sur Amazon EKS à l'aide du gestionnaire de certificats et de Let's Encrypt.](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/9aa3ee9e-73db-41f5-a467-b5c47fef496e/images/40692ede-6fb3-474e-8c9e-85c51529e8ad.png)


Le schéma suivant illustre le flux de travail suivant :

1. Un client envoie une demande d'accès à l'application au nom DNS.

1. L'enregistrement Route 53 est un CNAME pour le Network Load Balancer.

1. Le Network Load Balancer transmet la demande au NGINX Ingress Controller configuré avec un écouteur TLS. La communication entre le NGINX Ingress Controller et le Network Load Balancer suit le protocole HTTPS.

1. Le NGINX Ingress Controller effectue un routage basé sur le chemin en fonction de la demande du client au service d'application.

1. Le service d'application transmet la demande au module d'application. L'application est conçue pour utiliser le même certificat en appelant des secrets.

1. Les pods exécutent l'exemple d'application à l'aide des certificats cert-manager. La communication entre le NGINX Ingress Controller et les pods utilise le protocole HTTPS.


| 
| 
| Remarque : Cert-Manager s'exécute dans son propre espace de noms. Il utilise un rôle de cluster Kubernetes pour fournir des certificats sous forme de secrets dans des espaces de noms spécifiques. Vous pouvez associer ces espaces de noms aux modules d'application et au NGINX Ingress Controller.  | 
| --- |

## Outils
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-tools"></a>

**Services AWS**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) est un service géré que vous pouvez utiliser pour exécuter Kubernetes sur AWS sans avoir à installer, exploiter et gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribue automatiquement votre trafic entrant sur plusieurs cibles, conteneurs et adresses IP.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) est un service Web DNS hautement disponible et évolutif.

**Autres outils**
+ [cert-manager](https://cert-manager.io/docs/installation/supported-releases/) est un module complémentaire de Kubernetes qui demande des certificats, les distribue aux conteneurs Kubernetes et automatise le renouvellement des certificats.
+ [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/) est une solution de gestion du trafic pour les applications cloud natives dans Kubernetes et les environnements conteneurisés.

## Épopées
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-epics"></a>

### Création et configuration d'une zone hébergée publique avec Route 53
<a name="create-and-configure-a-public-hosted-zone-with-route-53"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une zone hébergée publique sur Route 53. | Connectez-vous à l'AWS Management Console, ouvrez la console Amazon Route 53, choisissez **Hosted zones**, puis **Create hosted zone**. Créez une zone hébergée publique et enregistrez l'ID de zone. Pour plus d'informations à ce sujet, consultez [la section Création d'une zone hébergée publique](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) dans la documentation Amazon Route 53.ACME DNS01 utilise le fournisseur DNS pour demander au gestionnaire de certificats de délivrer le certificat. Ce défi vous demande de prouver que vous contrôlez le DNS de votre nom de domaine en saisissant une valeur spécifique dans un enregistrement TXT sous ce nom de domaine. Une fois que Let's Encrypt a fourni un jeton à votre client ACME, celui-ci crée un enregistrement TXT dérivé de ce jeton et de votre clé de compte, et place cet enregistrement à. `_acme-challenge.<YOURDOMAIN>` Let's Encrypt interroge ensuite le DNS pour cet enregistrement. S'il trouve une correspondance, vous pouvez procéder à l'émission d'un certificat. | AWS DevOps | 

### Configurer un rôle IAM pour autoriser le gestionnaire de certificats à accéder à la zone hébergée publique
<a name="configure-an-iam-role-to-allow-cert-manager-to-access-the-public-hosted-zone"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la politique IAM pour cert-manager.  | Une politique IAM est requise pour fournir à cert-manager l'autorisation de valider que vous êtes propriétaire du domaine Route 53. L'`policy.json`exemple de politique IAM est fourni dans le `1-IAMRole` répertoire du référentiel de GitHub [End-to-end chiffrement cloné sur Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme).<br />Entrez la commande suivante dans l'AWS CLI pour créer la politique IAM.<pre>aws iam create-policy \<br />  --policy-name PolicyForCertManager \<br />  --policy-document file://policy.json</pre> | AWS DevOps | 
| Créez le rôle IAM pour cert-manager. | Après avoir créé la politique IAM, vous devez créer un rôle IAM. L'`trustpolicy.json`exemple de rôle IAM est fourni dans le `1-IAMRole` répertoire.<br />Entrez la commande suivante dans l'AWS CLI pour créer le rôle IAM.<pre>aws iam create-role \<br />  --role-name RoleForCertManager \<br />  --assume-role-policy-document file://trustpolicy.json</pre> | AWS DevOps | 
| Attachez la stratégie au rôle. | Entrez la commande suivante dans l'AWS CLI pour associer la politique IAM au rôle IAM. `AWS_ACCOUNT_ID`Remplacez-le par l'ID de votre compte AWS. <pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/PolicyForCertManager \<br />  --role-name RoleForCertManager</pre> | AWS DevOps | 

### Configurer le contrôleur d'entrée NGINX dans Amazon EKS
<a name="set-up-the-nginx-ingress-controller-in-amazon-eks"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez le NGINX Ingress Controller. | Installez la version la plus récente d'`nginx-ingress`utilisation de Helm. Vous pouvez modifier la `nginx-ingress` configuration en fonction de vos besoins avant de la déployer. Ce modèle utilise un Network Load Balancer annoté et orienté vers l'interne, disponible dans le répertoire. `5-Nginx-Ingress-Controller` <br />Installez le NGINX Ingress Controller en exécutant la commande Helm suivante depuis le répertoire. `5-Nginx-Ingress-Controller`<br />`helm install test-nginx nginx-stable/nginx-ingress  -f  5-Nginx-Ingress-Controller/values_internal_nlb.yaml` | AWS DevOps | 
| Vérifiez que le NGINX Ingress Controller est installé. | Entrez la commande `helm list`. La sortie doit indiquer que le NGINX Ingress Controller est installé. | AWS DevOps | 
| Créez un enregistrement Route 53 A. | L'enregistrement A pointe vers le Network Load Balancer créé par NGINX Ingress Controller.[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

### Configurer NGINX VirtualServer sur Amazon EKS
<a name="set-up-nginx-virtualserver-on-amazon-eks"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez NGINX VirtualServer. | La VirtualServer ressource NGINX est une configuration d'équilibrage de charge qui constitue une alternative à la ressource d'entrée. La configuration permettant de créer la VirtualServer ressource NGINX est disponible dans le `nginx_virtualserver.yaml` fichier du répertoire. `6-Nginx-Virtual-Server` Entrez la commande suivante `kubectl` pour créer la ressource NGINX VirtualServer .<br />`kubectl apply -f  nginx_virtualserver.yaml`Assurez-vous de mettre à jour le nom de domaine de l'application, le secret du certificat et le nom du service de l'application dans le `nginx_virtualserver.yaml` fichier. | AWS DevOps | 
| Vérifiez que NGINX VirtualServer est créé. | Entrez la commande suivante `kubectl` pour vérifier que la VirtualServer ressource NGINX a été créée avec succès.<br />`kubectl get virtualserver`Vérifiez que la `Host` colonne correspond au nom de domaine de votre application. | AWS DevOps | 
| Déployez le serveur Web NGINX avec le protocole TLS activé. | Ce modèle utilise un serveur Web NGINX avec TLS activé comme application pour tester le chiffrement. end-to-end Les fichiers de configuration requis pour déployer l'application de test sont disponibles dans le `demo-webserver` répertoire. <br />Entrez la commande suivante `kubectl` pour déployer l'application de test.<br />`kubectl apply -f nginx-tls-ap.yaml` | AWS DevOps | 
| Vérifiez que les ressources de l'application de test sont créées. | Entrez les commandes suivantes `kubectl` pour vérifier que les ressources requises sont créées pour l'application de test :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 
| Validez l'application. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

## Ressources connexes
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-resources"></a>

**Ressources AWS**
+ [Création d'enregistrements à l'aide de la console Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) (documentation Amazon Route 53)
+ [Utilisation d'un Network Load Balancer avec le contrôleur d'entrée NGINX sur Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/) (article de blog AWS)

**Autres ressources**
+ [Route 53](https://cert-manager.io/docs/configuration/acme/dns01/route53/) (documentation du gestionnaire de certificats)
+ [Configuration du fournisseur de défis DNS01](https://cert-manager.io/docs/configuration/acme/dns01/) (documentation du gestionnaire de certificats)
+ [Défi DNS Let's Encrypt](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) (documentation Let's Encrypt)