Role IAM dla kont usług (IRSA)
Powiązać precyzyjnie zdefiniowane role IAM z kontami usług Kubernetes za pomocą IRSA, aby pody mogły uzyskiwać dostęp do usług AWS bez uprawnień na poziomie węzłów.
Role IAM dla kont usług (IRSA) to bezpłatna lekcja AWS Solutions Architect na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AWS Solutions Architect, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AWS Solutions Architect zawiera 4 lekcji w sumie.
Problem IAM w podach
Gdy pod uruchomiony w EKS musi wywołać interfejs API AWS — na przykład odczytać dane z S3 lub zapisać je w DynamoDB — potrzebuje poświadczeń AWS. Naiwnym podejściem jest utworzenie użytkownika IAM i zapisanie jego kluczy dostępu na stałe w zmiennych środowiskowych. Jest to niebezpieczne i narusza zasadę najmniejszych uprawnień, ponieważ wszystkie pody na tym samym węźle współdzielą poświadczenia. IAM Roles for Service Accounts (IRSA) rozwiązuje ten problem, przypisując precyzyjnie określone role IAM bezpośrednio do kont usług Kubernetes.
Jak działa IRSA: federacja OIDC
IRSA działa za pośrednictwem federacji OpenID Connect (OIDC). EKS tworzy dostawcę OIDC dla klastra. Gdy pod odwołuje się do konta usługi z adnotacją zawierającą ARN roli IAM, EKS wstrzykuje do poda podpisany projekcyjny token konta usługi. AWS SDK działający w podzie wymienia ten token na tymczasowe poświadczenia AWS za pomocą interfejsu API AWS STS AssumeRoleWithWebIdentity — nie są potrzebne klucze długoterminowe.
# 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/EXAMPLEIDSTRINGKrok 1: Powiązanie dostawcy OIDC
Przed użyciem IRSA należy powiązać wystawcę OIDC EKS jako zaufanego dostawcę tożsamości na koncie AWS. Spowoduje to utworzenie zasobu dostawcy OIDC IAM, który zostanie rozpoznany przez AWS STS. Polecenie eksctl obsługuje to automatycznie. Po utworzeniu zasobu można zweryfikować go w konsoli IAM w sekcji 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'Krok 2: Utworzenie roli IAM
Rola IAM używana przez IRSA musi zawierać politykę zaufania, która zezwala dostawcy OIDC na przyjęcie tej roli, ograniczając to uprawnienie do określonej przestrzeni nazw Kubernetes i konta usługi. Warunek używa deklaracji sub w tokenie OIDC, której wartość ma postać system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT_NAME. Gwarantuje to, że rolę mogą przyjąć tylko pody korzystające z tego konkretnego konta usługi — a nie dowolny pod w klastrze.
# 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"
# }
# }
# }]
# }Krok 3: Dodanie adnotacji do konta usługi
Należy utworzyć obiekt Kubernetes ServiceAccount w docelowej przestrzeni nazw i dodać do niego adnotację z ARN roli IAM. Gdy pod odwołuje się do tego konta usługi, EKS automatycznie wstrzykuje token OIDC oraz dwie zmienne środowiskowe (AWS_WEB_IDENTITY_TOKEN_FILE i AWS_ROLE_ARN). AWS SDK automatycznie je wykrywa i wywołuje STS w celu uzyskania tymczasowych poświadczeń — aplikacja nie wymaga żadnych zmian w kodzie.
# 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 productionKrok 4: Odwołanie do konta usługi w podach
W specyfikacji poda lub wdrożenia należy ustawić serviceAccountName na nazwę konta usługi z adnotacją. Podczas planowania poda przez EKS token OIDC jest automatycznie montowany pod adresem /var/run/secrets/eks.amazonaws.com/serviceaccount/token, a wymagane zmienne środowiskowe są ustawiane. Każde wywołanie AWS SDK wewnątrz poda będzie w sposób transparentny korzystać z poświadczeń przypisanej roli IAM, bez jawnego konfigurowania poświadczeń.
# 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 a rola IAM węzła: najważniejsze różnice
W przypadku roli IAM węzła każdy pod na węźle dziedziczy te same uprawnienia — przejęty pod może uzyskać dostęp do wszystkich usług AWS, do których węzeł ma dostęp. W przypadku IRSA każdy pod (za pośrednictwem swojego konta usługi) przyjmuje tylko rolę, której potrzebuje. Jest to zgodne z zasadą najmniejszych uprawnień na poziomie poda i ogranicza zakres potencjalnych skutków incydentu bezpieczeństwa. AWS zaleca używanie IRSA zamiast ról na poziomie węzłów we wszystkich nowych wdrożeniach EKS.
Tworzenie ról IRSA za pomocą eksctl
eksctl może utworzyć powiązanie OIDC, rolę IAM, politykę zaufania i adnotację Kubernetes ServiceAccount za pomocą jednego polecenia create iamserviceaccount. Jest to najprostszy sposób skonfigurowania IRSA bez ręcznego tworzenia kodu JSON polityki zaufania. Należy podać przestrzeń nazw, nazwę konta usługi oraz ARN polityki IAM, która ma zostać dołączona, a eksctl zajmie się resztą.
# 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 dla dodatków AWS
Wiele dodatków i kontrolerów EKS wymaga IRSA do działania: Cluster Autoscaler potrzebuje uprawnień do wywoływania interfejsu API EC2 Auto Scaling, AWS Load Balancer Controller potrzebuje uprawnień do tworzenia zasobów ELB i zarządzania nimi, external-dns potrzebuje dostępu do zapisu w Route 53, a EBS CSI driver potrzebuje uprawnień do tworzenia woluminów EBS i dołączania ich. Dla tych komponentów systemowych zawsze należy używać IRSA — nigdy nie należy nadawać tych uprawnień na poziomie roli IAM węzła.
# 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_DriverRoleOdświeżanie tokenów i rotacja poświadczeń
Tokeny IRSA są krótkotrwałe i automatycznie rotowane przez kontroler projekcji tokenów Kubernetes przed wygaśnięciem. Domyślna grupa odbiorców tokenu to sts.amazonaws.com, a jego czas wygaśnięcia wynosi 24 godziny, jednak kontroler odświeża tokeny po upływie 80% ich czasu życia. Poświadczenia AWS STS uzyskane za pośrednictwem IRSA są również tymczasowe (zwykle ważne przez 1 godzinę). Automatyczna rotacja eliminuje obciążenie związane z rotacją poświadczeń, które występuje w przypadku długoterminowych kluczy dostępu IAM.
# 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"Audyt użycia IRSA za pomocą CloudTrail
Za każdym razem, gdy pod przyjmuje rolę IAM za pośrednictwem IRSA, AWS CloudTrail rejestruje zdarzenie AssumeRoleWithWebIdentity. Zdarzenie zawiera ARN przyjętej roli, podmiot tokenu OIDC (system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT) oraz źródłowy adres IP. Zapewnia to pełny ślad audytowy pokazujący, które pody uzyskiwały dostęp do których usług AWS i kiedy — co ma kluczowe znaczenie w procesach zgodności oraz podczas badania incydentów w regulowanych środowiskach.
# 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 tableSzybkie sprawdzenie
Sprawdź swoją znajomość zagadnień AWS Solutions Architect (SAA-C03) omawianych w tej lekcji.
Podsumowanie lekcji
W tej lekcji poznali Państwo następujące zagadnienia: IRSA używa federacji OIDC do wymiany tokenów kont usług Kubernetes na tymczasowe poświadczenia AWS, polityki zaufania ról IAM ograniczają dostęp do określonej przestrzeni nazw i konta usługi, a IRSA zapewnia najmniejsze uprawnienia dla każdego poda, znacznie przewyższając pod tym względem role IAM na poziomie węzła. W następnej części omówimy metryki, przestrzenie nazw i wymiary CloudWatch służące do monitorowania zasobów AWS.
Często zadawane pytania
Czy lekcja „Role IAM dla kont usług (IRSA)” jest bezpłatna?
Tak — pełny tekst „Role IAM dla kont usług (IRSA)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AWS Solutions Architect, przejdź na CoddyKit PRO. Kurs AWS Solutions Architect zawiera 4 lekcji w sumie.
Co nauczysz się w „Role IAM dla kont usług (IRSA)”?
Powiązać precyzyjnie zdefiniowane role IAM z kontami usług Kubernetes za pomocą IRSA, aby pody mogły uzyskiwać dostęp do usług AWS bez uprawnień na poziomie węzłów. Ćwiczysz AWS Solutions Architect z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AWS Solutions Architect?
Nie wymagamy żadnego doświadczenia. AWS Solutions Architect w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Role IAM dla kont usług (IRSA)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AWS Solutions Architect?
Tak. Każda lekcja AWS Solutions Architect zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Płaszczyzna sterowania EKS i węzły robocze
- Profile Fargate dla bezserwerowych podów
- Sieci EKS: VPC CNI i równoważenie obciążenia
- Role IAM dla kont usług (IRSA)