Belajar Cloud Security Engineer - Cloud Data Security
Episode 6 of 28

Belajar Cloud Security Engineer - Cloud Data Security

Mengamankan data di cloud: enkripsi at rest dan in transit dengan KMS, envelope encryption, perbedaan AWS managed key vs customer managed key, key policy dan rotation, block public access untuk S3, serta data classification yang menentukan tingkat proteksi tiap dataset

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 5 kita mengeraskan workload — golden image, IMDSv2, Session Manager — sekarang kita sampai pada aset yang menjadi alasan semua lapisan itu ada: data. Firewall, IAM, dan hardening adalah benteng; data adalah harta yang dibentengi.

Mengapa episode ini penting? Karena kebocoran data adalah dampak akhir dari hampir semua insiden, dan regulasi (GDPR, UU PDP) menetapkan konsekuensi finansial langsung padanya. Kabar baiknya: di cloud, enkripsi yang dulu mahal dan rumit kini bisa jadi default — asal kalian tahu mana yang perlu dikunci lebih keras.

Enkripsi At Rest dan In Transit

Dua keadaan data yang butuh perlindungan berbeda:

KeadaanAncaman UtamaKontrol
In transitIntersepsi, MITMTLS 1.2+, mTLS antar-service
At restDisk dicuri/snapshot bocorAES-256 via KMS/managed key

Praktik minimum 2026: TLS wajib untuk semua endpoint (tolak versi lama), dan encryption by default untuk semua storage service — S3, EBS, RDS, EFS, Redshift semuanya mendukung satu baris konfigurasi.

KMS dan Envelope Encryption

KMS mengelola key induk (CMK) di dalam HSM yang tidak pernah keluar. Untuk objek besar, cloud memakai envelope encryption: data dienkripsi dengan data key, dan data key itu sendiri dienkripsi dengan CMK.

100%

Pola ini menjawab pertanyaan penting: siapa yang boleh mendekripsi bukan ditentukan siapa yang punya akses bucket, melainkan oleh key policy. Itulah lapisan kontrol kedua yang membuat eksfiltrasi mentah tetap tak berguna.

Perbedaan dua jenis key:

Jenis KeySiapa KelolaKapan Dipakai
AWS managed key (aws/s3)AWS otomatisDefault; rotasi otomatis; tanpa kontrol granular
Customer managed key (CMK)Kalian (policy, rotasi, audit)Data sensitif, kebutuhan regulasi, cross-account

Aturan praktis: mulai dengan AWS managed key untuk umum, naikkan ke CMK untuk data terklasifikasi sensitif — karena CMK memberi kalian key policy, audit trail per-pemakaian, dan rotation schedule yang bisa dipertanggungjawabkan.

Key Policy dan Rotation

Key policy adalah dokumen IAM yang menempel pada CMK — dan ia wajib mengizinkan pemilik akun, kalau tidak, key bisa jadi tak terkelola sama sekali. Contoh CMK untuk tim pembayaran:

kms-key-policy-payments.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "EnableIAMUserPermissions",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::123456789012:root"},
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "AllowPaymentsTeamUse",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::123456789012:role/payments-runtime"},
      "Action": ["kms:Decrypt", "kms:GenerateDataKey"],
      "Resource": "*"
    },
    {
      "Sid": "DenyWithoutTLS",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "kms:*",
      "Resource": "*",
      "Condition": {"Bool": {"kms:ViaService": "s3.ap-southeast-1.amazonaws.com", "Bool": {"aws:SecureTransport": "false"}}}
    }
  ]
}

Aktifkan rotasi tahunan untuk CMK — material lama dipertahankan untuk dekripsi data lama, sementara operasi baru pakai material baru:

Aktifkan rotasi CMK
aws kms enable-key-rotation --key-id alias/payments-data
aws kms get-key-rotation-status --key-id alias/payments-data

S3: Block Public Access dan Bucket Guardrail

S3 adalah lokasi paling sering bocor di seluruh cloud. Tiga pengaman berlapis:

  1. Block Public Access di level account — matikan kemampuan publik untuk semua bucket sekaligus.
  2. Bucket policy yang menolak trafik non-TLS — mencegah aksi GetObject lewat HTTP.
  3. Ownership controls + no ACL — satu pemilik, izin hanya lewat policy.
Kunci S3 di level account
aws s3control put-public-access-block \
  --account-id 123456789012 \
  --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
Bucket policy: tolak non-TLS
{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "DenyInsecureTransport",
    "Effect": "Deny",
    "Principal": "*",
    "Action": "s3:*",
    "Resource": [
      "arn:aws:s3:::payments-docs-prod",
      "arn:aws:s3:::payments-docs-prod/*"
    ],
    "Condition": {"Bool": {"aws:SecureTransport": "false"}}
  }]
}

Warning

Enkripsi default S3 (sejak Januari 2023) membuat objek terenkripsi otomatis — tapi jangan merasa aman begitu saja. Jika key-nya AWS managed dan policy bucket longgar, penyerang yang mencuri kredensial valid tetap bisa membaca data. Enkripsi mengunci data dari disk, policy mengunci data dari orang.

Data Classification

Tidak semua data setara. Klasifikasi menentukan di mana kalian investasikan CMK, logging ketat, dan review manual:

LevelContohKontrol Minimum
PublikDokumentasi produkIntegritas & availability saja
InternalDiagram arsitekturAkses internal, TLS
RahasiaData pelanggan agregatCMK, akses role spesifik, audit log
Sangat rahasiaPII, kartu kredit, kredensialCMK + rotation ketat, private endpoint, akses break-glass, DLP

Tag klasifikasi ini sebaiknya hidup sebagai tag resource (data-class=restricted) sehingga bisa dipakai CSPM untuk menegakkan kontrol sesuai level — pola yang akan kita otomasi di episode 7 dan 11.

Praktik: Setup Enkripsi End-to-End

Rakit semuanya untuk satu bucket data sensitif:

secure-bucket.tf
resource "aws_kms_key" "docs" {
  description             = "CMK for restricted docs"
  enable_key_rotation     = true
  deletion_window_in_days = 30
}
 
resource "aws_s3_bucket" "docs" {
  bucket = "payments-docs-prod"
}
 
resource "aws_s3_bucket_server_side_encryption_configuration" "docs" {
  bucket = aws_s3_bucket.docs.id
 
  rule {
    apply_server_side_encryption_by_default {
      kms_master_key_id = aws_kms_key.docs.arn
      sse_algorithm     = "aws:kms"
    }
    bucket_key_enabled = true # hemat biaya KMS request hingga 99%
  }
}
 
resource "aws_s3_bucket_public_access_block" "docs" {
  bucket                  = aws_s3_bucket.docs.id
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

Verifikasi bahwa objek benar-benar terenkripsi dengan CMK kalian:

Cek header enkripsi objek
aws s3api head-object --bucket payments-docs-prod --key laporan/q1.pdf \
  --query '{SSE:ServerSideEncryption,Key:SSEKMSKeyId}'

Penutup

Inti yang harus dibawa pulang:

  • Lindungi data dalam dua keadaan: in transit (TLS/mTLS) dan at rest (KMS).
  • Envelope encryption + key policy memberi lapisan kontrol kedua: akses storage saja tidak cukup untuk membaca isi.
  • Gunakan CMK untuk data terklasifikasi tinggi — dengan rotasi dan audit trail.
  • S3 dikunci berlapis: block public access, deny non-TLS, ownership control.
  • Klasifikasi data menentukan investasi proteksi; jadikan ia tag resource yang bisa dievaluasi mesin.

Di episode 7 selanjutnya kita bicara tentang mesin yang menemukan kesalahan kita sebelum penyerang: CSPM dan misconfiguration — Security Hub, Defender for Cloud, CIS benchmark, dan cara remediation yang efisien. Sampai jumpa!

Belajar Cloud Security Engineer - Cloud Data Security | Belajar Cloud Security Engineer