0Pricing
AWS Solutions Architect · Lezione

Ruoli IAM per gli account di servizio (IRSA)

Associare ruoli IAM con autorizzazioni granulari agli account di servizio Kubernetes tramite IRSA, affinché i pod possano accedere ai servizi AWS senza autorizzazioni a livello di nodo

Ruoli IAM per gli account di servizio (IRSA) è una lezione AWS Solutions Architect gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AWS Solutions Architect, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AWS Solutions Architect include 4 lezioni in totale.

Il problema IAM dei pod

Quando un pod in esecuzione in EKS deve chiamare un'API AWS, ad esempio per leggere da S3 o scrivere in DynamoDB, ha bisogno di credenziali AWS. L'approccio più semplice consiste nel creare un utente IAM e impostare le relative chiavi di accesso come variabili d'ambiente. Questa soluzione non è sicura e viola il principio del privilegio minimo, perché tutti i pod sullo stesso nodo condividono le credenziali. IAM Roles for Service Accounts (IRSA) risolve il problema associando ruoli IAM con autorizzazioni granulari direttamente agli account di servizio Kubernetes.

Come funziona IRSA: federazione OIDC

IRSA funziona tramite la federazione OpenID Connect (OIDC). EKS crea un provider OIDC per il cluster. Quando un pod fa riferimento a un account di servizio annotato con un ARN di ruolo IAM, EKS inserisce nel pod un token proiettato dell'account di servizio e firmato. L'AWS SDK nel pod scambia questo token con credenziali AWS temporanee utilizzando l'API AssumeRoleWithWebIdentity di AWS STS, senza bisogno di chiavi a lunga durata.

# 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

Passaggio 1: associare il provider OIDC

Prima di utilizzare IRSA, deve associare l'issuer OIDC di EKS come provider di identità attendibile nel proprio account AWS. In questo modo viene creata una risorsa provider OIDC IAM che AWS STS riconoscerà. Il comando eksctl gestisce automaticamente questa operazione. Dopo la creazione, può verificarla nella console IAM, nella sezione Identity Providers.

# 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'

Passaggio 2: creare il ruolo IAM

Il ruolo IAM per IRSA deve avere una trust policy che consenta al provider OIDC di assumerlo, limitandone l'ambito a uno specifico namespace Kubernetes e a uno specifico account di servizio. La condizione utilizza il claim sub nel token OIDC, impostato su system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT_NAME. In questo modo solo i pod che utilizzano quello specifico account di servizio possono assumere il ruolo, non un pod qualsiasi del 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"
#       }
#     }
#   }]
# }

Passaggio 3: annotare l'account di servizio

Crei un ServiceAccount Kubernetes nel namespace di destinazione e lo annoti con l'ARN del ruolo IAM. Quando un pod fa riferimento a questo account di servizio, EKS inserisce automaticamente il token OIDC e due variabili d'ambiente (AWS_WEB_IDENTITY_TOKEN_FILE e AWS_ROLE_ARN). L'AWS SDK le rileva automaticamente e chiama STS per ottenere credenziali temporanee: non sono necessarie modifiche al codice dell'applicazione.

# 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

Passaggio 4: fare riferimento all'account di servizio nei pod

Nella specifica del pod o del deployment, imposti serviceAccountName sull'account di servizio annotato. Quando EKS pianifica il pod, monta automaticamente il token OIDC in /var/run/secrets/eks.amazonaws.com/serviceaccount/token e imposta le variabili d'ambiente necessarie. Qualsiasi chiamata all'AWS SDK all'interno del pod utilizzerà in modo trasparente le credenziali del ruolo IAM associato, senza alcuna configurazione esplicita delle credenziali.

# 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 injected

IRSA e ruolo IAM del nodo: differenze principali

Con un ruolo IAM del nodo, ogni pod su un nodo eredita le stesse autorizzazioni: un pod compromesso può accedere a tutti i servizi AWS a cui il nodo può accedere. Con IRSA, ogni pod, tramite il proprio account di servizio, assume solo il ruolo di cui ha bisogno. Questo applica il principio del privilegio minimo a livello di pod e limita l'impatto di qualsiasi incidente di sicurezza. AWS consiglia IRSA anziché i ruoli a livello di nodo per tutti i nuovi deployment EKS.

Creazione di ruoli IRSA con eksctl

eksctl può creare l'associazione OIDC, il ruolo IAM, la trust policy e l'annotazione Kubernetes del ServiceAccount con un singolo comando che utilizza create iamserviceaccount. Questo è il modo più semplice per configurare IRSA senza scrivere manualmente il JSON della trust policy. È sufficiente specificare il namespace, il nome dell'account di servizio e l'ARN della policy IAM da associare: eksctl gestirà il resto.

# 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-serviceaccounts

IRSA per gli add-on AWS

Molti add-on e controller EKS richiedono IRSA per funzionare: Cluster Autoscaler necessita dell'autorizzazione a chiamare l'API EC2 Auto Scaling, AWS Load Balancer Controller necessita dell'autorizzazione a creare e gestire risorse ELB, external-dns necessita dell'accesso in scrittura a Route 53 e il driver EBS CSI necessita dell'autorizzazione a creare e collegare volumi EBS. Utilizzi sempre IRSA per questi componenti di sistema: non conceda mai queste autorizzazioni a livello del ruolo IAM del nodo.

# 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_DriverRole

Aggiornamento dei token e rotazione delle credenziali

I token IRSA hanno una durata breve e vengono ruotati automaticamente dal controller di proiezione dei token Kubernetes prima della scadenza. Il pubblico predefinito del token è sts.amazonaws.com e la scadenza è di 24 ore, ma il controller li aggiorna quando è trascorso l'80% della loro durata. Anche le credenziali AWS STS ottenute tramite IRSA sono temporanee, in genere con durata di 1 ora. Questa rotazione automatica elimina l'onere di ruotare le credenziali associato alle chiavi di accesso IAM a lunga durata.

# 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"

Verifica dell'utilizzo di IRSA con CloudTrail

Ogni volta che un pod assume un ruolo IAM tramite IRSA, AWS CloudTrail registra un evento AssumeRoleWithWebIdentity. L'evento include l'ARN del ruolo assunto, il subject del token OIDC (system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT) e l'indirizzo IP di origine. Questo fornisce un audit trail completo dei pod che hanno acceduto ai servizi AWS, dei servizi utilizzati e del momento dell'accesso, un elemento fondamentale per la conformità e l'analisi degli incidenti negli ambienti regolamentati.

# 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 table

Verifica rapida

Verifichi la Sua comprensione dei concetti di AWS Solutions Architect (SAA-C03) trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che IRSA utilizza la federazione OIDC per scambiare i token degli account di servizio Kubernetes con credenziali AWS temporanee, che le trust policy dei ruoli IAM limitano l'accesso a uno specifico namespace e account di servizio e che IRSA offre il privilegio minimo per pod, molto più efficacemente rispetto ai ruoli IAM a livello di nodo. Ora esamineremo le metriche, i namespace e le dimensioni di CloudWatch per monitorare le risorse AWS.

Domande Frequenti

La lezione «Ruoli IAM per gli account di servizio (IRSA)» è gratuita?

Sì — il testo completo di «Ruoli IAM per gli account di servizio (IRSA)» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AWS Solutions Architect, passa a CoddyKit PRO. Il corso AWS Solutions Architect include 4 lezioni in totale.

Cosa imparerò in «Ruoli IAM per gli account di servizio (IRSA)»?

Associare ruoli IAM con autorizzazioni granulari agli account di servizio Kubernetes tramite IRSA, affinché i pod possano accedere ai servizi AWS senza autorizzazioni a livello di nodo Eserciti AWS Solutions Architect con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AWS Solutions Architect?

Non è richiesta alcuna esperienza precedente. AWS Solutions Architect su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Ruoli IAM per gli account di servizio (IRSA)»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AWS Solutions Architect?

Sì. Ogni lezione AWS Solutions Architect include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Piano di controllo e nodi di lavoro EKS
  2. Profili Fargate per pod serverless
  3. Networking EKS: VPC CNI e bilanciamento del carico
  4. Ruoli IAM per gli account di servizio (IRSA)
← Torna a AWS Solutions Architect