Autoriser les charges de travail Kubernetes à utiliser les comptes de service Kubernetes AWS - Amazon EKS

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.

Autoriser les charges de travail Kubernetes à utiliser les comptes de service Kubernetes AWS

Gestion des comptes de serviceRôles IAM pour les comptes de serviceDécouvrez comment EKS Pod Identity permet aux pods d'accéder aux AWS services

Jetons de compte de service

La BoundServiceAccountTokenVolumefonctionnalité est activée par défaut dans les versions de Kubernetes. Cette fonctionnalité améliore la sécurité des jetons de compte de service en permettant aux charges de travail exécutées sur Kubernetes de demander des jetons Web JSON liés à l'audience, à l'heure et à la clé. Les jetons de compte de service ont une expiration d'une heure. Dans les versions antérieures de Kubernetes, les jetons n'avaient pas d'expiration. Cela signifie que les clients qui exploitent ces jetons doivent actualiser les jetons en moins d'une heure. Les clients Kubernetes suivants SDKs actualisent automatiquement les jetons dans les délais requis :

  • Go version 0.15.7 et ultérieure

  • Python version 12.0.0 et ultérieure

  • Java version 9.0.0 et ultérieure

  • JavaScript version 0.10.3 et versions ultérieures

  • Branche master Ruby

  • Haskell version 0.3.0.0

  • Version C# 7.0.5 et versions ultérieures

Si votre charge de travail utilise une version client antérieure, vous devez la mettre à jour. Pour permettre une migration fluide des clients vers les nouveaux jetons de compte de service limités dans le temps, Kubernetes ajoute une période d'expiration prolongée au jeton de compte de service au-delà de la durée par défaut d'une heure. Pour les clusters Amazon EKS, la période d'expiration prolongée est de 90 jours. Le serveur d'API Kubernetes de votre cluster Amazon EKS rejette les demandes contenant des jetons datant de plus de 90 jours. Nous vous recommandons de vérifier vos applications et leurs dépendances pour vous assurer que les versions du client Kubernetes SDKs sont identiques ou ultérieures aux versions répertoriées précédemment.

Lorsque le serveur API reçoit des requêtes avec des jetons de plus d'une heure, il annote l'événement du journal d'audit de l'API avec annotations.authentication.k8s.io/stale-token. La valeur de l'annotation ressemble à l'exemple suivant :

subject: system:serviceaccount:common:fluent-bit, seconds after warning threshold: 4185802.

Si votre cluster a une journalisation de plan de contrôle activée, les annotations se trouvent dans les journaux d'audit. Vous pouvez utiliser la requête CloudWatch Logs Insights suivante pour identifier tous les pods de votre cluster Amazon EKS qui utilisent des jetons périmés :

fields @timestamp |filter @logStream like /kube-apiserver-audit/ |filter @message like /seconds after warning threshold/ |parse @message "subject: *, seconds after warning threshold:*\"" as subject, elapsedtime

Le subject fait référence au compte de service utilisé par le Pod. Le elapsedtime indique le temps écoulé (en secondes) après la lecture du dernier jeton. Les demandes adressées au serveur d'API sont refusées lorsque le elapsedtime dépasse 90 jours (7 776 000 secondes). Vous devez mettre à jour le SDK client Kubernetes de vos applications de manière proactive afin d'utiliser l'une des versions répertoriées précédemment qui actualise automatiquement le jeton. Si le jeton de compte de service utilisé dure près de 90 jours et que vous n'avez pas suffisamment de temps pour mettre à jour les versions du SDK client avant l'expiration du jeton, vous pouvez résilier les pods existants et en créer de nouveaux. Cela entraîne la récupération du jeton du compte de service, ce qui vous donne 90 jours supplémentaires pour mettre à jour la version de votre client. SDKs

Si le Pod fait partie d'un déploiement, la méthode suggérée pour mettre fin aux Pods tout en conservant une haute disponibilité est d'effectuer un déploiement à l'aide de la commande suivante. Remplacez my-deployment par le nom de votre déploiement.

kubectl rollout restart deployment/my-deployment

Modules complémentaires de cluster

Les modules complémentaires de cluster suivants ont été mis à jour pour utiliser le client Kubernetes SDKs qui récupère automatiquement les jetons des comptes de service. Nous vous recommandons de vous assurer que les versions répertoriées, ou des versions ultérieures, sont installées sur votre cluster.

Octroi AWS d'autorisations Identity and Access Management aux charges de travail sur les clusters Amazon Elastic Kubernetes Service

Amazon EKS propose deux méthodes pour accorder des autorisations AWS Identity and Access Management aux charges de travail exécutées dans des clusters Amazon EKS : les rôles IAM pour les comptes de service et les identités EKS Pod.

Rôles IAM pour les comptes de service

Les rôles IAM pour les comptes de service (IRSA) configurent les applications Kubernetes exécutées AWS avec des autorisations IAM précises pour accéder à diverses autres ressources telles que les compartiments Amazon AWS S3, les tables Amazon DynamoDB, etc. Vous pouvez exécuter plusieurs applications ensemble dans le même cluster Amazon EKS, et vous assurer que chaque application ne dispose que de l’ensemble minimum d’autorisations dont elle a besoin. L'IRSA a été conçu pour prendre en charge diverses options de déploiement de Kubernetes prises AWS en charge par Amazon EKS, Amazon EKS Anywhere, Red Hat OpenShift Service on et les clusters Kubernetes autogérés sur AWS les instances Amazon. EC2 Ainsi, l'IRSA a été créée à l'aide d'un AWS service de base tel que IAM, et ne dépendait pas directement du service Amazon EKS et de l'API EKS. Pour de plus amples informations, veuillez consulter Rôles IAM pour les comptes de service.

Identités d'EKS Pod

EKS Pod Identity offre aux administrateurs de clusters un flux de travail simplifié pour authentifier les applications afin d'accéder à diverses autres AWS ressources telles que les compartiments Amazon S3, les tables Amazon DynamoDB, etc. L’identité du pod EKS est réservée uniquement à EKS et, par conséquent, elle simplifie la manière dont les administrateurs de cluster peuvent configurer les applications Kubernetes pour obtenir des autorisations IAM. Ces autorisations peuvent désormais être facilement configurées en moins d'étapes directement via AWS Management Console l'API EKS et la AWS CLI, et il n'y a aucune action à effectuer au sein du cluster dans aucun objet Kubernetes. Les administrateurs de clusters n'ont pas besoin de basculer entre les services EKS et IAM, ni d'utiliser des opérations IAM privilégiées pour configurer les autorisations requises par vos applications. Les rôles IAM peuvent désormais être utilisés dans plusieurs clusters sans qu’il soit nécessaire de mettre à jour la politique d’approbation des rôles lors de la création de nouveaux clusters. Les informations d’identification IAM fournies par l’identité du pod EKS comprennent des balises de session de rôle, avec des attributs tels que le nom du cluster, l’espace de noms, le nom du compte de service. Les balises de session de rôle permettent aux administrateurs de créer un rôle unique qui peut fonctionner avec tous les comptes de service en autorisant l'accès aux AWS ressources en fonction des balises correspondantes. Pour de plus amples informations, veuillez consulter Découvrez comment EKS Pod Identity permet aux pods d'accéder aux AWS services.

Comparaison de l’identité du pod EKS et de l’IRSA

À un niveau élevé, l’identité du pod EKS et l’IRSA vous permettent tous deux d’accorder des autorisations IAM aux applications exécutées sur des clusters Kubernetes. Mais ils sont fondamentalement différents dans la façon dont vous les configurez, les limites prises en charge et les fonctionnalités activées. Ci-dessous, nous comparons certains des principaux aspects des deux solutions.

Attribut Identité du pod EKS IRSA

Extensibilité des rôles

Vous devez configurer chaque rôle une fois pour établir la confiance avec le nouveau principal de service Amazon EKS pods.eks.amazonaws.com. Après cette étape unique, il n'est pas nécessaire de mettre à jour la politique de confiance du rôle chaque fois qu'il est utilisé dans un nouveau cluster.

Vous devez mettre à jour la politique de confiance du rôle IAM avec le nouveau point de terminaison du fournisseur OIDC du cluster EKS chaque fois que vous souhaitez utiliser le rôle dans un nouveau cluster.

Capacité de mise à l’échelle des clusters

EKS Pod Identity n'oblige pas les utilisateurs à configurer le fournisseur IAM OIDC. Cette limite ne s'applique donc pas.

Chaque cluster EKS est associé à une URL d'émetteur OpenID Connect (OIDC). Pour utiliser IRSA, un fournisseur OpenID Connect unique doit être créé pour chaque cluster EKS dans IAM. IAM a une limite globale par défaut de 100 fournisseurs OIDC pour chaque AWS compte. Si vous prévoyez d'avoir plus de 100 clusters EKS pour chaque AWS compte IRSA, vous atteindrez la limite de fournisseurs IAM OIDC.

Capacité de mise à l’échelle des rôles

EKS Pod Identity n'oblige pas les utilisateurs à définir une relation de confiance entre le rôle IAM et le compte de service dans la politique de confiance. Cette limite ne s'applique donc pas.

Dans IRSA, vous définissez la relation de confiance entre un rôle IAM et un compte de service dans la politique de confiance du rôle. Par défaut, la longueur de la politique d’approbation est 2048. Cela signifie que vous pouvez généralement définir 4 relations d’approbation dans une seule politique d’approbation. Bien qu’il soit possible d’augmenter la limite de longueur de la politique d’approbation, vous êtes généralement limité à un maximum de 8 relations d’approbation au sein d’une même politique d’approbation.

Réutilisation des rôles

AWS Les informations d'identification temporaires STS fournies par EKS Pod Identity incluent des balises de session de rôle, telles que le nom du cluster, l'espace de noms, le nom du compte de service. Les balises de session de rôle permettent aux administrateurs de créer un rôle IAM unique qui peut être utilisé avec plusieurs comptes de service, avec des autorisations effectives différentes, en autorisant l'accès aux AWS ressources en fonction des balises qui leur sont associées. C’est ce qu’on appelle le contrôle d’accès par attributs (ABAC). Pour de plus amples informations, veuillez consulter Accordez aux Pods l'accès aux ressources {aws} en fonction de balises.

AWS Les balises de session STS ne sont pas prises en charge. Vous pouvez réutiliser un rôle entre les clusters, mais chaque pod reçoit toutes les autorisations du rôle.

Environnements pris en charge

L’identité du pod EKS est uniquement disponible sur Amazon EKS.

L'IRSA peut être utilisé comme Amazon EKS, Amazon EKS Anywhere, Red Hat OpenShift Service on AWS et les clusters Kubernetes autogérés sur les instances Amazon. EC2

Versions EKS prises en charge

Versions EKS Kubernetes ou ultérieures1.24. Pour les versions de plateforme spécifiques, consultez Versions du cluster de l’identité du pod EKS.

Toutes les versions de clusters EKS prises en charge.