Accorder aux charges de travail Kubernetes l’accès à AWS à l’aide des comptes de service Kubernetes - Amazon EKS

Aidez à améliorer cette page

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

Accorder aux charges de travail Kubernetes l’accès à AWS à l’aide des comptes de service Kubernetes

Gestion des comptes de serviceRôles IAM pour les comptes de serviceDécouvrir comment l’identité du pod Amazon EKS accorde aux pods l’accès aux services AWS

Jetons de compte de service

La fonctionnalité BoundServiceAccountTokenVolume est activée par défaut dans les versions 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 de date d’expiration. Cela signifie que les clients qui s'appuient sur ces jetons doivent actualiser les jetons en moins d'une heure. Les kits SDK client Kubernetes suivants actualisent automatiquement les jetons dans le délai 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 ultérieure

  • Branche master Ruby

  • Haskell version 0.3.0.0

  • Version C# 7.0.5 et ultérieure

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

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). Il est recommandé de mettre à jour de manière proactive le kit SDK client Kubernetes de vos applications afin d’utiliser l’une des versions répertoriées précédemment qui actualisent automatiquement le jeton. Si le jeton de compte de service utilisé approche les 90 jours et que vous ne disposez pas de suffisamment de temps pour mettre à jour les versions de votre kit SDK client avant l’expiration du jeton, vous pouvez résilier les pods existants et en créer de nouveaux. Il en résulte une récupération du jeton de compte de service, ce qui vous donne 90 jours supplémentaires pour mettre à jour les kits SDK de votre version client.

Si le pod fait partie d’un déploiement, la suggestion pour résilier les pods tout en conservant une haute disponibilité consiste à 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 afin d’utiliser les SDK clients Kubernetes qui récupèrent automatiquement les jetons de compte 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 d’autorisations de gestion des identités et des accès AWS aux charges de travail sur les clusters Amazon Elastic Kubernetes Service

Amazon EKS propose deux méthodes pour octroyer des autorisations de gestion des identités et des accès AWS aux charges de travail qui s’exécutent dans les clusters Amazon EKS : Rôles IAM pour les comptes de service et Identités du pod EKS.

Rôles IAM pour les comptes de service

Les rôles IAM des comptes de service (IRSA) configurent les applications Kubernetes s’exécutant sur AWS avec des autorisations IAM détaillées pour accéder à diverses autres ressources AWS, telles que les compartiments Amazon 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. IRSA a été créé pour prendre en charge diverses options de déploiement Kubernetes prises en charge par AWS, telles qu’Amazon EKS, Amazon EKS Anywhere, Red Hat OpenShift Service sur AWS et les clusters Kubernetes autogérés sur les instances Amazon EC2. Ainsi, IRSA a été créé en utilisant un service AWS fondamental comme IAM, et n’a pas pris de dépendance directe sur le service Amazon EKS et l’API EKS. Pour de plus amples informations, consultez Rôles IAM pour les comptes de service.

Identités des pods EKS

L’identité du pod EKS offre aux administrateurs de cluster un flux simplifié pour l’authentification des applications afin d’accéder à diverses autres ressources AWS 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 quelques étapes directement via AWS Management Console, l’API EKS et l’interface AWS CLI, et aucune action n’est requise à l’intérieur du cluster dans les objets 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 sur plusieurs comptes de service en autorisant l’accès aux ressources AWS sur la base des balises correspondantes. Pour de plus amples informations, consultez Découvrir comment l’identité du pod Amazon EKS accorde aux pods l’accès aux services AWS.

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 aspects clés des deux solutions.

Note

AWS recommande d’utiliser les identités du pod EKS pour accorder l’accès aux ressources AWS à vos pods dans la mesure du possible. Pour de plus amples informations, consultez Découvrir comment l’identité du pod Amazon EKS accorde aux pods l’accès aux services AWS.

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, vous n’avez pas besoin de mettre à jour la politique d’approbation du rôle à chaque fois qu’il est utilisé dans un nouveau cluster.

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

Capacité de mise à l’échelle des clusters

L’identité du pod EKS n’exige pas des utilisateurs qu’ils configurent 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 compte AWS. Si vous prévoyez d’avoir plus de 100 clusters EKS pour chaque compte AWS avec IRSA, vous atteindrez la limite du fournisseur IAM OIDC.

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

L’identité du pod EKS n’exige pas des utilisateurs qu’ils définissent une relation d’approbation entre le rôle IAM et le compte de service dans la politique d’approbation, cette limite ne s’applique donc pas.

Dans IRSA, vous définissez la relation d’approbation entre un rôle IAM et un compte de service dans la politique d’approbation 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.

Utilisation du quota d’API STS

L’identité du pod EKS simplifie la fourniture d’informations d’identification AWS à vos pods et ne nécessite pas que votre code effectue des appels directement avec le service de jetons de sécurité AWS (STS). Le service EKS gère l’assomption de rôle et fournit des informations d’identification aux applications écrites à l’aide du kit SDK AWS dans vos pods sans que ceux-ci communiquent avec AWS STS ou utilisent le quota d’API STS.

Dans IRSA, les applications écrites à l’aide du kit SDK AWS dans vos pods utilisent des jetons pour appeler l’API AssumeRoleWithWebIdentity sur le service de jetons de sécurité AWS (STS). En fonction de la logique de votre code sur le kit SDK AWS, il est possible que votre code effectue des appels inutiles vers AWS STS et reçoive des erreurs de limitation.

Réutilisation des rôles

Les informations d’identification temporaires AWS STS fournies par l’identité du pod Amazon EKS comprennent des balises de session de rôle, telles que le nom du cluster, l’espace de noms et 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 différentes autorisations effectives, en autorisant l’accès aux ressources AWS en fonction des balises qui leur sont attachées. C’est ce qu’on appelle le contrôle d’accès par attributs (ABAC). Pour de plus amples informations, consultez Accorder aux pods l’accès aux ressources AWS en fonction des balises.

Les balises de session AWS 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.

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

Versions EKS prises en charge

Toutes les versions de clusters EKS prises en charge. 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.