IAM-roller til servicekonti (IRSA)
Tilknyt detaljerede IAM-roller til Kubernetes-servicekonti med IRSA, så pods kan tilgå AWS-tjenester uden tilladelser på nodeniveau
IAM-roller til servicekonti (IRSA) er en gratis Cloud & IT Cert Prep-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cloud & IT Cert Prep, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.
IAM-problemet med pods
Når en pod, der kører i EKS, skal kalde en AWS API — f.eks. læse fra S3 eller skrive til DynamoDB — har den brug for AWS-legitimationsoplysninger. Den naive tilgang er at oprette en IAM-bruger og hardkode dens adgangsnøgler som miljøvariabler. Det er usikkert og overtræder princippet om mindst mulige rettigheder, fordi alle pods på den samme node deler legitimationsoplysninger. IAM Roles for Service Accounts (IRSA) løser dette ved at knytte fintmaskede IAM-roller direkte til Kubernetes-servicekonti.
Sådan fungerer IRSA: OIDC-federation
IRSA fungerer via OpenID Connect (OIDC)-federation. EKS opretter en OIDC-udbyder til din klynge. Når en pod refererer til en servicekonto, der er annoteret med en IAM-rolle-ARN, indsætter EKS et signeret projiceret servicekontotoken i podden. AWS SDK'et i podden udveksler dette token for midlertidige AWS-legitimationsoplysninger ved hjælp af AWS STS' AssumeRoleWithWebIdentity-API — der kræves ingen langtidsholdbare nøgler.
# 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/EXAMPLEIDSTRINGTrin 1: Tilknyt OIDC-udbyderen
Før du bruger IRSA, skal du tilknytte EKS' OIDC-udsteder som en betroet identitetsudbyder på din AWS-konto. Det opretter en IAM OIDC-udbyderressource, som AWS STS genkender. Kommandoen eksctl håndterer dette automatisk. Når den er oprettet, kan du bekræfte den i IAM-konsollen under 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'Trin 2: Opret IAM-rollen
IAM-rollen til IRSA skal have en tillidspolitik, der tillader OIDC-udbyderen at påtage sig rollen, begrænset til et bestemt Kubernetes-navneområde og en bestemt servicekonto. Betingelsen bruger sub-claimet i OIDC-tokenet, som er angivet til system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT_NAME. Det sikrer, at kun pods, der bruger netop denne servicekonto, kan påtage sig rollen — ikke alle pods i klyngen.
# 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"
# }
# }
# }]
# }Trin 3: Annoter servicekontoen
Opret en Kubernetes-ServiceAccount i mål-navneområdet, og annoter den med IAM-rolle-ARN'en. Når en pod refererer til denne servicekonto, indsætter EKS automatisk OIDC-tokenet og to miljøvariabler (AWS_WEB_IDENTITY_TOKEN_FILE og AWS_ROLE_ARN). AWS SDK'et registrerer automatisk disse og kalder STS for at hente midlertidige legitimationsoplysninger — der kræves ingen kodeændringer i din applikation.
# 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 productionTrin 4: Referer til servicekontoen i pods
I din pod- eller deployment-specifikation skal du angive serviceAccountName til den annoterede servicekonto. Når EKS planlægger podden, monterer den automatisk OIDC-tokenet på /var/run/secrets/eks.amazonaws.com/serviceaccount/token og angiver de nødvendige miljøvariabler. Alle AWS SDK-kald inde i podden bruger transparent legitimationsoplysningerne for den tilknyttede IAM-rolle uden nogen eksplicit konfiguration af legitimationsoplysninger.
# 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 sammenlignet med node-IAM-rolle: Vigtige forskelle
Med en node-IAM-rolle arver alle pods på en node de samme tilladelser — en kompromitteret pod kan få adgang til alle AWS-tjenester, som noden har adgang til. Med IRSA påtager hver pod (via sin servicekonto) sig kun den rolle, den har brug for. Det følger princippet om mindst mulige rettigheder på podniveau og begrænser konsekvenserne af enhver sikkerhedshændelse. AWS anbefaler IRSA frem for roller på nodeniveau til alle nye EKS-udrulninger.
Oprette IRSA-roller med eksctl
eksctl kan oprette OIDC-tilknytningen, IAM-rollen, tillidspolitikken og Kubernetes ServiceAccount-annotationen med en enkelt kommando ved hjælp af create iamserviceaccount. Det er den enkleste måde at konfigurere IRSA på uden manuelt at skrive JSON til tillidspolitikken. Du angiver navneområdet, servicekontonavnet og ARN'en for den IAM-politik, der skal knyttes til rollen, og eksctl håndterer resten.
# 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 til AWS-tilføjelser
Mange EKS-tilføjelser og controllere kræver IRSA for at fungere: Cluster Autoscaler skal have tilladelse til at kalde EC2 Auto Scaling-API'et, AWS Load Balancer Controller skal have tilladelse til at oprette og administrere ELB-ressourcer, external-dns skal have skriverettigheder til Route 53, og EBS CSI driver skal have tilladelse til at oprette og tilknytte EBS-diskenheder. Brug altid IRSA til disse systemkomponenter — tildel aldrig tilladelserne på niveauet for IAM-rollen på noden.
# 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_DriverRoleTokenfornyelse og rotation af legitimationsoplysninger
IRSA-tokens har kort levetid og roteres automatisk af Kubernetes-controlleren til tokenprojektion, før de udløber. Standardmålgruppen for tokenet er sts.amazonaws.com, og udløbstiden er 24 timer, men controlleren fornyer dem efter 80 % af deres levetid. AWS STS-legitimationsoplysninger, der hentes via IRSA, er også midlertidige (typisk 1 time). Denne automatiske rotation fjerner arbejdet med at rotere legitimationsoplysninger, som følger med langtidsholdbare IAM-adgangsnøgler.
# 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"Revidere IRSA-brug med CloudTrail
Hver gang en pod påtager sig en IAM-rolle via IRSA, registrerer AWS CloudTrail en AssumeRoleWithWebIdentity-hændelse. Hændelsen indeholder ARN'en for den påtagne rolle, OIDC-tokenets subject (system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT) og kilde-IP'en. Det giver et komplet revisionsspor over, hvilke pods der tilgik hvilke AWS-tjenester og hvornår — hvilket er afgørende for overholdelse af krav og undersøgelse af hændelser i regulerede miljøer.
# 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 tableHurtigt tjek
Test din forståelse af begreberne fra AWS Solutions Architect (SAA-C03) i denne lektion.
Opsummering af lektionen
I denne lektion har du lært, at IRSA bruger OIDC-federation til at udveksle Kubernetes-servicekontotokens for midlertidige AWS-legitimationsoplysninger, at IAM-rollers tillidspolitikker begrænser adgangen til et bestemt navneområde og en bestemt servicekonto, og at IRSA giver mindst mulige rettigheder pr. pod, hvilket er langt bedre end IAM-roller på nodeniveau. Nu går vi videre til CloudWatch Metrics, Namespaces og Dimensions, som bruges til at overvåge dine AWS-ressourcer.
Lær Cloud & IT Cert Prep med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 150
- Lektioner
- 600
Ofte stillede spørgsmål
Er lektionen “IAM-roller til servicekonti (IRSA)” gratis?
Ja — hele teksten til “IAM-roller til servicekonti (IRSA)” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cloud & IT Cert Prep-kurset, skal du opgradere til CoddyKit PRO. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “IAM-roller til servicekonti (IRSA)”?
Tilknyt detaljerede IAM-roller til Kubernetes-servicekonti med IRSA, så pods kan tilgå AWS-tjenester uden tilladelser på nodeniveau Du øver dig i Cloud & IT Cert Prep med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Cloud & IT Cert Prep?
Der kræves ingen tidligere erfaring. Cloud & IT Cert Prep på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “IAM-roller til servicekonti (IRSA)”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Cloud & IT Cert Prep-lektion?
Ja. Alle Cloud & IT Cert Prep-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- EKS-kontrolplan og workernoder
- Fargate-profiler til serverløse pods
- EKS-netværk: VPC CNI og belastningsfordeling
- IAM-roller til servicekonti (IRSA)