Peran IAM untuk Akun Layanan (IRSA)
Ikat peran IAM dengan hak akses terperinci ke akun layanan Kubernetes menggunakan IRSA agar pod dapat mengakses layanan AWS tanpa izin tingkat node.
Peran IAM untuk Akun Layanan (IRSA) adalah pelajaran AWS Solutions Architect gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AWS Solutions Architect, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AWS Solutions Architect mencakup 4 pelajaran total.
Masalah IAM pada Pod
Saat pod yang berjalan di EKS perlu memanggil API AWS—misalnya membaca dari S3 atau menulis ke DynamoDB—pod tersebut memerlukan kredensial AWS. Pendekatan sederhana adalah membuat pengguna IAM lalu menuliskan kunci aksesnya secara langsung sebagai variabel lingkungan. Cara ini tidak aman dan melanggar prinsip hak akses paling rendah karena semua pod pada node yang sama berbagi kredensial. Peran IAM untuk Akun Layanan (IRSA) mengatasi masalah ini dengan mengaitkan peran IAM yang terperinci secara langsung ke akun layanan Kubernetes.
Cara Kerja IRSA: Federasi OIDC
IRSA bekerja melalui federasi OpenID Connect (OIDC). EKS membuat penyedia OIDC untuk klaster Anda. Saat pod merujuk ke akun layanan yang diberi anotasi berisi ARN peran IAM, EKS menyuntikkan token akun layanan yang diproyeksikan dan ditandatangani ke dalam pod. AWS SDK di dalam pod menukarkan token ini dengan kredensial AWS sementara menggunakan API AssumeRoleWithWebIdentity milik AWS STS—tanpa memerlukan kunci yang berlaku lama.
# 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/EXAMPLEIDSTRINGLangkah 1: Kaitkan Penyedia OIDC
Sebelum menggunakan IRSA, Anda harus mengaitkan penerbit OIDC EKS sebagai penyedia identitas tepercaya di akun AWS Anda. Proses ini membuat sumber daya penyedia OIDC IAM yang akan dikenali oleh AWS STS. Perintah eksctl menangani proses ini secara otomatis. Setelah dibuat, Anda dapat memverifikasinya di konsol IAM, pada bagian 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'Langkah 2: Buat Peran IAM
Peran IAM untuk IRSA harus memiliki kebijakan kepercayaan yang mengizinkan penyedia OIDC untuk mengasumsikannya, dengan cakupan pada namespace Kubernetes dan akun layanan tertentu. Kondisi tersebut menggunakan klaim sub dalam token OIDC, yang ditetapkan ke system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT_NAME. Dengan demikian, hanya pod yang menggunakan akun layanan tertentu tersebut yang dapat mengasumsikan peran—bukan sembarang pod dalam klaster.
# 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"
# }
# }
# }]
# }Langkah 3: Beri Anotasi pada Akun Layanan
Buat ServiceAccount Kubernetes di namespace target dan beri anotasi berisi ARN peran IAM. Saat pod merujuk ke akun layanan ini, EKS secara otomatis menyuntikkan token OIDC dan dua variabel lingkungan (AWS_WEB_IDENTITY_TOKEN_FILE dan AWS_ROLE_ARN). AWS SDK secara otomatis mendeteksi keduanya dan memanggil STS untuk mendapatkan kredensial sementara—tidak diperlukan perubahan kode pada aplikasi Anda.
# 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 productionLangkah 4: Rujuk Akun Layanan di Pod
Dalam spesifikasi pod atau deployment Anda, tetapkan serviceAccountName ke akun layanan yang telah diberi anotasi. Saat EKS menjadwalkan pod, EKS secara otomatis memasang token OIDC di /var/run/secrets/eks.amazonaws.com/serviceaccount/token dan menetapkan variabel lingkungan yang diperlukan. Setiap pemanggilan AWS SDK di dalam pod akan menggunakan kredensial peran IAM yang dipetakan secara transparan, tanpa konfigurasi kredensial secara eksplisit.
# 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 injectedPerbedaan Utama IRSA dan Peran IAM Node
Dengan peran IAM node, setiap pod pada sebuah node mewarisi izin yang sama—pod yang disusupi dapat mengakses semua layanan AWS yang boleh diakses node tersebut. Dengan IRSA, setiap pod (melalui akun layanannya) hanya mengasumsikan peran yang dibutuhkannya. Hal ini mengikuti prinsip hak akses paling rendah pada tingkat pod dan membatasi dampak dari setiap insiden keamanan. AWS merekomendasikan IRSA daripada peran tingkat node untuk semua deployment EKS baru.
Menggunakan eksctl untuk Membuat Peran IRSA
eksctl dapat membuat asosiasi OIDC, peran IAM, kebijakan kepercayaan, dan anotasi ServiceAccount Kubernetes dalam satu perintah menggunakan create iamserviceaccount. Ini adalah cara paling sederhana untuk menyiapkan IRSA tanpa menulis JSON kebijakan kepercayaan secara manual. Anda menentukan namespace, nama akun layanan, dan ARN kebijakan IAM yang akan dilampirkan, lalu eksctl menangani sisanya.
# 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 untuk Add-On AWS
Banyak add-on dan pengontrol EKS memerlukan IRSA agar dapat berfungsi: Cluster Autoscaler memerlukan izin untuk memanggil API Auto Scaling EC2, AWS Load Balancer Controller memerlukan izin untuk membuat dan mengelola sumber daya ELB, external-dns memerlukan akses tulis ke Route 53, dan driver EBS CSI memerlukan izin untuk membuat serta memasang volume EBS. Selalu gunakan IRSA untuk komponen sistem ini—jangan pernah memberikan izin tersebut pada tingkat peran IAM 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_DriverRolePembaruan Token dan Rotasi Kredensial
Token IRSA berumur pendek dan diputar secara otomatis oleh pengontrol proyeksi token Kubernetes sebelum kedaluwarsa. Audiens token default adalah sts.amazonaws.com dan masa berlakunya 24 jam, tetapi pengontrol memperbaruinya saat mencapai 80% dari masa berlaku. Kredensial AWS STS yang diperoleh melalui IRSA juga bersifat sementara (biasanya 1 jam). Rotasi otomatis ini menghilangkan beban rotasi kredensial yang muncul pada kunci akses IAM yang berlaku lama.
# 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"Mengaudit Penggunaan IRSA dengan CloudTrail
Setiap kali pod mengasumsikan peran IAM melalui IRSA, AWS CloudTrail mencatat peristiwa AssumeRoleWithWebIdentity. Peristiwa tersebut mencakup ARN peran yang diasumsikan, subjek token OIDC (system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT), dan IP sumber. Ini menyediakan jejak audit lengkap tentang pod mana yang mengakses layanan AWS mana dan kapan—hal yang sangat penting untuk kepatuhan serta investigasi insiden di lingkungan yang diatur.
# 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 tablePemeriksaan Singkat
Uji pemahaman Anda tentang konsep AWS Solutions Architect (SAA-C03) dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini Anda telah mempelajari bahwa: IRSA menggunakan federasi OIDC untuk menukarkan token akun layanan Kubernetes dengan kredensial AWS sementara, kebijakan kepercayaan peran IAM membatasi akses ke namespace dan akun layanan tertentu, serta IRSA menyediakan hak akses paling rendah per pod yang jauh lebih baik daripada peran IAM tingkat node. Selanjutnya kita akan membahas Metrik CloudWatch, Namespace, dan Dimensi untuk mengamati sumber daya AWS Anda.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Peran IAM untuk Akun Layanan (IRSA)” gratis?
Ya — teks lengkap “Peran IAM untuk Akun Layanan (IRSA)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AWS Solutions Architect, upgrade ke CoddyKit PRO. Kursus AWS Solutions Architect mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Peran IAM untuk Akun Layanan (IRSA)”?
Ikat peran IAM dengan hak akses terperinci ke akun layanan Kubernetes menggunakan IRSA agar pod dapat mengakses layanan AWS tanpa izin tingkat node. Kamu berlatih AWS Solutions Architect dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AWS Solutions Architect?
Tidak diperlukan pengalaman sebelumnya. AWS Solutions Architect di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Peran IAM untuk Akun Layanan (IRSA)” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AWS Solutions Architect ini?
Ya. Setiap pelajaran AWS Solutions Architect menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Bidang Kontrol dan Node Pekerja EKS
- Profil Fargate untuk Pod Tanpa Server
- Jaringan EKS: VPC CNI dan Penyeimbangan Beban
- Peran IAM untuk Akun Layanan (IRSA)