Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Comment utiliser IRSA dans Amazon EKS pour restreindre l'accès à un compartiment Amazon S3 ?
Je souhaite restreindre l'accès à un compartiment Amazon Simple Storage Service (Amazon S3) au niveau du pod dans Amazon Elastic Kubernetes Service (Amazon EKS). Je souhaite également conserver des autorisations minimales pour mon application avec des rôles AWS Identity and Access Management (IAM) pour les comptes de service (IRSA).
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.
Prérequis : Créez un fournisseur OpenID Connect (OIDC) IAM pour votre cluster.
Créer une politique et un rôle IAM
Procédez comme suit :
- Créez un fichier JSON appelé iam-policy.json. Exemple de politique :
Remarque : Remplacez YOUR_BUCKET par le nom de votre compartiment S3. L'exemple de politique précédent restreint les autorisations Amazon S3 afin que les utilisateurs IAM puissent uniquement répertorier et récupérer des objets à partir d'un compartiment S3.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::YOUR_BUCKET" }, { "Sid": "List", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::YOUR_BUCKET/*" } ] }
- Pour créer la politique IAM, exécutez la commande de l'interface de ligne de commande AWS create-policy suivante :
Remarque : Remplacez YOUR_IAM_POLICY_NAME par le nom de votre politique.aws iam create-policy \ --policy-name YOUR_IAM_POLICY_NAME \ --policy-document file://iam-policy.json
- Créez un rôle IAM et associez-le à votre compte AWS de service de cluster.
- Vérifiez que vous avez correctement configuré la politique et le rôle IAM.
- (Facultatif) Pour obtenir le nom du rôle, exécutez la commande suivante :
Remarque : Remplacez SERVICE_ACCOUNT_NAME par le nom de votre compte de service et NAMESPACE_NAME par le nom de votre espace de noms.kubectl get sa SERVICE_ACCOUNT_NAME -n NAMESPACE_NAME -o yaml | grep eks.amazonaws.com/role-arn | cut -d '/' -f 3
Exemple de sortie :eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE
Créer un pod Amazon EKS
Vérifiez que votre pod peut endosser le rôle IAM avec les autorisations appropriées. Procédez comme suit pour remplacer votre application par une image officielle dans l'AWS CLI :
- Créez un fichier YAML appelé aws-cli-pod.yaml. Exemple de fichier :
Remarque : Remplacez NAMESPACE_NAME par votre espace de noms et SERVICE_ACCOUNT_NAME par le nom de votre compte de service Kubernetes.apiVersion: v1 kind: Pod metadata: name: aws-cli namespace: NAMESPACE_NAME spec: serviceAccountName: SERVICE_ACCOUNT_NAME containers: - name: aws-cli image: amazon/aws-cli:latest command: - sleep - "3600" imagePullPolicy: IfNotPresent restartPolicy: Always
- Pour créer un pod Amazon EKS, exécutez la commande suivante :
kubectl apply -f ./aws-cli-pod.yaml
Tester votre pod Amazon EKS
Remarque : Dans l'exemple suivant, le pod peut répertorier et récupérer des objets depuis le compartiment S3 YOUR_BUCKET.
Pour vérifier que votre pod utilise le rôle et les actions IAM appropriés pour Amazon S3, procédez comme suit :
-
Pour trouver le rôle IAM qui utilise les informations d'identification, exécutez la commande suivante :
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws sts get-caller-identity
Remarque : Remplacez NAMESPACE_NAME par le nom de votre espace de noms.
Exemple de sortie :{ "UserId": "AIDACKCEVSQ6C2EXAMPLE:botocore-session-123456789012", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012" }
-
Vérifiez que votre pod dispose des autorisations appropriées pour votre compartiment S3.
Pour vérifier que votre pod dispose des autorisations s3:ListBuckets, exécutez la commande suivante :kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3 ls s3://YOUR_BUCKET
Remarque : Remplacez NAMESPACE_NAME par le nom de votre espace de noms et YOUR_BUCKET par votre compartiment.
Exemple de sortie :2025-03-25 22:28:06 14 hello_s3.txt
Pour vérifier que votre pod dispose des autorisations s3:GetObject, exécutez la commande suivante :
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3api get-object --bucket YOUR_BUCKET --key DIR/S3_OBJECT_FILE S3_FILE_NAME_LOCAL
Remarque : Remplacez NAMESPACE_NAME par le nom de votre espace de noms et YOUR_BUCKET par votre compartiment. Remplacez également DIR/S3_OBJECT_FILE par le nom du répertoire et du fichier objet et S3_FILE_NAME_LOCAL par le nouvel objet Amazon S3 local.
Exemple de sortie :{ "AcceptRanges": "bytes", "LastModified": "2025-03-14T01:49:38+00:00", "ContentLength": 19, "ETag": "\"678b33365329cce6cd2bb1882e62fe3a\"", "ContentType": "text/plain", "ServerSideEncryption": "AES256", "Metadata": {} }
-
Pour vérifier que votre pod ne dispose pas des autorisations s3:DeleteObject, exécutez la commande suivante :
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3 rm s3://YOUR_BUCKET/DEMO_TEST_FILE
Remarque : Remplacez NAMESPACE_NAME par le nom de votre espace de noms et YOUR_BUCKET par votre compartiment. Remplacez également DEMO_TEST_FILE par votre fichier objet Amazon S3.
Si le pod ne dispose pas des autorisations s3:DeleteObject, le message d'erreur Accès refusé suivant s'affiche dans la sortie :delete failed: s3://YOUR_BUCKET/DEMO_TEST_FILE An error occurred (AccessDenied) when calling the DeleteObject operation: User: arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012 is not authorized to perform: s3:DeleteObject on resource: "arn:aws:s3:::YOUR_BUCKET/DEMO_TEST_FILE" because no identity-based policy allows the s3:DeleteObject action command terminated with exit code 1
Résoudre les problèmes
Important : Créez toujours de nouveaux pods après avoir apporté des modifications. Amazon EKS répercute les mises à jour uniquement dans les pods nouvellement créés, pas dans les pods existants.
Erreur NoSuchBucket
Si vous ne trouvez pas le compartiment S3 parce qu'il n'existe pas, le message d'erreur suivant s'affiche :
« An error occurred (NoSuchBucket) when calling the ListObjectsV2 operation: The specified bucket does not exist command terminated with exit code 254). (Une erreur s'est produite (NoSuchBucket) lors de l'appel de l'opération ListObjectsV2 : Le compartiment spécifié n'existe pas, commande interrompue avec le code de sortie 254)
Pour résoudre ce problème, assurez-vous d'utiliser le nom de compartiment S3 correct dans vos commandes.
Erreur NoSuchKey
Si vous ne parvenez pas à effectuer un téléchargement à partir d'un chemin de compartiment S3 spécifique, le message d'erreur suivant s'affiche :
« An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist. (Une erreur s'est produite (NoSuchKey) lors de l'appel de l'opération GetObject : La clé spécifiée n'existe pas.)
Pour résoudre ce problème, vérifiez que le chemin et le nom de fichier Amazon S3 existent dans votre compte AWS.
Erreurs AccessDenied
Si vous n'êtes pas autorisé à effectuer une action sur le compartiment S3, un message d'erreur s'affiche. Par exemple, l'erreur suivante se produit si vous ne pouvez pas exécuter l'action ListObjectsV2 :
« An error occurred (AccessDenied) when calling the PutObject operation: User: arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012 is not authorized to perform: s3:ListBucket on resource: "arn:aws:s3:::YOUR_BUCKET" because no identity-based policy allows the s3:ListBucket action command terminated with exit code 254 » (Une erreur s’est produite (AccessDenied) lors de l’appel de l’opération PutObject : L’utilisateur : arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012 n’est pas autorisé à effectuer : s3:ListBucket sur la ressource : « arn:aws:s3:::YOUR_BUCKET » car aucune politique basée sur l’identité n’autorise l’action s3:ListBucket, commande interrompue avec le code de sortie 254)
Pour résoudre ce problème, assurez-vous d'avoir ajouté l'autorisation à votre politique de rôle IAM.
En cas d'erreur dans le fournisseur d'identité IAM, le message d'erreur suivant s'affiche :
« An error occurred (AccessDenied) when calling the AssumeRoleWithWebIdentity operation: Not authorized to perform sts:AssumeRoleWithWebIdentity command terminated with exit code 254 » (Une erreur s’est produite (AccessDenied) lors de l’appel de l’opération AssumeRoleWithWebIdentity : Non autorisé à exécuter STS:AssumeRoleWithWebIdentity, commande interrompue avec le code de sortie 254)
Pour résoudre ce problème, confirmez les configurations suivantes :
- Le fournisseur OIDC IAM de votre cluster est correctement configuré.
- La relation d’approbation du rôle IAM est correctement configurée.
- Le compte de service utilise le rôle IAM approprié.
Erreur InvalidIdentityToken
Si Amazon EKS ne trouve pas le fournisseur OIDC de votre compte, le message d'erreur suivant s'affiche :
« An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: No OpenIDConnect provider found in your account for https://oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE command terminated with exit code 254 » (Une erreur s’est produite (InvalidIdentityToken) lors de l’appel de l’opération AssumeRoleWithWebIdentity : Aucun fournisseur OpenIDConnect trouvé dans votre compte pour https://oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE, commande interrompue avec le code de sortie 254)
Pour résoudre ce problème, vérifiez que le fournisseur d'identité de l'OIDC existe dans IAM.
Informations connexes
Test de la politique IAM à l'aide du simulateur de politique IAM
Actions, ressources et clés de condition pour les services AWS

Contenus pertinents
- demandé il y a 3 moislg...
- demandé il y a 2 anslg...
- demandé il y a 10 moislg...
- demandé il y a un anlg...
- demandé il y a 4 moislg...
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a un an