← Semua pembelajaran / AWS untuk AI Engineer
Fase 0 · Fondasi AWS & IAM

IAM Role

Role adalah identitas tanpa kredensial permanen yang bisa diambil sementara oleh siapa pun yang diizinkan. Hampir semua hal di AWS berjalan di atas mekanisme ini.

Intisari

  • Role punya dua policy: trust policy (siapa boleh memakai) dan permissions policy (boleh apa).
  • Mengambil role menghasilkan kredensial sementara lewat AWS STS — otomatis kedaluwarsa.
  • Lambda, ECS, dan EC2 mendapat izin lewat role, bukan lewat access key yang ditempel.
  • Kalau AssumeRole gagal, 90% kasusnya salah di trust policy, bukan di izinnya.
  • Role adalah cara benar untuk akses lintas akun dan untuk CI/CD (via OIDC, tanpa rahasia sama sekali).

Role itu apa

Kalau IAM user adalah "siapa kamu", role adalah "peran yang sedang kamu pegang". Role tidak punya password dan tidak punya access key. Ia cuma seperangkat izin yang bisa dipinjam — dan saat dipinjam, AWS STS menerbitkan kredensial sementara yang mati sendiri setelah beberapa jam.

Setiap role selalu punya dua dokumen, dan membedakannya adalah kunci semua debugging IAM:

DokumenMenjawabPunya Principal?
Trust policySiapa yang boleh mengambil role ini?Ya
Permissions policySetelah diambil, boleh melakukan apa?Tidak

Contoh: role untuk fungsi Lambda

Trust policy — hanya layanan Lambda yang boleh memakai role ini:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": { "Service": "lambda.amazonaws.com" },
    "Action": "sts:AssumeRole"
  }]
}

Permissions policy — apa yang boleh dilakukan fungsi itu:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "bedrock:InvokeModelWithResponseStream",
      "Resource": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-*"
    },
    {
      "Effect": "Allow",
      "Action": ["logs:CreateLogStream", "logs:PutLogEvents"],
      "Resource": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/*"
    }
  ]
}

Hasilnya: kode Lambda-mu memanggil Bedrock tanpa satu baris pun kredensial. boto3 mengambil kredensial sementara dari environment yang disiapkan runtime Lambda. Ini yang membuat "tidak ada secret di kode" bukan sekadar slogan.

Siapa saja yang bisa jadi Principal

BentukContoh isiDipakai untuk
Servicelambda.amazonaws.comLayanan AWS menjalankan kodemu
AWSarn:aws:iam::111122223333:rootAkses lintas akun
Federatedtoken.actions.githubusercontent.comCI/CD via OIDC — tanpa rahasia tersimpan

Mengambil role dari kode

import boto3

sts = boto3.client("sts")
resp = sts.assume_role(
    RoleArn="arn:aws:iam::123456789012:role/BacaKnowledgeBase",
    RoleSessionName="ingest-harian",   # muncul di CloudTrail — beri nama yang berarti
)

kredensial = resp["Credentials"]
bedrock = boto3.client(
    "bedrock-runtime",
    aws_access_key_id=kredensial["AccessKeyId"],
    aws_secret_access_key=kredensial["SecretAccessKey"],
    aws_session_token=kredensial["SessionToken"],   # wajib — ini penanda kredensial sementara
)

Dalam praktik kamu jarang menulis ini. Untuk Lambda dan ECS, role sudah terpasang otomatis. Untuk laptopmu, aws configure sso yang mengurusnya. Kode di atas dipakai saat satu proses memang perlu berpindah peran — misalnya menyeberang akun.

Kenapa AssumeRole gagal

GejalaPenyebab yang paling sering
User … is not authorized to perform: sts:AssumeRoleTrust policy role belum mencantumkan principal-mu
Berhasil assume, tapi API-nya AccessDeniedTrust benar, permissions policy-nya yang kurang
Jalan di laptop, gagal di LambdaKamu memakai izin pribadimu, bukan izin role Lambda
Lintas akun tetap ditolakLintas akun butuh izin di kedua sisi: trust di sana, sts:AssumeRole di sini

Latihan: buat satu IAM role bernama BelajarBedrockRole dengan trust policy untuk lambda.amazonaws.com dan izin bedrock:InvokeModel saja. Belum perlu ada Lambda-nya — role ini dipakai lagi di Fase 1. Lalu jawab tanpa membuka dokumentasi: kenapa role ini tidak bisa kamu pakai langsung dari laptopmu?

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.