AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
Comment résoudre les problèmes liés à un fournisseur OIDC et à un IRSA dans Amazon EKS ?
Mes pods ne peuvent pas utiliser les autorisations de rôle Gestion des identités et des accès AWS (AWS IAM) avec le jeton de compte AWS Amazon Elastic Kubernetes Service (Amazon EKS).
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'AWS CLI.
Vérifier si vous disposez d'un fournisseur OIDC IAM existant pour votre cluster
S'il n'existe pas de fournisseur OpenID Connect (OIDC), vous recevez une erreur similaire à la suivante :
« WebIdentityErr: failed to retrieve credentials\ncaused by: InvalidIdentityToken: No OpenIDConnect provider found in your account for https://oidc.eks.eu-west-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E\n\tstatus code: 400) »
Pour vérifier si vous disposez déjà d'un fournisseur OIDC IAM, procédez comme suit :
-
Pour vérifier l'URL du fournisseur OIDC de votre cluster, exécutez la commande describe-cluster de l'AWS CLI suivante :
aws eks describe-cluster --name cluster_name --query "cluster.identity.oidc.issuer" --output textRemarque : Remplacez cluster_name par le nom de votre cluster.
Exemple de sortie :https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E -
Pour répertorier les fournisseurs OIDC IAM de votre compte, exécutez la commande list-open-id-connect-providers suivante :
aws iam list-open-id-connect-providers | grep EXAMPLED539D4633E53DE1B716D3041ERemarque : Remplacez EXAMPLED539D4633E53DE1B716D3041E par l’URL du fournisseur OIDC que vous avez reçue grâce à la commande précédente.
Si la commande renvoie une sortie, cela signifie que vous disposez déjà d’un fournisseur pour votre cluster. Si la commande ne renvoie aucune sortie, vous devez créer un fournisseur OIDC IAM. Exemple de sortie :"Arn": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E"
Vérifier si votre rôle IAM dispose des autorisations requises et d'une politique IAM attachée
Procédez comme suit :
- Ouvrez la console IAM.
- Dans le volet de navigation, sélectionnez Rôles.
- Choisissez le rôle qui est associé à votre compte de service Kubernetes.
- Choisissez l’onglet Autorisations. Puis, vérifiez la politique qui est attachée au rôle pour vous assurer qu'elle contient les autorisations nécessaires pour votre configuration.
- Choisissez l’onglet Relations d’approbation. Puis, vérifiez que le format de votre politique IAM correspond au format de la politique JSON suivante :
Vous pouvez également exécuter la commande get-role suivante pour vérifier votre relation d’approbation :{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:SERVICE_ACCOUNT_NAMESPACE:SERVICE_ACCOUNT_NAME", "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com" } } } ] }
Remarque : Remplacez EKS-IRSA par le nom de votre rôle IAM pour les comptes de service (IRSA).aws iam get-role --role-name EKS-IRSA
Exemple de sortie :
Dans le fichier JSON de sortie, consultez la section AssumeRolePolicyDocument pour vérifier la politique de relation d’approbation.{ "Role": { "Path": "/", "RoleName": "EKS-IRSA", "RoleId": "AROAQ55NEXAMPLELOEISVX", "Arn": "arn:aws:iam::ACCOUNT_ID:role/EKS-IRSA", "CreateDate": "2021-04-22T06:39:21+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com", "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:SERVICE_ACCOUNT_NAMESPACE:SERVICE_ACCOUNT_NAME" } } } ] }, "MaxSessionDuration": 3600, "RoleLastUsed": { "LastUsedDate": "2021-04-22T07:01:15+00:00", "Region": "AWS_REGION" } } } - (Facultatif) Mettez à jour la relation d’approbation pour le rôle avec la région AWS, le nom de compte de service Kubernetes ou l'espace de noms Kubernetes corrects.
Vérifier si vous avez créé un compte de service
Pour vérifier si un compte de service existe, exécutez la commande suivante :
kubectl get sa -n YOUR_NAMESPACE
Remarque : Remplacez YOUR_NAMESPACE par votre espace de noms Kubernetes.
Exemple de sortie :
NAME SECRETS AGEdefault 1 28d irsa 1 66m
Assurez-vous que la sortie répertorie votre compte de service. Si vous ne disposez pas d’un compte de service, consultez la page Configurer des comptes de service pour les pods sur le site Web de Kubernetes.
Vérifier que le compte de service comporte les annotations de rôle IAM correctes
Pour vérifier que les annotations de rôle IAM de votre compte de service sont correctes, exécutez la commande suivante :
kubectl describe sa irsa -n YOUR_NAMESPACE
Remarque : Remplacez irsa par le nom de votre compte de service Kubernetes et YOUR_NAMESPACE par votre espace de noms Kubernetes.
Exemple de sortie :
Name: irsa Namespace: default Labels: none Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME Image pull secrets: none Mountable secrets: irsa-token-v5rtc Tokens: irsa-token-v5rtc Events: none
Vérifiez les annotations pour vous assurer que le rôle IAM est correct. Si tel n'est pas le cas, exécutez la commande suivante pour modifier le compte de service :
kubectl edit sa -n NAMESPACE
Remarque : Remplacez NAMESPACE par votre espace de noms.
Puis, mettez à jour la valeur de Annotations avec le rôle IAM approprié.
Vérifier que vous avez correctement spécifié la valeur serviceAccountName dans votre pod
Pour vérifier la valeur serviceAccountName, exécutez la commande suivante :
kubectl get pod POD_NAME -o yaml -n YOUR_NAMESPACE| grep -i serviceAccountName:
Remarque : Remplacez POD_NAME par votre pod Kubernetes et YOUR_NAMESPACE par votre espace de noms.
Exemple de sortie :
serviceAccountName: irsa
Si la valeur de la sortie est un nom de compte de service incorrect, modifiez le manifeste de déploiement avec le nom correct. Puis, redéployez le manifeste de déploiement.
Vérifier les variables d'environnement et les autorisations
Pour vérifier les variables d'environnement du pod, exécutez la commande suivante :
kubectl -n YOUR_NAMESPACE exec -it POD_NAME -- env | grep AWS
Exemple de sortie :
AWS_REGION=ap-southeast-2 AWS_ROLE_ARN=arn:aws:iam::111122223333:role/EKS-IRSA AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_DEFAULT_REGION=ap-southeast-2
Assurez-vous que la sortie répertorie votre compte de service. Si vous n'avez pas de compte de service, consultez la page Configurer des comptes de service pour les pods sur le site Web de Kubernetes.
Vérifier que l'application utilise un kit SDK AWS pris en charge
La version de votre kit AWS SDK doit être supérieure ou égale à la version requise pour votre kit AWS SDK.
Recréer les pods
Si vous avez créé des pods avant d'appliquer l'IRSA, exécutez la commande suivante pour les recréer :
kubectl rollout restart deploy nginx
Exemple de sortie :
deployment.apps/nginx restarted
Pour les déploiements de daemonsets ou de statefulsets, exécutez la commande suivante :
kubectl rollout restart deploy DEPLOYMENT_NAME
Si vous n'avez créé qu'un seul pod, vous devez le supprimer et le recréer. Procédez comme suit :
- Pour supprimer le pod, exécutez la commande suivante :
Remarque : Remplacez POD_NAME par le nom de votre pod.kubectl delete pod POD_NAME - Pour recréer le pod, exécutez la commande suivante :
Remarque : Remplacez SPEC_FILE par le chemin et le nom de votre fichier manifeste Kubernetes.kubectl apply -f SPEC_FILE
Vérifiez que l'audience est correcte
Si vous avez créé le fournisseur OIDC avec une audience incorrecte, le message d'erreur suivant s'affiche :
« Error - An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: Incorrect token audience »
Pour vérifier le fournisseur d'identité IAM de votre cluster, exécutez la commande get-open-id-connect-provider suivante :
aws iam get-open-id-connect-provider --open-id-connect-provider-arn arn:aws:iam::ACCOUNT_ID:oidc-provider/oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E
Remarque : Remplacez ACCOUNT_ID par votre identifiant de compte, AWS_REGION par votre région et EXAMPLED539D4633E53DE1B716D3041E par l'URL de votre fournisseur OIDC.
Exemple de sortie :
{ "Url": "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E", "ClientIDList": [ "sts.amazonaws.com" ], "ThumbprintList": [ "9e99a48a9960b14926bb7f3b02e22da2b0ab7280" ], "CreateDate": "2021-01-21T04:29:09.788000+00:00", "Tags": [] }
Dans le résultat, assurez-vous que ClientIDList est sts.amazonaws.com. Si tel n'est pas le cas, ajoutez un fournisseur d'identité au rôle et saisissez sts.amazonaws.com pour Public.
Vérifier que vous avez configuré une empreinte numérique correcte
Si l'empreinte numérique que vous avez configurée dans l'OIDC IAM n'est pas correcte, le message d'erreur suivant s'affiche :
« failed to retrieve credentials caused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint »
Pour configurer automatiquement l'empreinte numérique correcte, utilisez eksctl ou la console de gestion Amazon EKS pour créer le fournisseur d'identité IAM. Pour connaître les autres moyens d'obtenir une empreinte, consultez la section Obtenir l'empreinte numérique d’un fournisseur d'identité OpenID Connect.
(Région AWS Chine seulement) Vérifier la variable d'environnement AWS_DEFAULT_REGION
Pour déployer un pod ou un daemonset appliqué à l'IRSA sur un cluster de la région AWS Chine, vous devez définir AWS_DEFAULT_REGION dans la spécification du pod. Si vous ne définissez pas la variable d'environnement AWS_DEFAULT_REGION, l'erreur suivante peut s'afficher pour votre pod ou votre daemonset :
« An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid »
Pour ajouter la variable d'environnement AWS_DEFAULT_REGION à votre spécification de pod ou de daemonset, créez un manifeste de déploiement similaire à l’exemple suivant :
apiVersion: apps/v1kind: Deployment metadata: name: my-app spec: template: metadata: labels: app: my-app spec: serviceAccountName: my-app containers: - name: my-app image: my-app:latest env: - name: AWS_DEFAULT_REGION value: "AWS_REGION" ...
Vous pouvez également exécuter la commande suivante pour définir la variable d'environnement :
kubectl set env deployment deployment_name AWS_DEFAULT_REGION=example_region -n NAMESPACE"
Remarque : Remplacez deployment_name par le nom de votre déploiement, example_region par la région AWS Chine et NAMESPACE par votre espace de noms.
- Sujets
- Containers
- Langue
- Français
Vidéos associées


Contenus pertinents
- demandé il y a un an
- demandé il y a 3 ans
- demandé il y a 4 mois
AWS OFFICIELA mis à jour il y a 2 ans
AWS OFFICIELA mis à jour il y a 8 mois