Rôles IAM pour les comptes de service (IRSA)
Associez des rôles IAM précis aux comptes de service Kubernetes avec IRSA afin que les pods puissent accéder aux services AWS sans autorisations au niveau des nœuds.
Rôles IAM pour les comptes de service (IRSA) est une leçon Cloud & IT Cert Prep gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Cloud & IT Cert Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cloud & IT Cert Prep comprend 4 leçons au total.
Le problème IAM des pods
Lorsqu’un pod exécuté dans EKS doit appeler une API AWS — par exemple lire des données dans S3 ou écrire dans DynamoDB — il a besoin d’informations d’identification AWS. L’approche naïve consiste à créer un utilisateur IAM et à inscrire ses clés d’accès en dur dans des variables d’environnement. Cette méthode n’est pas sécurisée et enfreint le principe du moindre privilège, car tous les pods du même nœud partagent ces informations d’identification. IAM Roles for Service Accounts (IRSA) résout ce problème en associant directement des rôles IAM précis aux comptes de service Kubernetes.
Fonctionnement d’IRSA : fédération OIDC
IRSA repose sur la fédération OpenID Connect (OIDC). EKS crée un fournisseur OIDC pour votre cluster. Lorsqu’un pod fait référence à un compte de service associé à une annotation contenant un ARN de rôle IAM, EKS injecte dans le pod un jeton de compte de service projeté et signé. Le SDK AWS présent dans le pod échange ce jeton contre des informations d’identification AWS temporaires au moyen de l’API AssumeRoleWithWebIdentity de AWS STS — aucune clé longue durée n’est nécessaire.
# View the OIDC issuer URL for your cluster
aws eks describe-cluster \
--name my-cluster \
--query 'cluster.identity.oidc.issuer' \
--output text
# Example output:
# https://oidc.eks.us-east-1.amazonaws.com/id/EXAMPLEIDSTRINGÉtape 1 : associer le fournisseur OIDC
Avant d’utiliser IRSA, vous devez associer l’émetteur OIDC d’EKS en tant que fournisseur d’identité approuvé dans votre compte AWS. Cela crée une ressource de fournisseur OIDC IAM que AWS STS reconnaîtra. La commande eksctl s’en charge automatiquement. Une fois la ressource créée, vous pouvez la vérifier dans la console IAM, sous Fournisseurs d’identité.
# Associate the OIDC provider using eksctl (simplest method)
eksctl utils associate-iam-oidc-provider \
--region us-east-1 \
--cluster my-cluster \
--approve
# Verify the provider was created
aws iam list-open-id-connect-providers \
--query 'OpenIDConnectProviderList[].Arn'Étape 2 : créer le rôle IAM
Le rôle IAM utilisé par IRSA doit disposer d’une politique d’approbation autorisant le fournisseur OIDC à l’assumer, avec une portée limitée à un espace de noms Kubernetes et à un compte de service précis. La condition utilise la revendication sub du jeton OIDC, définie sur system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT_NAME. Ainsi, seuls les pods utilisant ce compte de service précis peuvent assumer le rôle — et non n’importe quel pod du cluster.
# Trust policy for the IRSA role (JSON)
# {
# "Version": "2012-10-17",
# "Statement": [{
# "Effect": "Allow",
# "Principal": {
# "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLEID"
# },
# "Action": "sts:AssumeRoleWithWebIdentity",
# "Condition": {
# "StringEquals": {
# "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLEID:sub":
# "system:serviceaccount:production:s3-reader"
# }
# }
# }]
# }Étape 3 : annoter le compte de service
Créez un ServiceAccount Kubernetes dans l’espace de noms cible et annotez-le avec l’ARN du rôle IAM. Lorsqu’un pod fait référence à ce compte de service, EKS injecte automatiquement le jeton OIDC et deux variables d’environnement (AWS_WEB_IDENTITY_TOKEN_FILE et AWS_ROLE_ARN). Le SDK AWS les détecte automatiquement et appelle STS pour obtenir des informations d’identification temporaires — aucune modification du code de votre application n’est nécessaire.
# Create and annotate the Kubernetes service account
kubectl create serviceaccount s3-reader -n production
kubectl annotate serviceaccount s3-reader \
-n production \
eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/S3ReaderRole
# Verify the annotation
kubectl describe serviceaccount s3-reader -n productionÉtape 4 : référencer le compte de service dans les pods
Dans la spécification de votre pod ou de votre déploiement, définissez serviceAccountName sur le compte de service annoté. Lorsqu’EKS planifie le pod, il monte automatiquement le jeton OIDC à l’emplacement /var/run/secrets/eks.amazonaws.com/serviceaccount/token et définit les variables d’environnement requises. Tout appel au SDK AWS effectué dans le pod utilise de manière transparente les informations d’identification du rôle IAM associé, sans configuration explicite des informations d’identification.
# Pod spec using IRSA service account
apiVersion: v1
kind: Pod
metadata:
name: s3-app
namespace: production
spec:
serviceAccountName: s3-reader
containers:
- name: app
image: 111122223333.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
# AWS SDK auto-detects IRSA — no credential config needed
# AWS_WEB_IDENTITY_TOKEN_FILE and AWS_ROLE_ARN are injectedIRSA et le rôle IAM du nœud : principales différences
Avec un rôle IAM de nœud, chaque pod d’un nœud hérite des mêmes autorisations : un pod compromis peut accéder à tous les services AWS auxquels le nœud est autorisé à accéder. Avec IRSA, chaque pod, par l’intermédiaire de son compte de service, assume uniquement le rôle dont il a besoin. Cela applique le principe du moindre privilège au niveau du pod et limite l’étendue d’un éventuel incident de sécurité. AWS recommande IRSA plutôt que les rôles au niveau des nœuds pour tous les nouveaux déploiements EKS.
Créer des rôles IRSA avec eksctl
eksctl peut créer l’association OIDC, le rôle IAM, la politique d’approbation et l’annotation du ServiceAccount Kubernetes en une seule commande, à l’aide de create iamserviceaccount. C’est la manière la plus simple de configurer IRSA sans rédiger manuellement le JSON de la politique d’approbation. Vous indiquez l’espace de noms, le nom du compte de service et l’ARN de la politique IAM à associer ; eksctl s’occupe du reste.
# Create everything needed for IRSA in one command
eksctl create iamserviceaccount \
--name s3-reader \
--namespace production \
--cluster my-cluster \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \
--approve \
--override-existing-serviceaccountsIRSA pour les modules complémentaires AWS
De nombreux modules complémentaires et contrôleurs EKS nécessitent IRSA pour fonctionner : l’autoscaler du cluster doit pouvoir appeler l’API Auto Scaling d’EC2, le contrôleur d’équilibrage de charge AWS doit pouvoir créer et gérer des ressources ELB, external-dns doit disposer d’un accès en écriture à Route 53, et le pilote CSI EBS doit pouvoir créer et attacher des volumes EBS. Utilisez toujours IRSA pour ces composants système — n’accordez jamais ces autorisations au niveau du rôle IAM du nœud.
# Create IRSA for the EBS CSI driver
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster my-cluster \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve \
--role-name AmazonEKS_EBS_CSI_DriverRoleActualisation des jetons et rotation des informations d’identification
Les jetons IRSA ont une durée de vie courte et sont automatiquement renouvelés par le contrôleur de projection des jetons Kubernetes avant leur expiration. L’audience du jeton par défaut est sts.amazonaws.com et son expiration est fixée à 24 heures, mais le contrôleur les actualise à 80 % de leur durée de vie. Les informations d’identification AWS STS obtenues via IRSA sont elles aussi temporaires, généralement valides pendant 1 heure. Cette rotation automatique élimine la charge liée à la rotation des informations d’identification inhérente aux clés d’accès IAM de longue durée.
# Inspect the projected service account token inside a pod
kubectl exec -n production s3-app -- \
cat /var/run/secrets/eks.amazonaws.com/serviceaccount/token
# Decode the JWT header and payload to see expiry and audience
# jwt.io or: base64 -d <<< "PAYLOAD_SECTION"Auditer l’utilisation d’IRSA avec CloudTrail
Chaque fois qu’un pod assume un rôle IAM via IRSA, AWS CloudTrail enregistre un événement AssumeRoleWithWebIdentity. L’événement contient l’ARN du rôle assumé, le sujet du jeton OIDC (system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT) et l’adresse IP source. Vous disposez ainsi d’une piste d’audit complète indiquant quels pods ont accédé à quels services AWS et à quel moment — un élément essentiel pour la conformité et l’analyse des incidents dans les environnements réglementés.
# Search CloudTrail for IRSA calls
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=EventName,AttributeValue=AssumeRoleWithWebIdentity \
--start-time '2024-01-01T00:00:00Z' \
--query 'Events[].{Time:EventTime,Role:CloudTrailEvent}' \
--output tableVérification rapide
Vérifiez votre compréhension des concepts AWS Solutions Architect (SAA-C03) présentés dans cette leçon.
Récapitulatif de la leçon
Dans cette leçon, vous avez appris que : IRSA utilise la fédération OIDC pour échanger les jetons de comptes de service Kubernetes contre des informations d’identification AWS temporaires, que les politiques d’approbation des rôles IAM limitent l’accès à un espace de noms et à un compte de service précis, et qu’IRSA fournit le moindre privilège par pod, ce qui est largement supérieur aux rôles IAM au niveau des nœuds. Nous allons maintenant découvrir les métriques, les espaces de noms et les dimensions de CloudWatch pour surveiller vos ressources AWS.
Questions Fréquemment Posées
La leçon « Rôles IAM pour les comptes de service (IRSA) » est-elle gratuite ?
Oui — le texte complet de « Rôles IAM pour les comptes de service (IRSA) » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Cloud & IT Cert Prep, passe à CoddyKit PRO. Le cours Cloud & IT Cert Prep comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Rôles IAM pour les comptes de service (IRSA) » ?
Associez des rôles IAM précis aux comptes de service Kubernetes avec IRSA afin que les pods puissent accéder aux services AWS sans autorisations au niveau des nœuds. Tu pratiques Cloud & IT Cert Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Cloud & IT Cert Prep ?
Aucune expérience préalable n'est requise. Cloud & IT Cert Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Rôles IAM pour les comptes de service (IRSA) » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Cloud & IT Cert Prep ?
Oui. Chaque leçon Cloud & IT Cert Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Plan de contrôle et nœuds de travail EKS
- Profils Fargate pour les pods sans serveur
- Réseau EKS : CNI VPC et équilibrage de charge
- Rôles IAM pour les comptes de service (IRSA)