Keamanan cloud bukan "tambahan terakhir" melainkan fondasi yang meresap ke setiap lapisan: shared responsibility model, encryption di mana pun data berada, dan secrets yang tidak pernah menyentuh kode. Kalian mempelajari KMS, Secret Manager, compliance SOC2/GDPR, lalu melakukan security audit untuk infrastruktur yang sudah dibangun sejak episode 3.

Di episode 14 kita memasang pipeline CI/CD yang men-deploy aplikasi otomatis. Tapi ada satu hal yang saya singgung sebagai kesalahan umum: "credential di YAML". Kenapa itu dilarang? Karena satu file pipeline yang bocor bisa membuka seluruh akun cloud kalian. Di episode inilah celah itu ditutup.
Episode 15 membahas cloud security & compliance: shared responsibility model, encryption (data at rest dan in transit), secrets management (KMS dan Secret Manager), hingga compliance (SOC2, GDPR). Kalian juga akan melakukan security audit untuk infrastruktur yang telah dibangun sejak episode 3 — dan kalian akan terkejut berapa banyak lubang yang selama ini terbuka.
Aturan pertama keamanan cloud adalah memahami siapa bertanggung jawab atas apa. Jawabannya dibagi antara provider dan kalian:
| Lapisan | Tanggung jawab provider | Tanggung jawab kalian |
|---|---|---|
| Hardware, network fisik, datacenter | Provider | — |
| Hypervisor & fisik server | Provider | — |
| OS di VM kalian | — | Kalian |
| Konfigurasi security group / firewall | — | Kalian |
| Kode aplikasi, data, credentials | — | Kalian |
| Kontrol akses (IAM) | — | Kalian |
Kalimat yang wajib diingat: provider menjaga keamanan cloud, kalian menjaga keamanan di dalam cloud. VM yang kalian buat di episode 3 dengan default security group "buka semua port" adalah tanggung jawab kalian — bukan provider. Kesalahan memahami model ini adalah akar dari hampir semua insiden kebocoran data.
Sebagian besar praktik baik sudah kalian sentuh di episode-episode sebelumnya. Sekarang kita rangkai menjadi satu pola:
Warning
Urutan prioritasnya penting: kalian tidak bisa menambal keamanan setelah insiden. Dari episode 3 sampai 14, semua yang kalian bangun harus dipahami ulang lewat kacamata keamanan di episode ini — VPC, IAM, secrets di pipeline, sampai akses VM.
Enkripsi bekerja di dua sisi: at rest (data tersimpan di disk/object storage/database) dan in transit (data bergerak antar-komponen).
Provider mengenkripsi storage secara default — S3, EBS, Cloud Storage, semuanya. Yang penting dipahami adalah kunci enkripsi dan siapa yang memegangnya:
Prinsip penting: enkripsi default itu gratis dan otomatis — jangan pernah mematikannya. Keahlian kalian bukan di "menyalakan enkripsi", melainkan di mengelola kunci dan memutar (rotate) kunci secara berkala.
Semua lalu lintas web harus memakai TLS (HTTPS). Hal yang sering terlewat: koneksi internal antara aplikasi dan database juga harus dienkripsi. Banyak arsitektur aman di luar tapi terbuka lebar di dalam.
aws s3api get-bucket-encryption \
--bucket lab-static-assets \
--query ServerSideEncryptionConfigurationJika perintah di atas mengembalikan error, bucket tidak terenkripsi — langsung perbaiki. Untuk HTTPS, pastikan load balancer kalian (episode 5) menerima koneksi HTTP saja di port 443, dan redirect port 80.
Secrets adalah password, access key, token API, dan kredensial database. Aturannya satu: tidak pernah di kode, di config, atau di repository. Ketiga provider punya layanan khusus:
| Kemampuan | AWS Secrets Manager | GCP Secret Manager | Azure Key Vault |
|---|---|---|---|
| Simpan secret terenkripsi | Ya | Ya | Ya |
| Rotasi otomatis | Ya | Manual/terjadwal | Ya |
| Integrasi IAM | Ya | Ya | Ya |
| Versioning | Ya | Ya | Ya |
Pola pemakaiannya sama di semua provider: tulis secret sekali, aplikasi membaca saat runtime — bukan saat build. Contoh di AWS:
aws secretsmanager create-secret \
--name lab-db-credentials \
--secret-string '{"username":"app","password":"P@ssw0rd_Lab!"}'
aws secretsmanager get-secret-value \
--secret-id lab-db-credentials \
--query SecretStringPenting: --secret-string di atas hanya untuk latihan. Di produksi, nilai secret masuk lewat console atau Terraform dengan referensi yang terenkripsi, tidak pernah terlihat di terminal.
Kembali ke episode 14: pipeline yang tadi menaruh credential di YAML harus diubah memakai referensi secret. Ini contoh mengubah environment variable di container memakai nilai dari Secrets Manager:
# Sebelum (SALAH) - credential tertulis di YAML
# env:
# DB_PASSWORD: "P@ssw0rd_Lab!"
# Sesudah (BENAR) - ambil dari secret store saat runtime
env:
DB_PASSWORD: '{{resolve:secretsmanager:lab-db-credentials:SecretString:password}}'Tip
Jika kalian memakai Kubernetes (episode 10), pola yang sama berlaku lewat External Secrets Operator atau secrets-store-csi-driver: secret tetap di cloud, pod hanya meminta nilai saat berjalan. Prinsipnya identik — secret tidak pernah ada di repository.
Compliance adalah bukti bahwa sistem kalian memenuhi standar keamanan tertentu. Tiga yang paling sering ditemui di industri:
Yang wajib dipahami: compliance adalah proses dan bukti, bukan sekadar menyalakan fitur. Buktinya berasal dari:
GDPR menekankan pada hak untuk dihapus — sistem harus bisa menghapus data user secara tuntas. Ini berdampak langsung ke desain storage: jangan menyebarkan data user di 10 tempat tanpa peta. Data inventory adalah syarat compliance.
Mari audit infrastruktur yang sudah kalian bangun sejak episode 3. Checklist audit:
git grep -i "password\|access_key" di repository; hapus yang bocor dan rotasi.git grep -n -i -E "password|secret|access_key|BEGIN (RSA|OPENSSH) PRIVATE KEY"Semua temuan audit dicatat, diprioritaskan (kritis/lagi/sedang), dan diperbaiki bertahap. Pola "temukan → catat → perbaiki → verifikasi" ini akan kalian pakai terus di dunia kerja nyata.
0.0.0.0/0 di semua port; tutup port yang tidak dipakai (episode 5).Inti yang harus dibawa pulang:
Di episode 16 selanjutnya kita akan membahas topik yang tak kalah penting untuk kelangsungan hidup cloud kalian: cost optimization & FinOps — right-sizing, reserved/savings plans, tagging, dan cost monitoring, lalu mengaudit serta memangkas tagihan infrastruktur kalian. Sampai jumpa di episode 16!