View a markdown version of this page

Sécurisez les charges de travail Kubernetes avec des certificats ACM - AWS Gestionnaire de certificats

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 des certificats ACM

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 sur votre Kubernetes Ingress. Pour commencer, consultez le contrôleur ACM pour Kubernetes sur. GitHub

Astuce

Si vous utilisez cert-manager ou un autre client ACME standard dans votre cluster Kubernetes, vous pouvez automatiser l'émission de certificats depuis ACM via le protocole ACME. Dans cette approche, le client ACME génère et conserve la clé privée. Pour de plus amples informations, veuillez consulter Automatisation des certificats ACME.

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 dans le cadre de votre flux de travail Kubernetes. Lorsque vous créez une ressource de certificat ACM dans Kubernetes, le contrôleur ACK effectue les actions suivantes :

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

  2. Attend que la validation du domaine soit terminée et qu'ACM émette le certificat.

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

  4. Si le exportTo champ est spécifié et que le certificat peut être renouvelé, met à jour le Kubernetes Secret avec les certificats renouvelés avant leur expiration.

Les certificats émis publiquement nécessitent une validation du domaine avant qu'ACM puisse les émettre. Vous pouvez utiliser le contrôleur de service ACK pour Amazon Route 53 afin de créer automatiquement les enregistrements CNAME de validation DNS requis dans votre zone hébergée.

Options d'utilisation des certificats

Vous pouvez utiliser les certificats ACM avec Kubernetes de plusieurs manières :

ELB se connecte à Ingress, qui achemine le trafic vers le service en répartissant le trafic sur les Pod1, Pod2 et Pod3.
  1. Fin de l'équilibreur de charge (sans exportation)  : émettez des certificats via ACK et utilisez-les pour terminer le protocole TLS sur un équilibreur de AWS charge. Le certificat reste dans ACM et est automatiquement découvert par le AWS Load Balancer Controller. Cette approche ne nécessite pas l'exportation du certificat.

  2. Terminaison d'entrée (avec exportation)  : exportez des certificats depuis ACM et stockez-les dans Kubernetes Secrets pour une 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 pour Kubernetes, un plugin de gestion de certificats.

Conditions préalables

Avant d'installer le contrôleur de service ACK pour ACM, assurez-vous de disposer des éléments suivants :

  • Un cluster Kubernetes.

  • Helm installé.

  • kubectl configuré pour communiquer avec votre cluster.

  • eksctlinstallé pour configurer les associations d'identité des pods sur EKS.

Installation du contrôleur de service ACK pour ACM

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 -
  2. Créez une association d'identité de pod pour le contrôleur ACK. CLUSTER_NAMERemplacez-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
  3. 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
  4. 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
  5. Vérifiez que le contrôleur fonctionne.

    $ kubectl get pods -n ack-system

Pour plus d'informations sur les associations d'identité de pod, consultez EKS Pod Identity dans le guide de l'utilisateur Amazon EKS.

Exemple : terminer le protocole TLS à l'entrée

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 secret Kubernetes et configure une ressource d'entrée pour utiliser le certificat pour la terminaison TLS.

Dans cet exemple :

  • Un secret est créé pour stocker le certificat exporté (exported-cert-secret)

  • La ressource ACK Certificate demande un certificat à ACM pour votre domaine et l'exporte vers le exported-cert-secret Secret.

  • La ressource Ingress fait référence exported-cert-secret au TLS pour terminer le 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. Lorsque ACM renouvelle le certificat, le contrôleur met à jour le exported-cert-secret secret avec le nouveau certificat, garantissant ainsi que votre Ingress continue à utiliser des certificats valides sans intervention manuelle.