Episode ini membahas mengapa akun root tidak boleh dipakai sehari-hari, bahaya hardcoded API key, penggunaan temporary credentials dan role assumption di AWS, GCP, dan Azure, serta peran audit logging.

Di episode 3, kalian memahami IAM sebagai sistem izin: siapa boleh mengakses apa. Episode 4 menjawab pertanyaan praktik yang menyusul: bagaimana cara memakai IAM tanpa membahayakan akun?
Materi episode ini adalah perbedaan antara praktik amatir dan profesional. Banyak kebocoran cloud terjadi bukan karena teknologi canggih dibobol, melainkan karena praktik dasar yang salah: memakai akun root, menyimpan API key di kode, dan tidak mencatat siapa melakukan apa. Mari perbaiki kebiasaan itu dari awal.
Saat kalian membuat akun cloud, kalian menerima akun root (AWS), owner account (GCP), atau akun Global Administrator (Azure). Akun ini punya izin tak terbatas dan tidak bisa dibatasi policy apa pun — memang didesain begitu, karena hanya boleh dipakai sekali untuk hal-hal tertentu.
Bayangkan memiliki kunci master yang membuka semua pintu di gedung, tanpa CCTV dan tanpa catatan siapa masuk kapan. Menggunakannya untuk pekerjaan sehari-hari berarti satu kesalahan login sudah cukup untuk menghancurkan semuanya — itulah blast radius maksimal.
Aturannya sederhana:
Warning
Kalau akun root dipakai sehari-hari, hilangkan kebiasaan itu sekarang. Banyak penyedia menyediakan fitur seperti IAM Access Analyzer yang memperingatkan penggunaan akun root yang tidak wajar. Jadikan "tanpa root" sebagai aturan tim, bukan pengecualian.
Long-lived credentials adalah kredensial yang berlaku terus-menerus sampai dicabut manual — access key AWS, service account key GCP, atau password aplikasi Azure. Masalahnya: sekali bocor, ia kompromi akun kalian tanpa batas waktu.
Tiga jalur kebocoran paling umum:
.env yang tidak sengaja masuk ke image container.Bayangkan menaruh kunci rumah di bawah keset dengan label "kunci cadangan". Itu long-lived credential yang tersimpan tidak aman. Solusinya bukan menyimpan lebih baik — tapi menghindari kredensial panjang umur sama sekali.
Solusi modern untuk masalah di atas: temporary credentials — kredensial yang berlaku singkat (biasanya 15 menit sampai 12 jam), diterbitkan melalui peran yang di-asumsikan. Kalau bocor, masa berlakunya berakhir sendiri.
Di AWS, mekanismenya adalah STS AssumeRole: kalian meminta token sementara untuk memakai role tertentu.
aws sts assume-role \
--role-arn "arn:aws:iam::123456789012:role/DeployRole" \
--role-session-name "deploy-session" \
--duration-seconds 3600Perintah aws sts assume-role mengembalikan tiga nilai: access key, secret key, dan session token — semuanya berlaku satu jam. Contoh respons:
{
"Credentials": {
"AccessKeyId": "ASIAEXAMPLEACCESSKEY",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luEXAMPLE",
"Expiration": "2026-08-03T14:00:00Z"
},
"AssumedRoleUser": {
"AssumedRoleId": "AROEXAMPLEID:deploy-session",
"Arn": "arn:aws:sts::123456789012:assumed-role/DeployRole/deploy-session"
}
}Nilai-nilai ini lalu dipakai sebagai kredensial sesi:
export AWS_ACCESS_KEY_ID=ASIAEXAMPLEACCESSKEY
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_SESSION_TOKEN=IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luEXAMPLE
aws sts get-caller-identityPerhatikan: export AWS_SESSION_TOKEN=... memakai variabel lingkungan, bukan kode. Di AWS SDK modern, mekanisme ini bahkan otomatis: proses yang berjalan di EC2, ECS, atau Lambda memakai instance profile yang mengasumsikan role tanpa perlu menyimpan satu pun kredensial statis.
GCP memakai pola service account impersonation: sebuah identitas (misalnya CI/CD) meminta izin untuk "meminjam" identitas service account tertentu untuk sementara, dan kredensialnya diterbitkan sebagai token sementara.
gcloud auth application-default login \
--impersonate-service-account deploy-sa@my-project.iam.gserviceaccount.comCara ini menghindari men-download service account key (file JSON rahasia) yang sering bocor — kunci imporsisasi dikeluarkan on-demand dan berusia pendek.
Azure memakai managed identity dan workload identity federation: aplikasi yang berjalan di Azure otomatis mendapat identitas yang dikelola platform, tanpa secret sama sekali. Untuk CI/CD, federasi menghubungkan identitas workload (misalnya GitHub Actions) langsung ke service principal Azure — sehingga tidak ada rahasia yang perlu disimpan di pipeline.
az ad app federated-credential create \
--id 00000000-0000-0000-0000-000000000000 \
--parameters parameters.jsonPola ketiga penyedia ini punya satu esensi yang sama: jangan simpan kredensial panjang umur — pinjam identitas, dan biarkan masa berlakunya pendek.
Kredensial sementara mengurangi risiko, tapi tidak ada sistem yang sempurna. Pertanyaan terakhir yang harus selalu bisa dijawab: siapa melakukan apa, kapan? Itulah tugas audit logging.
| Penyedia | Layanan Audit | Contoh Event yang Direkam |
|---|---|---|
| AWS | AWS CloudTrail | sts assume-role, perubahan IAM, login konsol |
| GCP | Cloud Audit Logs | Pembuatan kunci service account, perubahan IAM |
| Azure | Activity Log | Pemberian role, pembuatan resource, perubahan policy |
Audit log adalah "black box" akun cloud: merekam setiap API call, oleh siapa, dari IP mana, dan dengan hasil apa. Dengan log ini, insiden bisa ditelusuri, dan praktik buruk seperti pemakaian akun root bisa terdeteksi.
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=EventName,AttributeValue=AssumeRolePerintah aws cloudtrail lookup-events mencari jejak siapa yang mengasumsikan role kapan. Kebiasaan yang disarankan: aktifkan audit logging sejak hari pertama — bukan saat sudah terjadi masalah.
.env yang ikut ter-deploy.Episode 4 menutup blok keamanan dasar seri ini:
Di episode 5, kalian masuk ke tulang punggung infrastruktur cloud: Virtual Private Cloud & networking — subnet publik dan privat, gateway, dan cara menghubungkan resource cloud dengan aman.