

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.

# Sécurisez les charges de travail Kubernetes avec les certificats ACM
<a name="exportable-certificates-kubernetes"></a>

Vous pouvez utiliser des certificats publics AWS Certificate Manager exportables avec AWS Controllers for Kubernetes (ACK) pour émettre et exporter des certificats TLS publics depuis ACM vers vos charges de travail Kubernetes. Cette intégration vous permet de sécuriser les pods Amazon Elastic Kubernetes Service (Amazon EKS) et de mettre fin au protocole TLS à votre entrée Kubernetes. Pour commencer, consultez le [contrôleur ACM pour Kubernetes](https://github.com/aws-controllers-k8s/acm-controller) activé. GitHub

AWS Controllers for Kubernetes (ACK) étend l'API Kubernetes pour gérer AWS les ressources à l'aide de manifestes Kubernetes natifs. Le contrôleur de service ACK pour ACM fournit une gestion automatisée du cycle de vie des certificats au sein de votre flux de travail Kubernetes. Lorsque vous créez une ressource de certificat ACM dans Kubernetes, le contrôleur ACK exécute les actions suivantes :

1. Demande un certificat à ACM, qui génère la demande de signature de certificat (CSR).

1. Attend que la validation du domaine soit terminée et qu'ACM délivre le certificat.

1. Si le `exportTo` champ est spécifié, exporte le certificat et la clé privée émis et les stocke dans le Kubernetes Secret que vous avez spécifié.

1. Si le `exportTo` champ est spécifié et que le certificat est éligible au renouvellement, met à jour le Kubernetes Secret avec les certificats renouvelés avant leur expiration.

Les certificats émis publiquement nécessitent la [validation du domaine](https://docs.aws.amazon.com//acm/latest/userguide/dns-validation.html) avant qu'ACM puisse les délivrer. Vous pouvez utiliser le [contrôleur de service ACK pour Amazon Route 53](https://github.com/aws-controllers-k8s/route53-controller) afin de créer automatiquement les enregistrements CNAME de validation DNS requis dans votre zone hébergée.

## Options d'utilisation des certificats
<a name="kubernetes-ack-certificate-usage"></a>

Vous pouvez utiliser les certificats ACM avec Kubernetes de différentes manières :

![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/acm/latest/userguide/images/kubernetes-acm.png)


1. *Arrêt de l'équilibreur de charge (sans exportation)* : émettez des certificats via ACK et utilisez-les pour mettre fin au protocole TLS sur un équilibreur de AWS charge. Le certificat reste dans ACM et est automatiquement découvert par le [AWS Load Balancer](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.1/guide/ingress/cert_discovery/) Controller. Cette approche ne nécessite pas d'exporter le certificat.

1. *Terminaison d'entrée (avec exportation)* : exportez les certificats depuis ACM et stockez-les dans Kubernetes Secrets pour la terminaison TLS au niveau de l'entrée. Cela vous permet d'utiliser des certificats directement dans vos charges de travail Kubernetes.

**Note**  
Pour les cas d'utilisation nécessitant des certificats privés, consultez [AWS Private CA Connector for Kubernetes](https://docs.aws.amazon.com//privateca/latest/userguide/PcaKubernetes-concepts.html), un plugin de gestionnaire de certificats.

## Conditions préalables
<a name="kubernetes-ack-prerequisites"></a>

Avant d'installer le contrôleur de service ACK pour ACM, assurez-vous de disposer des éléments suivants :
+ Un cluster Kubernetes.
+ Casque installé.
+ `kubectl` configuré pour communiquer avec votre cluster.
+ `eksctl`installé pour configurer les associations d'identité des pods sur EKS.

## Installation du contrôleur de service ACK pour ACM
<a name="kubernetes-ack-installation"></a>

Utilisez Helm pour installer le contrôleur de service ACK pour ACM dans votre cluster Amazon EKS.

1. Créez un espace de noms pour le contrôleur ACK.

   ```
   $ kubectl create namespace ack-system --dry-run=client -o yaml | kubectl apply -f -
   ```

1. Créez une association d'identité de pod pour le contrôleur ACK. *CLUSTER\$1NAME*Remplacez-le par le nom de votre cluster et *REGION* par votre AWS région.

   ```
   $ eksctl create podidentityassociation --cluster CLUSTER_NAME --region REGION \
       --namespace ack-system \
       --create-service-account \
       --service-account-name ack-acm-controller \
       --permission-policy-arns arn:aws:iam::aws:policy/AWSCertificateManagerFullAccess
   ```

1. Connectez-vous au registre public Amazon ECR.

   ```
   $ aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws
   ```

1. Installez le contrôleur de service ACK pour ACM. Remplacez *REGION* par votre AWS région.

   ```
   $ helm install -n ack-system ack-acm-controller oci://public.ecr.aws/aws-controllers-k8s/acm-chart --set serviceAccount.create=false --set serviceAccount.name=ack-acm-controller --set aws.region=REGION
   ```

1. Vérifiez que le contrôleur fonctionne.

   ```
   $ kubectl get pods -n ack-system
   ```

Pour plus d'informations sur les associations d'identité des pods, consultez [EKS Pod Identity](https://docs.aws.amazon.com//eks/latest/userguide/pod-identities.html) dans le *guide de l'utilisateur Amazon EKS*.

## Exemple : mettre fin au protocole TLS à l'entrée
<a name="kubernetes-ack-example"></a>

L'exemple suivant montre comment exporter un certificat ACM et l'utiliser pour mettre fin au protocole TLS au niveau de Kubernetes Ingress. Cette configuration crée un certificat ACM, l'exporte vers un Kubernetes Secret et configure une ressource Ingress pour utiliser le certificat pour la terminaison TLS.

Dans cet exemple :
+ Le secret est créé pour stocker le certificat exporté (`exported-cert-secret`)
+ La ressource de certificat ACK demande un certificat à ACM pour votre domaine et l'exporte vers le `exported-cert-secret` Secret.
+ La ressource Ingress fait référence au TLS `exported-cert-secret` pour mettre fin au trafic entrant.

`${HOSTNAME}`Remplacez-le par votre nom de domaine.

```
apiVersion: v1
kind: Secret
type: kubernetes.io/tls
metadata:
  name: exported-cert-secret
  namespace: demo-app
data:
  tls.crt: ""
  tls.key: ""
---
apiVersion: acm.services.k8s.aws/v1alpha1
kind: Certificate
metadata:
  name: exportable-public-cert
  namespace: demo-app
spec:
  domainName: ${HOSTNAME}
  options:
    certificateTransparencyLoggingPreference: ENABLED
  exportTo: 
    namespace: demo-app
    name: exported-cert-secret
    key: tls.crt
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-traefik
  namespace: demo-app
spec:
  tls:
  - hosts:
    - ${HOSTNAME}
    secretName: exported-cert-secret
  ingressClassName: traefik
  rules:
  - host: ${HOSTNAME}
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: whoami
            port:
              number: 80
```

Une fois déployé, le contrôleur de service ACK pour ACM gère automatiquement le cycle de vie des certificats, y compris les renouvellements. Lorsqu'ACM renouvelle le certificat, le contrôleur met à jour le `exported-cert-secret` secret avec le nouveau certificat, garantissant ainsi que votre Ingress continue d'utiliser des certificats valides sans intervention manuelle.