0Pricing
AWS Solutions Architect · Pelajaran

KMS, ACM, dan Pola Enkripsi

Kelola kunci enkripsi dengan AWS KMS, sediakan dan rotasikan sertifikat TLS dengan ACM, lalu pilih antara enkripsi sisi klien, sisi server, dan saat transit.

KMS, ACM, dan Pola Enkripsi adalah pelajaran AWS Solutions Architect gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AWS Solutions Architect, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AWS Solutions Architect mencakup 4 pelajaran total.

Enkripsi di AWS: Gambaran Umum

Enkripsi merupakan kontrol keamanan fundamental yang melindungi kerahasiaan data, bahkan jika media penyimpanan disusupi atau akses diperoleh melalui cara lain. AWS menyediakan enkripsi untuk data saat disimpan (tersimpan dalam basis data, S3, EBS) dan saat transit (bergerak melalui jaringan). Layanan utama: AWS Key Management Service (KMS) mengelola kunci enkripsi untuk enkripsi saat disimpan. AWS Certificate Manager (ACM) menyediakan dan mengelola sertifikat TLS untuk enkripsi saat transit. Memahami kapan dan bagaimana menerapkan masing-masing layanan sangat penting untuk domain Security Architecture pada SAA-C03.

# Encryption coverage on AWS:
# At rest (KMS):
#   S3, EBS, RDS, DynamoDB, EFS, SQS,
#   Lambda env vars, Secrets Manager, SSM Parameter Store

# In transit (ACM/TLS):
#   ALB listeners (HTTPS), API Gateway, CloudFront,
#   Direct Connect, VPN, inter-service communication

# Both:
#   S3 Server-Side Encryption + HTTPS only policy

AWS KMS: Key Management Service

AWS KMS adalah layanan yang dikelola sepenuhnya untuk membuat dan mengendalikan kunci enkripsi. KMS menggunakan Hardware Security Modules (HSMs) untuk melindungi kunci — materi kunci tidak pernah keluar dari HSM dalam keadaan tidak terenkripsi. KMS terintegrasi dengan sebagian besar layanan AWS untuk enkripsi sisi server. Jenis kunci: AWS Managed Keys (gratis, dirotasi otomatis setiap tahun, tidak dapat Anda kendalikan secara langsung), Customer Managed Keys (CMK) ($1/bulan masing-masing, Anda mengendalikan rotasi, kebijakan kunci, dan penghapusan). Custom Key Store menggunakan klaster CloudHSM milik Anda sendiri untuk persyaratan kepatuhan yang mewajibkan HSM khusus.

# Create a Customer Managed Key (CMK)
aws kms create-key \
  --description 'Production database encryption key' \
  --key-usage ENCRYPT_DECRYPT \
  --origin AWS_KMS \
  --tags TagKey=Purpose,TagValue=RDS-Encryption

# Create an alias for the key
aws kms create-alias \
  --alias-name alias/prod-db-key \
  --target-key-id arn:aws:kms:us-east-1:123:key/abc-def

# CMK costs: $1/month + $0.03 per 10,000 API calls

Kebijakan dan Grants Kunci KMS

Setiap kunci KMS memiliki kebijakan kunci — kebijakan berbasis sumber daya yang mengendalikan siapa yang dapat menggunakan dan mengelola kunci tersebut. Berbeda dari kebijakan IAM yang berbasis identitas, kebijakan kunci bersifat wajib: kebijakan kunci harus memberikan akses secara eksplisit agar kebijakan IAM dapat berlaku. Praktik terbaik: pisahkan administrasi kunci (siapa yang dapat mengelola kunci) dari penggunaan kunci (layanan dan peran mana yang dapat mengenkripsi/mendekripsi). Gunakan key grants untuk akses delegasi sementara — misalnya, berikan klaster EMR akses sementara untuk menggunakan kunci KMS dalam suatu pekerjaan tanpa mengubah kebijakan kunci.

# KMS key policy: grant RDS and admin access
{
  'Statement': [
    {
      'Sid': 'Enable root account full access',
      'Principal': {'AWS': 'arn:aws:iam::123:root'},
      'Action': 'kms:*',
      'Effect': 'Allow'
    },
    {
      'Sid': 'Allow RDS to use this key',
      'Principal': {'Service': 'rds.amazonaws.com'},
      'Action': ['kms:Encrypt','kms:Decrypt','kms:GenerateDataKey'],
      'Effect': 'Allow'
    }
  ]
}

Enkripsi Amplop KMS

KMS menggunakan enkripsi amplop untuk melindungi data dalam jumlah besar secara efisien. Anda tidak dapat mengenkripsi lebih dari 4 KB secara langsung dengan kunci KMS. Sebagai gantinya: KMS menghasilkan Data Encryption Key (DEK) — kunci acak yang digunakan untuk mengenkripsi data aktual secara lokal. DEK kemudian dienkripsi oleh kunci KMS Anda (Key Encryption Key). Anda menyimpan DEK yang telah dienkripsi bersama data yang telah dienkripsi. Untuk mendekripsi, Anda terlebih dahulu memanggil KMS untuk mendekripsi DEK, lalu menggunakan DEK plaintext secara lokal untuk mendekripsi data. Beginilah cara kerja enkripsi S3, EBS, dan RDS di balik layar.

# Generate a Data Key (for envelope encryption)
aws kms generate-data-key \
  --key-id alias/my-key \
  --key-spec AES_256

# Response contains:
# Plaintext: base64-encoded DEK (use to encrypt data locally)
# CiphertextBlob: KMS-encrypted DEK (store alongside data)

# To decrypt:
# 1. Call kms:Decrypt(CiphertextBlob) -> plaintext DEK
# 2. Use plaintext DEK to decrypt data locally
# 3. Zeroize plaintext DEK from memory
aws kms decrypt --ciphertext-blob fileb://encrypted-dek.bin

Rotasi Kunci KMS

Rotasi kunci merupakan praktik terbaik keamanan yang secara berkala mengganti materi kunci kriptografis, sehingga membatasi jangka waktu paparan jika kunci disusupi. Untuk Customer Managed Keys, Anda dapat mengaktifkan rotasi otomatis tahunan — KMS menghasilkan materi kunci baru dan menggunakannya untuk operasi enkripsi baru, sekaligus mempertahankan materi kunci lama untuk mendekripsi data yang sudah ada. AWS Managed Keys dirotasi otomatis setiap tahun. Imported key material TIDAK mendukung rotasi otomatis (Anda harus melakukan rotasi secara manual). Setelah rotasi, operasi KMS baru secara otomatis menggunakan materi kunci baru tanpa perubahan pada aplikasi.

# Enable automatic annual key rotation
aws kms enable-key-rotation \
  --key-id alias/prod-db-key

# Verify rotation is enabled
aws kms get-key-rotation-status \
  --key-id alias/prod-db-key

# Manual rotation (for imported key material):
# 1. Create a new CMK
# 2. Update all services to use new key
# 3. Re-encrypt existing data with new key
# 4. Schedule old key for deletion (minimum 7-day waiting period)

Opsi Enkripsi Sisi Server S3

S3 mendukung tiga opsi enkripsi sisi server: SSE-S3 — S3 mengelola kunci menggunakan AES-256, gratis, dengan kontrol minimum. SSE-KMS — menggunakan kunci KMS (dikelola AWS atau CMK), menyediakan jejak audit kunci di CloudTrail, mendukung kebijakan kunci, dan dikenai biaya per panggilan API KMS. SSE-C — Anda menyediakan dan mengelola materi kunci pada setiap permintaan; S3 tidak pernah menyimpan kunci tersebut. Gunakan SSE-KMS ketika Anda memerlukan kontrol audit atas siapa yang menggunakan kunci dan kapan. Gunakan SSE-S3 untuk data dengan sensitivitas rendah ketika kesederhanaan dan biaya menjadi pertimbangan. Tegakkan enkripsi dengan kebijakan bucket yang menolak PutObject tanpa enkripsi.

# Enforce SSE-KMS on all new S3 objects
aws s3api put-bucket-policy \
  --bucket my-secure-bucket \
  --policy '{
    "Statement": [{
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-secure-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "aws:kms"
        }
      }
    }]
  }'

# Set default encryption for bucket
aws s3api put-bucket-encryption \
  --bucket my-secure-bucket \
  --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms","KMSMasterKeyID":"alias/my-key"}}]}'

AWS Certificate Manager (ACM)

AWS Certificate Manager (ACM) menyediakan, mengelola, dan memperbarui otomatis sertifikat SSL/TLS untuk layanan AWS tanpa biaya. Sertifikat ACM dapat digunakan dengan ALB, NLB, CloudFront, API Gateway, dan AppSync. ACM menangani siklus hidup sertifikat secara otomatis — ACM memperbarui sertifikat 60 hari sebelum kedaluwarsa dan menerapkan pembaruan tersebut secara transparan. Anda dapat meminta sertifikat untuk domain yang Anda miliki (divalidasi melalui DNS atau email) atau mengimpor sertifikat pihak ketiga. Sertifikat ACM TIDAK dapat diunduh — sertifikat tersebut terikat pada layanan AWS yang terkait dengannya.

# Request a public ACM certificate
aws acm request-certificate \
  --domain-name app.example.com \
  --subject-alternative-names '*.example.com' \
  --validation-method DNS

# ACM returns a CNAME record to add to Route 53
# Add the CNAME -> ACM validates domain ownership
# Certificate is issued and auto-renews annually

# Attach to ALB listener (HTTPS:443)
aws elbv2 create-listener \
  --load-balancer-arn <ALB-ARN> \
  --protocol HTTPS --port 443 \
  --certificates CertificateArn=arn:aws:acm:us-east-1:123:certificate/abc \
  --default-actions Type=forward,TargetGroupArn=<TG-ARN>

ACM Private Certificate Authority

ACM Private CA (Certificate Authority) memungkinkan Anda membuat hierarki CA privat yang dikelola sepenuhnya untuk menerbitkan sertifikat bagi sumber daya internal — instans EC2, kontainer, API internal, dan perangkat IoT. Berbeda dari sertifikat ACM publik (yang digunakan dengan layanan yang dapat diakses melalui internet), sertifikat CA privat dapat diterbitkan untuk nama host atau alamat IP internal apa pun. Gunakan Private CA untuk: TLS mutual (mTLS) antar-layanan mikro, autentikasi berbasis sertifikat untuk VPN, dan persyaratan kepatuhan untuk PKI internal. Biaya Private CA adalah $400/bulan untuk CA, ditambah $0.75 per sertifikat yang diterbitkan.

# Create ACM Private Certificate Authority
aws acm-pca create-certificate-authority \
  --certificate-authority-type ROOT \
  --certificate-authority-configuration '{
    "KeyAlgorithm": "RSA_2048",
    "SigningAlgorithm": "SHA256WITHRSA",
    "Subject": {
      "Country": "US",
      "Organization": "Example Corp",
      "CommonName": "Example Corp Internal CA"
    }
  }'

# Issue certificate from private CA
aws acm request-certificate \
  --domain-name internal-service.example.internal \
  --certificate-authority-arn arn:aws:acm-pca:us-east-1:123:certificate-authority/xxx

Enkripsi EBS dan RDS

Untuk enkripsi volume EBS, aktifkan saat membuat volume (atau salin volume yang sudah ada dengan enkripsi diaktifkan). Semua data pada volume, termasuk snapshot, dienkripsi menggunakan kunci KMS yang Anda tentukan. Enkripsi EBS bersifat transparan bagi sistem operasi — tidak diperlukan perubahan pada aplikasi. Untuk enkripsi RDS, aktifkan saat membuat instans DB; Anda tidak dapat mengenkripsi instans RDS yang sudah ada dan belum terenkripsi secara langsung. Solusinya: buat snapshot terenkripsi dari instans yang belum terenkripsi, lalu pulihkan ke instans terenkripsi yang baru. Snapshot terenkripsi EBS dan RDS tetap terenkripsi saat disalin.

# Enable account-level EBS default encryption
aws ec2 enable-ebs-encryption-by-default
aws ec2 modify-ebs-default-kms-key-id \
  --kms-key-id alias/prod-ebs-key

# Encrypt an existing unencrypted RDS instance:
# 1. Create unencrypted snapshot
aws rds create-db-snapshot \
  --db-instance-identifier mydb \
  --db-snapshot-identifier mydb-plain-snapshot

# 2. Copy snapshot with encryption
aws rds copy-db-snapshot \
  --source-db-snapshot-identifier mydb-plain-snapshot \
  --target-db-snapshot-identifier mydb-encrypted-snapshot \
  --kms-key-id alias/prod-db-key

Enkripsi Sisi Klien vs Sisi Server

Memahami perbedaan antara enkripsi sisi server dan sisi klien penting untuk ujian SAA-C03. Enkripsi sisi server: AWS mengenkripsi data setelah menerimanya dan mendekripsinya sebelum mengirimkannya — data berada dalam teks biasa antara aplikasi Anda dan AWS. Enkripsi sisi klien: Anda mengenkripsi data sebelum mengirimkannya ke AWS — AWS hanya menyimpan teks sandi dan tidak pernah melihat teks biasa. Gunakan enkripsi sisi klien untuk data dengan sensitivitas tertinggi ketika Anda tidak dapat memercayai penyedia cloud untuk menangani teks biasa, seperti catatan kesehatan atau data keuangan yang tunduk pada peraturan ketat.

# Client-side encryption with AWS Encryption SDK
# (conceptual Python example)

# 1. Application encrypts data locally using KMS DEK
# from aws_encryption_sdk import KmsKeyProvider, encrypt

# key_provider = KmsKeyProvider(key_ids=['alias/my-key'])
# ciphertext, _ = encrypt(
#     source=b'Sensitive patient data',
#     key_provider=key_provider
# )

# 2. Send ciphertext to S3
# s3.put_object(Bucket='hipaa-data', Key='record.enc', Body=ciphertext)

# AWS only stores ciphertext - cannot decrypt without your key policy

Akses Lintas Akun KMS

Kunci KMS dapat dibagikan di antara akun AWS untuk skenario enkripsi lintas akun. Misalnya, jika aplikasi Account A menulis data terenkripsi ke bucket S3 milik Account B, kunci KMS milik Account A harus mengizinkan principal Account B untuk menggunakannya. Konfigurasikan kebijakan kunci KMS di Account A untuk memberikan akses lintas akun, lalu buat kebijakan IAM di Account B agar peran tersebut dapat menggunakan kunci milik Account A. Pola ini umum digunakan dalam arsitektur berbagi data dan multi-akun, ketika akun pusat mengelola kunci enkripsi.

# KMS key policy: allow cross-account access
# (in Account A's key policy)
{
  'Sid': 'Allow Account B to use this key',
  'Effect': 'Allow',
  'Principal': {
    'AWS': 'arn:aws:iam::999999999999:root'
  },
  'Action': [
    'kms:Encrypt',
    'kms:Decrypt',
    'kms:ReEncrypt*',
    'kms:GenerateDataKey*',
    'kms:DescribeKey'
  ],
  'Resource': '*'
}

# Account B IAM policy also needed to allow the role to use it

Pemeriksaan Cepat

Uji pemahaman Anda tentang konsep AWS Solutions Architect (SAA-C03) dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini Anda mempelajari bahwa: KMS mengelola kunci enkripsi dengan perlindungan HSM dan mendukung CMK untuk kontrol akses terperinci serta jejak audit, ACM menyediakan dan memperbarui otomatis sertifikat TLS untuk layanan AWS tanpa biaya, dan enkripsi dapat diterapkan di sisi server (KMS) atau sisi klien, dengan sisi server sebagai pola yang paling umum untuk beban kerja asli AWS. Terapkan enkripsi dengan kebijakan bucket yang menolak operasi tanpa enkripsi. Selanjutnya kita akan membahas GuardDuty, Inspector, dan Macie.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “KMS, ACM, dan Pola Enkripsi” gratis?

Ya — teks lengkap “KMS, ACM, dan Pola Enkripsi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AWS Solutions Architect, upgrade ke CoddyKit PRO. Kursus AWS Solutions Architect mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “KMS, ACM, dan Pola Enkripsi”?

Kelola kunci enkripsi dengan AWS KMS, sediakan dan rotasikan sertifikat TLS dengan ACM, lalu pilih antara enkripsi sisi klien, sisi server, dan saat transit. Kamu berlatih AWS Solutions Architect dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AWS Solutions Architect?

Tidak diperlukan pengalaman sebelumnya. AWS Solutions Architect di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “KMS, ACM, dan Pola Enkripsi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AWS Solutions Architect ini?

Ya. Setiap pelajaran AWS Solutions Architect menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. KMS, ACM, dan Pola Enkripsi
  2. GuardDuty, Inspector, dan Macie
  3. Secrets Manager dan Parameter Store
  4. WAF, Shield, dan Network Firewall
← Kembali ke AWS Solutions Architect