Cloud & IT Cert Prep · Les

IAM-rollen voor serviceaccounts (IRSA)

Koppel fijnmazige IAM-rollen aan Kubernetes-serviceaccounts met IRSA, zodat pods toegang hebben tot AWS-services zonder machtigingen op knooppuntniveau.

Les 4 van 413 stappen

IAM-rollen voor serviceaccounts (IRSA) is een gratis Cloud & IT Cert Prep-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Cloud & IT Cert Prep. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Cloud & IT Cert Prep bevat in totaal 4 lessen.

Het IAM-probleem met pods

Wanneer een pod die in EKS draait een AWS API moet aanroepen — bijvoorbeeld om uit S3 te lezen of naar DynamoDB te schrijven — heeft de pod AWS-inloggegevens nodig. De voor de hand liggende aanpak is om een IAM-gebruiker te maken en de toegangssleutels daarvan als omgevingsvariabelen vast in de code op te nemen. Dit is onveilig en in strijd met het principe van minimale rechten, omdat alle pods op dezelfde node dezelfde inloggegevens delen. IAM Roles for Service Accounts (IRSA) lost dit op door fijnmazige IAM-rollen rechtstreeks aan Kubernetes-serviceaccounts te koppelen.

Hoe IRSA werkt: OIDC-federatie

IRSA werkt via OpenID Connect (OIDC)-federatie. EKS maakt een OIDC-provider voor uw cluster. Wanneer een pod verwijst naar een serviceaccount waaraan een IAM-rol-ARN is toegevoegd, injecteert EKS een ondertekend geprojecteerd serviceaccounttoken in de pod. De AWS SDK in de pod wisselt dit token om voor tijdelijke AWS-inloggegevens met behulp van de AssumeRoleWithWebIdentity-API van AWS STS — langlopende sleutels zijn niet nodig.

# 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

Stap 1: OIDC-provider koppelen

Voordat u IRSA gebruikt, moet u de OIDC-uitgever van EKS als vertrouwde identiteitsprovider koppelen in uw AWS-account. Hierdoor wordt een IAM OIDC-providerresource gemaakt die door AWS STS wordt herkend. De opdracht eksctl regelt dit automatisch. Nadat de provider is gemaakt, kunt u deze in de IAM-console verifiëren onder 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'

Stap 2: IAM-rol maken

De IAM-rol voor IRSA moet een vertrouwensbeleid hebben waarmee de OIDC-provider de rol mag aannemen, beperkt tot een specifieke Kubernetes-namespace en een specifiek serviceaccount. De voorwaarde gebruikt de claim sub in het OIDC-token, die is ingesteld op system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT_NAME. Hierdoor kunnen alleen pods die dat specifieke serviceaccount gebruiken de rol aannemen — niet elke pod in het 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"
#       }
#     }
#   }]
# }

Stap 3: Serviceaccount annoteren

Maak een Kubernetes-ServiceAccount in de doelnamespace en voeg de IAM-rol-ARN als annotatie toe. Wanneer een pod naar dit serviceaccount verwijst, injecteert EKS automatisch het OIDC-token en twee omgevingsvariabelen (AWS_WEB_IDENTITY_TOKEN_FILE en AWS_ROLE_ARN). De AWS SDK detecteert deze automatisch en roept STS aan om tijdelijke inloggegevens te verkrijgen — u hoeft geen code in uw toepassing te wijzigen.

# 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

Stap 4: Naar het serviceaccount verwijzen in pods

Stel in de specificatie van uw pod of implementatie serviceAccountName in op het geannoteerde serviceaccount. Wanneer EKS de pod plant, koppelt EKS het OIDC-token automatisch aan op /var/run/secrets/eks.amazonaws.com/serviceaccount/token en stelt het de vereiste omgevingsvariabelen in. Elke AWS SDK-aanroep in de pod gebruikt transparant de inloggegevens van de gekoppelde IAM-rol, zonder expliciete configuratie van inloggegevens.

# 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 versus IAM-rol van de node: belangrijkste verschillen

Met een IAM-rol van een node erft elke pod op een node dezelfde machtigingen — een gecompromitteerde pod kan toegang krijgen tot alle AWS-services waartoe de node toegang heeft. Met IRSA neemt elke pod via zijn serviceaccount alleen de rol aan die nodig is. Dit volgt het principe van minimale rechten op podniveau en beperkt de impact van een beveiligingsincident. AWS raadt IRSA aan boven rollen op node-niveau voor alle nieuwe EKS-implementaties.

IRSA-rollen maken met eksctl

Met eksctl kunt u de OIDC-koppeling, IAM-rol, het vertrouwensbeleid en de annotatie van het Kubernetes-ServiceAccount met één opdracht maken via create iamserviceaccount. Dit is de eenvoudigste manier om IRSA in te stellen zonder handmatig JSON voor het vertrouwensbeleid te schrijven. U geeft de namespace, de naam van het serviceaccount en de ARN van het toe te voegen IAM-beleid op; eksctl regelt de rest.

# 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 voor AWS-add-ons

Veel EKS-add-ons en controllers hebben IRSA nodig om te functioneren: Cluster Autoscaler heeft toestemming nodig om de EC2 Auto Scaling API aan te roepen, de AWS Load Balancer Controller heeft toestemming nodig om ELB-resources te maken en te beheren, external-dns heeft schrijftoegang tot Route 53 nodig en het EBS CSI-stuurprogramma heeft toestemming nodig om EBS-volumes te maken en te koppelen. Gebruik altijd IRSA voor deze systeemcomponenten — verleen deze machtigingen nooit op het niveau van de IAM-rol van de node.

# 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

Tokenvernieuwing en rotatie van inloggegevens

IRSA-tokens hebben een korte levensduur en worden automatisch geroteerd door de Kubernetes-controller voor tokenprojectie voordat ze verlopen. De standaarddoelgroep van het token is sts.amazonaws.com en de vervaltijd is 24 uur, maar de controller vernieuwt de tokens wanneer 80% van hun levensduur is verstreken. AWS STS-inloggegevens die via IRSA zijn verkregen, zijn ook tijdelijk (meestal 1 uur). Deze automatische rotatie neemt de last weg van het roteren van inloggegevens die hoort bij langlopende IAM-toegangssleutels.

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

IRSA-gebruik controleren met CloudTrail

Elke keer dat een pod via IRSA een IAM-rol aanneemt, registreert AWS CloudTrail een gebeurtenis van het type AssumeRoleWithWebIdentity. De gebeurtenis bevat de ARN van de aangenomen rol, het onderwerp van het OIDC-token (system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT) en het bron-IP-adres. Hierdoor ontstaat een volledige audittrail van welke pods welke AWS-services hebben gebruikt en wanneer — cruciaal voor naleving en onderzoek van incidenten in gereguleerde omgevingen.

# 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

Korte controle

Test uw begrip van de concepten uit AWS Solutions Architect (SAA-C03) in deze les.

Samenvatting van de les

In deze les hebt u geleerd dat IRSA OIDC-federatie gebruikt om Kubernetes-serviceaccounttokens om te wisselen voor tijdelijke AWS-inloggegevens, dat vertrouwensbeleidsregels voor IAM-rollen de toegang beperken tot een specifieke namespace en een specifiek serviceaccount, en dat IRSA minimale rechten per pod biedt, wat veel beter is dan IAM-rollen op node-niveau. Hierna bekijken we CloudWatch-statistieken, namespaces en dimensies voor het observeren van uw AWS-resources.

Gratis beginnen

Leer Cloud & IT Cert Prep met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
150
Lessen
600

Veelgestelde vragen

Is de les “IAM-rollen voor serviceaccounts (IRSA)” gratis?

Ja — de volledige tekst van “IAM-rollen voor serviceaccounts (IRSA)” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Cloud & IT Cert Prep wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Cloud & IT Cert Prep bevat in totaal 4 lessen.

Wat leer ik in “IAM-rollen voor serviceaccounts (IRSA)”?

Koppel fijnmazige IAM-rollen aan Kubernetes-serviceaccounts met IRSA, zodat pods toegang hebben tot AWS-services zonder machtigingen op knooppuntniveau. Je oefent met Cloud & IT Cert Prep door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Cloud & IT Cert Prep te beginnen?

Ervaring vooraf is niet nodig. Cloud & IT Cert Prep op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “IAM-rollen voor serviceaccounts (IRSA)”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Cloud & IT Cert Prep?

Ja. Elke les over Cloud & IT Cert Prep bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. EKS-control plane en workerknooppunten
  2. Fargate-profielen voor serverloze pods
  3. EKS-netwerken: VPC CNI en load balancing
  4. IAM-rollen voor serviceaccounts (IRSA)
← Terug naar Cloud & IT Cert Prep