Setiap resource cloud — dan setiap keputusan arsitektur — harus dijaga oleh identity dan access management. Kalian mempelajari user, group, role, policy, service account, prinsip least privilege, serta membangun setup IAM yang aman: dari user akses kunci ke akses ephemeral dan policy yang diuji sebelum dipakai.

Kalian sudah membangun jaringan di episode 5, tetapi semua itu akan sia-sia jika siapa pun bisa membuka, mengubah, atau menghapus resource kalian. Di sinilah IAM (Identity and Access Management) berperan — lapisan keamanan yang menentukan siapa boleh melakukan apa terhadap resource mana.
Mengapa IAM adalah fondasi? Karena hampir semua pelanggaran cloud terjadi bukan lewat "hack canggih", melainkan melalui akses yang terlalu lebar: access key bocor dengan hak admin, akun lama yang tidak dihapus, atau policy yang membiarkan satu user menghapus seluruh bucket. Cloud engineer yang baik menganggap IAM bukan sebagai beban administrasi, tapi sebagai penjaga pintu yang diatur secara eksplisit sejak hari pertama.
User adalah identitas untuk manusia (atau aplikasi, via access key). Group adalah kumpulan user dengan peran sama — contoh developers, ops, auditors. Menggunakan group membuat pengelolaan jauh lebih mudah: tambah user ke group = langsung dapat semua izin yang sesuai.
aws iam create-group --group-name developers
aws iam create-user --user-name risa
aws iam add-user-to-group --group-name developers --user-name risa
aws iam create-access-key --user-name risaPolicy adalah dokumen JSON yang mendeskripsikan izin: Effect (Allow/Deny), Action (API apa), Resource (objek mana), dan Condition (kapan). Contoh policy read-only untuk S3:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::lab-backup",
"arn:aws:s3:::lab-backup/*"
]
}
]
}Perhatikan dua hal: Action dibatasi ke API baca saja (tidak ada s3:DeleteObject), dan Resource dibatasi ke satu bucket. Ini contoh nyata least privilege — beri izin seminimal mungkin yang masih memungkinkan pekerjaan selesai.
Role adalah identitas yang bisa diambil alih sementara — tidak punya password/access key permanen. Ini penting karena aplikasi yang berjalan di cloud (VM, Lambda, container) seharusnya tidak menyimpan kredensial panjang di dalam kode; mereka mengasumsikan role saat runtime.
aws iam create-role --role-name lambda-execution \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "lambda.amazonaws.com"},
"Action": "sts:AssumeRole"
}]
}'
aws iam attach-role-policy --role-name lambda-execution \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRoleGCP menyebutnya service account, Azure managed identity — konsepnya sama: identitas non-manusia dengan izin minimal yang bisa diasumsikan oleh workload. Di sinilah model shared responsibility bertemu keamanan: resource dalam cloud boleh berbicara ke resource lain tanpa menyimpan rahasia di kode.
Important
Aturan emas: tidak ada access key di dalam kode, image, atau environment variable yang ter-commit. Semua workload harus memakai role/service account. Jika kalian menemukan access key di repository, anggap sudah bocor: segera revoke dan buat baru.
Least privilege berarti setiap identitas hanya punya izin minimum untuk melakukan tugasnya. Implementasinya:
AdministratorAccess lalu berharap orang tidak menyalahgunakannya. Beri izin spesifik yang dibutuhkan.AmazonS3ReadOnlyAccess), lalu persempit dengan policy custom.Mari bangun setup IAM yang aman secara bertahap:
Group: developers → izin baca infrastruktur + deploy ke environment dev
Group: ops → izin penuh di lingkungan production
Group: auditors → read-only seluruh akun
Setiap user masuk ke SATU group. Access key hanya untuk CI/CD (episode 14),
bukan untuk user manusia — manusia memakai Single Sign-On / console login.Langkah latihan di AWS:
developers dan lampirkan policy managed ReadOnlyAccess.risa, masukkan ke group developers, dan uji bahwa ia tidak bisa membuat resource baru.lambda-execution untuk Lambda (seperti di atas) — buktikan fungsi bisa berjalan tanpa access key.Jika di GCP, konsepnya diterjemahkan: gcloud iam service-accounts create, assign roles roles/viewer ke grup, dan roles/cloudfunctions.invoker ke service account. Di Azure: az role assignment create --assignee ... --role Reader. Latih ketiganya — kemampuan menerjemahkan konsep ini adalah ciri cloud engineer lintas-provider.
*/* — Action: "*", Resource: "*" di mana-mana. Solusi: sesempit mungkin, uji dampak dulu.Tip
Biasakan menulis policy seperti menulis kode: kecil, spesifik, dan bisa di-review. Semakin mudah policy dibaca, semakin mudah ditemukan kelebihannya. Dan ingat, di cloud "default deny" adalah sahabat terbaik — izinkan yang dibutuhkan, tolak yang lain.
Inti yang harus dibawa pulang:
Di episode 7 selanjutnya kita akan mengotomasi seluruh provisioning yang barusan kalian lakukan manual — dengan Terraform: konsep IaC, provider, resource, state & remote state, hingga membangun infrastruktur dari kode. Sampai jumpa di episode 7!