

 **Aidez à améliorer cette page** 

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.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien **Modifier cette page sur** qui se trouve dans le volet droit de chaque page.

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.

# Configuration du plug-in Amazon VPC CNI pour utiliser IRSA
<a name="cni-iam-role"></a>

Le [plug-in Amazon VPC CNI pour Kubernetes](https://github.com/aws/amazon-vpc-cni-k8s) est le plug-in de mise en réseau des pods dans les clusters Amazon EKS. Le plug-in est chargé d’attribuer des adresses IP VPC aux nœuds Kubernetes et de configurer la mise en réseau nécessaire pour les pods sur chaque nœud.

**Note**  
Le plug-in Amazon VPC CNI prend également en charge les identités des pods Amazon EKS. Pour de plus amples informations, veuillez consulter [Attribuer un rôle IAM à un compte de service Kubernetes](pod-id-association.md).

Le plugin :
+ Nécessite des autorisations AWS Identity and Access Management (IAM). Si votre cluster utilise la `IPv4` famille, les autorisations sont spécifiées dans la politique [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html) AWS gérée. Si votre cluster utilise la famille `IPv6`, les autorisations doivent être ajoutées à une politique IAM que vous créez. Pour les instructions, consultez [Créer une politique IAM pour les clusters qui utilisent la famille `IPv6`](#cni-iam-role-create-ipv6-policy). Vous pouvez attacher cette politique au rôle IAM de nœud Amazon EKS ou à un rôle IAM distinct. Pour savoir comment attacher la politique au rôle IAM du nœud Amazon EKS, consultez [Rôle IAM de nœud Amazon EKS](create-node-role.md). Nous vous recommandons de l'affecter à un rôle séparé, comme détaillé dans cette rubrique.
+ Lors de son déploiement, le plug-in crée et est configuré pour utiliser un compte de service Kubernetes nommé `aws-node`. Le compte de service est lié à un `clusterrole` Kubernetes nommé `aws-node`, qui reçoit les autorisations Kubernetes requises.

**Note**  
Les pods du plug-in Amazon VPC CNI pour Kubernetes héritent des autorisations du [rôle IAM du nœud Amazon EKS](create-node-role.md), sauf si l’accès à IMDS est bloqué. Pour plus d'informations, consultez [Restreindre l'accès au profil d'instance affecté au composant master](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node).
+ Exige un cluster Amazon EKS existant. Pour en déployer un, consultez [Mise en route avec Amazon EKS](getting-started.md).
+ Nécessite un fournisseur de gestion des AWS identités et des accès (IAM) (IAM) (IAM) OpenID Connect (OIDC) existant pour votre cluster. Pour déterminer si vous en avez déjà un, ou pour en créer un, consultez [Créer un fournisseur d'identité OIDC IAM pour votre cluster](enable-iam-roles-for-service-accounts.md).

## Étape 1 : créer le rôle IAM du plug-in Amazon VPC CNI pour Kubernetes
<a name="cni-iam-role-create-role"></a>

1. Déterminez la famille d'adresses IP de votre cluster.

   ```
   aws eks describe-cluster --name my-cluster | grep ipFamily
   ```

   L'exemple qui suit illustre un résultat.

   ```
   "ipFamily": "ipv4"
   ```

   La sortie peut renvoyer `ipv6` à la place.

1. Créez le rôle IAM. Vous pouvez utiliser `eksctl` ou `kubectl` et la AWS CLI pour créer votre rôle IAM.  
eksctl  
   + Créez un rôle IAM et attachez la politique IAM au rôle avec la commande qui correspond à la famille d'adresses IP de votre cluster. La commande crée et déploie une AWS CloudFormation pile qui crée un rôle IAM, y attache la politique que vous spécifiez et annote le compte de `aws-node` service Kubernetes existant avec l'ARN du rôle IAM créé.
     +  `IPv4` 

       Remplacez *my-cluster* par votre propre valeur.

       ```
       eksctl create iamserviceaccount \
           --name aws-node \
           --namespace kube-system \
           --cluster my-cluster \
           --role-name AmazonEKSVPCCNIRole \
           --attach-policy-arn arn:aws: iam::aws:policy/AmazonEKS_CNI_Policy \
           --override-existing-serviceaccounts \
           --approve
       ```
     +  `IPv6` 

       Remplacez *my-cluster* par votre propre valeur. Remplacez *111122223333* par l'ID de votre compte et remplacez *AmazonEKS\$1CNI\$1IPv6\$1Policy* par le nom de votre politique `IPv6`. Si vous ne disposez pas d’une politique `IPv6`, consultez [Créer une politique IAM pour les clusters qui utilisent la famille `IPv6`](#cni-iam-role-create-ipv6-policy) pour en créer une. Pour utiliser `IPv6` avec votre cluster, ce dernier doit répondre à plusieurs exigences. Pour de plus amples informations, veuillez consulter [En savoir plus sur IPv6 les adresses des clusters, des pods et des services](cni-ipv6.md).

       ```
       eksctl create iamserviceaccount \
           --name aws-node \
           --namespace kube-system \
           --cluster my-cluster \
           --role-name AmazonEKSVPCCNIRole \
           --attach-policy-arn arn:aws: iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \
           --override-existing-serviceaccounts \
           --approve
       ```  
kubectl et la CLI AWS   

   1. Affichez l’URL du fournisseur OIDC de votre cluster.

      ```
      aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
      ```

      L'exemple qui suit illustre un résultat.

      ```
      https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
      ```

      Si aucune sortie n'est renvoyée, vous devez [créer un fournisseur OIDC IAM pour votre cluster](enable-iam-roles-for-service-accounts.md).

   1. Copiez le contenu suivant dans un fichier nommé *vpc-cni-trust-policy.json*. Remplacez *111122223333* par votre ID de compte et *EXAMPLED539D4633E53DE1B71EXAMPLE* par la sortie renvoyée à l'étape précédente. Remplacez *region-code* par la AWS région dans laquelle se trouve votre cluster.

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
                  },
                  "Action": "sts:AssumeRoleWithWebIdentity",
                  "Condition": {
                      "StringEquals": {
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-node"
                      }
                  }
              }
          ]
      }
      ```

   1. Créez le rôle. Vous pouvez remplacer *AmazonEKSVPCCNIRole* par n'importe quel nom que vous choisissez.

      ```
      aws iam create-role \
        --role-name AmazonEKSVPCCNIRole \
        --assume-role-policy-document file://"vpc-cni-trust-policy.json"
      ```

   1. Attachez la politique IAM requise au rôle. Exécutez la commande qui correspond à la famille d'adresses IP de votre cluster.
      +  `IPv4` 

        ```
        aws iam attach-role-policy \
          --policy-arn arn:aws: iam::aws:policy/AmazonEKS_CNI_Policy \
          --role-name AmazonEKSVPCCNIRole
        ```
      +  `IPv6` 

        Remplacez *111122223333* par l'ID de votre compte et *AmazonEKS\$1CNI\$1IPv6\$1Policy* par le nom de votre politique `IPv6`. Si vous ne disposez pas d’une politique `IPv6`, consultez [Créer une politique IAM pour les clusters qui utilisent la famille `IPv6`](#cni-iam-role-create-ipv6-policy) pour en créer une. Pour utiliser `IPv6` avec votre cluster, ce dernier doit répondre à plusieurs exigences. Pour de plus amples informations, veuillez consulter [En savoir plus sur IPv6 les adresses des clusters, des pods et des services](cni-ipv6.md).

        ```
        aws iam attach-role-policy \
          --policy-arn arn:aws: iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \
          --role-name AmazonEKSVPCCNIRole
        ```

   1. Exécutez la commande suivante pour annoter le compte de service `aws-node` avec l'ARN du rôle IAM que vous avez créé précédemment. Remplacez les exemples de valeurs par vos propres valeurs.

      ```
      kubectl annotate serviceaccount \
          -n kube-system aws-node \
          eks.amazonaws.com/role-arn=arn:aws: iam::111122223333:role/AmazonEKSVPCCNIRole
      ```

1. (Facultatif) Configurez le type de point de terminaison du service AWS Security Token utilisé par votre compte de service Kubernetes. Pour de plus amples informations, veuillez consulter [Configurer le point de terminaison du service de jetons de sécurité AWS pour un compte de service](configure-sts-endpoint.md).

## Étape 2 : redéployer les pods du plug-in Amazon VPC CNI pour Kubernetes
<a name="cni-iam-role-redeploy-pods"></a>

1. Supprimez et recréez tous les pods existants associés au compte de service pour appliquer les variables d’environnement des informations d’identification. L’annotation n’est pas appliquée aux pods qui sont actuellement en cours d’exécution sans annotation. La commande suivante supprime les `aws-node` DaemonSet pods existants et les déploie avec l'annotation du compte de service.

   ```
   kubectl delete Pods -n kube-system -l k8s-app=aws-node
   ```

1. Vérifiez que tous les pods ont redémarré.

   ```
   kubectl get pods -n kube-system -l k8s-app=aws-node
   ```

1. Décrivez l’un des pods et confirmez la présence des variables d’environnement `AWS_WEB_IDENTITY_TOKEN_FILE` et `AWS_ROLE_ARN`. *cpjw7*Remplacez-le par le nom de l'un de vos pods renvoyé dans le résultat de l'étape précédente.

   ```
   kubectl describe pod -n kube-system aws-node-cpjw7 | grep 'AWS_ROLE_ARN:\|AWS_WEB_IDENTITY_TOKEN_FILE:'
   ```

   L'exemple qui suit illustre un résultat.

   ```
   AWS_ROLE_ARN: arn:aws: iam::111122223333:role/AmazonEKSVPCCNIRole
         AWS_WEB_IDENTITY_TOKEN_FILE:  /var/run/secrets/eks.amazonaws.com/serviceaccount/token
         AWS_ROLE_ARN: arn:aws: iam::111122223333:role/AmazonEKSVPCCNIRole
         AWS_WEB_IDENTITY_TOKEN_FILE:            /var/run/secrets/eks.amazonaws.com/serviceaccount/token
   ```

   Deux ensembles de résultats dupliqués sont renvoyés, car le pod comprend deux conteneurs. Les deux exemples présentent les mêmes valeurs.

   Si votre Pod utilise le point de terminaison AWS régional, la ligne suivante est également renvoyée dans la sortie précédente.

   ```
   AWS_STS_REGIONAL_ENDPOINTS=regional
   ```

## Étape 3 : suppression de la politique CNI du rôle IAM de nœud
<a name="remove-cni-policy-node-iam-role"></a>

Si le [rôle IAM de votre nœud Amazon EKS](create-node-role.md) est actuellement associé à la politique `AmazonEKS_CNI_Policy` IAM (`IPv4`) ou à une [IPv6 politique](#cni-iam-role-create-ipv6-policy), et que vous avez créé un rôle IAM distinct, que vous lui avez attaché la politique et que vous l'avez attribué au compte de service `aws-node` Kubernetes, nous vous recommandons de supprimer la politique de votre rôle de nœud à l'aide de la commande AWS CLI correspondant à la famille d'adresses IP de votre cluster. Remplacez *AmazonEKSNodeRole* par le nom de votre rôle de nœud.
+  `IPv4` 

  ```
  aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws: iam::aws:policy/AmazonEKS_CNI_Policy
  ```
+  `IPv6` 

  Remplacez *111122223333* par l'ID de votre compte et *AmazonEKS\$1CNI\$1IPv6\$1Policy* par le nom de votre politique `IPv6`.

  ```
  aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws: iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy
  ```

## Créer une politique IAM pour les clusters qui utilisent la famille `IPv6`
<a name="cni-iam-role-create-ipv6-policy"></a>

Si vous avez créé un cluster utilisant la famille `IPv6` et que celui-ci utilise la version `1.10.1` ou ultérieure du module complémentaire plug-in Amazon VPC CNI pour Kubernetes, vous devez créer une politique IAM destinée à être attribuée à un rôle IAM. Si vous disposez d’un cluster existant qui n’a pas été configuré avec la famille `IPv6` lors de sa création, alors, pour utiliser `IPv6`, vous devez créer un nouveau cluster. Pour plus d'informations sur l'utilisation de `IPv6` avec votre cluster, veuillez consulter [En savoir plus sur IPv6 les adresses des clusters, des pods et des services](cni-ipv6.md).

1. Copiez la politique suivante et enregistrez-la dans un fichier appelé `vpc-cni-ipv6-policy.json`.

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:AssignIpv6Addresses",
                   "ec2:DescribeInstances",
                   "ec2:DescribeTags",
                   "ec2:DescribeNetworkInterfaces",
                   "ec2:DescribeInstanceTypes"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateTags"
               ],
               "Resource": [
                   "arn:aws:ec2:*:*:network-interface/*"
               ]
           }
       ]
   }
   ```

1. Créez la politique IAM.

   ```
   aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
   ```