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

Aidez à améliorer cette page

Vous souhaitez contribuer à ce guide de l'utilisateur ? Faites défiler cette page vers le bas et sélectionnez Modifier cette page sur GitHub. Vos contributions aideront à améliorer notre guide de l'utilisateur pour tout le monde.

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 AWSKubernetes

Un compte de service Kubernetes fournit une identité pour les processus exécutés dans un Pod. Pour plus d'informations, consultez la rubrique Gestion des comptes de service dans la documentation Kubernetes. Si vous avez Pod besoin d'accéder à AWS des services, vous pouvez associer le compte de service à une AWS Identity and Access Management identité pour accorder cet accès. Pour de plus amples informations, veuillez consulter Rôles IAM pour les comptes de service.

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 en cours d'exécution Kubernetes de demander des jetons JSON Web 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 période d'expiration. Cela signifie que les clients qui exploitent ces jetons doivent actualiser les jetons en moins d'une heure. Les jetons Kubernetesclient 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

  • C# version 7.0.5 et ultérieure

Si votre charge de travail utilise une version client antérieure, vous devez la mettre à jour. Pour garantir une migration en douceur 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, en plus de la période par défaut d'une heure. Pour les EKS clusters Amazon, la période d'expiration prolongée est de 90 jours. Le Kubernetes API serveur de votre EKS cluster Amazon 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 API serveur reçoit des demandes contenant des jetons datant de plus d'une heure, il annote l'événement du journal API d'audit avecannotations.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 membres de votre EKS cluster Amazon 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 API serveur sont refusées lorsque le délai elapsedtime dépasse 90 jours (7 776 000 secondes). Vous devez mettre à jour le Kubernetes client de vos applications de manière proactive SDK 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 ne disposez pas de suffisamment de temps pour mettre à jour SDK les versions de vos clients avant l'expiration du jeton, vous pouvez résilier le jeton existant Pods et en créer de nouvelles. 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, pour résilier les Pods tout en conservant une haute disponibilité, il est suggéré 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 Kubernetes client SDKs qui récupère 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 AWS Identity and Access Management d'autorisations aux charges de travail sur les clusters Amazon Elastic Kubernetes Service

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

Rôles IAM pour les comptes de service

IAMroles for service accounts (IRSA) configure les applications Kubernetes exécutées AWS avec des IAM autorisations précises pour accéder à diverses autres ressources AWS telles que les buckets Amazon S3, les tables Amazon DynamoDB, etc. Vous pouvez exécuter plusieurs applications ensemble dans le même EKS cluster Amazon et vous assurer que chaque application ne dispose que des autorisations minimales dont elle a besoin. IRSAa été conçu pour prendre en charge diverses options de Kubernetes déploiement prises en charge par AWS Amazon EKS Red Hat OpenShift Service on AWS, Amazon EKS Anywhere et les Kubernetes clusters autogérés sur les EC2 instances Amazon. Ainsi, IRSA a été construit en utilisant un AWS service de base tel queIAM, et n'a pris aucune dépendance directe à l'égard du EKS service Amazon et du EKSAPI. Pour de plus amples informations, veuillez consulter Rôles IAM pour les comptes de service.

EKSIdentités des pods

EKSPod 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. EKSPod Identity est EKS uniquement destiné et simplifie ainsi la façon dont les administrateurs de clusters 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 EKSAPI, et AWS CLI, et il n'y a aucune action à effectuer au sein du cluster sur aucun Kubernetes objet. Les administrateurs de clusters n'ont pas besoin de basculer entre les IAM services EKS et, ni d'utiliser IAM des opérations privilégiées pour configurer les autorisations requises par vos applications. IAMles rôles peuvent désormais être utilisés sur plusieurs clusters sans qu'il soit nécessaire de mettre à jour la politique de confiance des rôles lors de la création de nouveaux clusters. IAMles informations d'identification fournies par EKS Pod Identity incluent 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 entre EKS Pod Identity et IRSA

À un niveau élevé, EKS Pod Identity vous IRSA permet d'accorder des IAM autorisations 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 EKSIdentité du pod IRSA

Extensibilité des rôles

Vous devez configurer chaque rôle une seule fois pour établir la confiance avec le nouveau directeur de EKS service Amazon. 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 de confiance du IAM rôle avec le nouveau point de terminaison du OIDC fournisseur de EKS cluster chaque fois que vous souhaitez utiliser le rôle dans un nouveau cluster.

Capacité de mise à l’échelle des clusters

EKSPod Identity n'oblige pas les utilisateurs à configurer le IAM OIDC fournisseur, cette limite ne s'applique donc pas.

Un émetteur OpenID Connect (OIDC) est URL associé à chaque EKS cluster. Pour pouvoir être utiliséIRSA, un OpenID Connect fournisseur unique doit être créé pour chaque EKS cluster dansIAM. IAMa une limite globale par défaut de 100 OIDC fournisseurs pour chacun Compte AWS. Si vous prévoyez d'avoir plus de 100 EKS clusters pour chacun Compte AWS d'entre euxIRSA, vous atteindrez la limite du IAM OIDC fournisseur.

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

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

DansIRSA, vous définissez la relation de confiance entre un IAM rôle 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 STS les informations d'identification temporaires fournies par EKS Pod Identity incluent les 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 IAM rôle 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. Ceci est également appelé contrôle d'accès basé sur les attributs ()ABAC. Pour de plus amples informations, veuillez consulter Accorder pods l'accès aux AWS ressources en fonction des balises.

AWS STS les balises de session 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

EKSPod Identity est uniquement disponible sur AmazonEKS.

IRSApeuvent être utilisés comme AmazonEKS, Amazon EKS Anywhere et des Kubernetes clusters autogérés sur des EC2 instances Amazon. Red Hat OpenShift Service on AWS

EKSversions prises en charge

EKSKubernetesversions 1.24 ou ultérieures. Pour les versions de plateforme spécifiques, consultez EKSVersions du cluster Pod Identity.

Toutes les versions de EKS cluster prises en charge.