Belajar LocalStack - Secrets Manager & SSM Parameter Store
Episode 11 of 23

Belajar LocalStack - Secrets Manager & SSM Parameter Store

Mengelola rahasia dan konfigurasi secara terpusat dengan AWS Secrets Manager dan SSM Parameter Store: menyimpan secret dan parameter, membaca dari Lambda dan ECS, hingga rotasi, tagging, dan skenario permission.

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

Pendahuluan

Di episode 10 kita mendefinisikan seluruh infrastruktur sebagai kode. Tapi infrastruktur tanpa konfigurasi ibarat mobil tanpa kunci: database URL, API key, password, dan kredensial SMTP harus ditaruh di suatu tempat. Menempelkannya di kode atau environment variable memang praktis, tapi memicu bocor lewat git history dan log. AWS menjawabnya dengan dua service terpusat: Secrets Manager untuk rahasia bernilai tinggi dan SSM Parameter Store untuk konfigurasi umum.

Di episode ini kalian akan menyimpan dan membaca secret serta parameter di LocalStack, menghubungkannya ke Lambda dan ECS, dan menguji skenario rotasi serta permission tanpa akun AWS sungguhan.

Secrets Manager vs Parameter Store

Kedua service terlihat mirip, tapi diciptakan untuk kebutuhan berbeda:

AspekSecrets ManagerParameter Store
TujuanRahasia bernilai tinggiKonfigurasi umum
Rotasi otomatisYa (via Lambda)Tidak
VersiStage-based (AWSCURRENT)Versi, tapi sederhana
Ukuran maksimum64 KB4.096 (Standard) / 8.192 (Advanced) karakter
HargaPer secret + per panggilanGratis (Standard)

Di emulator, aturan harga tidak berlaku — keduanya gratis dan tanpa batas. Yang penting adalah kalian terbiasa memilih tool yang tepat: simpan password, API key, dan token di Secrets Manager; simpan nilai konfigurasi seperti log level atau endpoint di Parameter Store.

Menyimpan & Membaca Secret

Membuat Secret Pertama

API Secrets Manager sangat sederhana. Buat secret dengan --secret-string, lalu baca nilainya:

Simpan dan baca secret
awslocal secretsmanager create-secret \
  --name db/password --secret-string 'P@ssw0rd!'
awslocal secretsmanager get-secret-value \
  --secret-id db/password

LocalStack menyimpan nilai itu di emulator state dan mengembalikannya persis seperti AWS asli. Untuk melihat payload JSON lengkap, pipeline output ke jq:

Ekstrak nilai secret dengan jq
awslocal secretsmanager get-secret-value \
  --secret-id db/password | jq -r '.SecretString'

Versioning Secret

Secret punya versi. Saat nilai diubah, versi lama berpindah ke stage AWSPREVIOUS dan versi baru menjadi AWSCURRENT:

Update secret dan lihat staging
awslocal secretsmanager put-secret-value \
  --secret-id db/password --secret-string 'P@ssw0rd!2'
awslocal secretsmanager get-secret-value \
  --secret-id db/password --version-stage AWSPREVIOUS

Pola ini memungkinkan rollback cepat: aplikasi selalu membaca AWSCURRENT, dan tim bisa membandingkan versi lama tanpa menyimpan duplikat manual.

Parameter Store

Parameter Tiers & SecureString

SSM Parameter Store punya tiga tipe: String, StringList, dan SecureString (terenkripsi KMS). Parameter juga punya tier: Standard (gratis, 4.096 karakter) dan Advanced (berbayar, 8.192 karakter):

Put dan get parameter
awslocal ssm put-parameter \
  --name /app/prod/LOG_LEVEL --value debug --type String
awslocal ssm put-parameter \
  --name /app/prod/DB_PASSWORD --value 'secret-value' --type SecureString
awslocal ssm get-parameter --name /app/prod/DB_PASSWORD --with-decryption

Tanpa --with-decryption, nilai SecureString muncul terenkripsi. LocalStack memakai KMS key default alias/aws/ssm untuk ini — sama seperti AWS.

Membaca Banyak Parameter Sekaligus

Menamai parameter dengan hierarki path membuka fitur get-parameters-by-path — ambil seluruh konfigurasi satu service dalam satu panggilan:

Ambil semua parameter di satu path
awslocal ssm get-parameters-by-path \
  --path /app/prod --recursive

Integrasi dengan Lambda & ECS

Rahasia baru berguna jika aplikasi bisa membacanya. Di LocalStack, kode Lambda membaca secret persis seperti di produksi — cukup arahkan SDK ke endpoint emulator:

PythonLambda membaca secret
import boto3
 
def handler(event, context):
    client = boto3.client(
        "secretsmanager",
        region_name="us-east-1",
        endpoint_url="http://localhost:4566",
        aws_access_key_id="test",
        aws_secret_access_key="test",
    )
    secret = client.get_secret_value(SecretId="db/password")
    return {"password": secret["SecretString"]}

Untuk ECS, nilai secret dirujuk langsung di task definition lewat properti secrets yang menunjuk ke ARN — runtime container akan menariknya sendiri. Pola yang sama berlaku di produksi, jadi behavior tidak pernah melenceng.

Rotation Mock

Rotasi nyata di AWS memakai Lambda yang menulis nilai baru ke secret. LocalStack mengemulasi API rotate-secret: panggilan diterima dan selesai, tapi tanpa menjalankan Lambda rotasi sungguhan:

Picu rotasi (mock)
awslocal secretsmanager rotate-secret \
  --secret-id db/password

Note

Rotasi di LocalStack bersifat mock — cukup untuk menguji kode yang memanggil API rotasi, bukan untuk memverifikasi logika Lambda rotasi itu sendiri. Uji logika rotasi di CI dengan secret test sungguhan.

Tagging

Rahasia dan parameter yang banyak butuh organisasi. Kedua service mendukung tagging untuk audit dan cost allocation:

Tag secret dan parameter
awslocal secretsmanager tag-resource \
  --secret-id db/password --tags 'Key=env,Value=prod'
awslocal secretsmanager list-tags-for-resource \
  --secret-id db/password

Untuk SSM, gunakan ssm add-tags-to-resource dengan --resource-type "Parameter" dan ARN parameter sebagai --resource-id.

Skenario Permission di Emulator

Di AWS asli, akses ke secret diatur policy IAM. Di LocalStack, evaluasi IAM jauh lebih longgar: permission Deny umumnya diabaikan dan hampir semua panggilan berhasil selama format ARN benar. Artinya:

  • Tes yang bergantung pada denial permission harus tetap diverifikasi di AWS asli atau lewat integrasi khusus.
  • Gunakan emulator untuk menguji alur sukses dan format request, bukan untuk menguji kontrol akses.
  • Bedakan kredensial antar lingkungan (dev/test) sejak awal agar tidak terbawa ke produksi.

Penutup

Rangkuman episode ini:

  • Secrets Manager untuk rahasia bernilai tinggi: create-secret, put-secret-value, dan staging versi AWSCURRENT/AWSPREVIOUS.
  • Parameter Store untuk konfigurasi: String, SecureString, dan hierarki path dengan get-parameters-by-path.
  • Kode Lambda membaca secret via boto3 dengan endpoint_url menuju http://localhost:4566.
  • Rotasi bersifat mock; gunakan CI dengan secret test untuk memverifikasi logika rotasi sungguhan.
  • Tagging didukung penuh; evaluasi IAM di emulator lebih longgar daripada AWS asli.

Konfigurasi dan rahasia kalian kini terpusat. Tapi ada satu masalah diam-diam: restart LocalStack menghapus semua state yang sudah dibangun. Di episode 12 kita selamatkan kerja keras itu dengan persistence dan Cloud Pods — state yang bertahan antar restart dan bisa dibagikan ke tim. Sampai jumpa!

Belajar LocalStack - Secrets Manager & SSM Parameter Store | Belajar LocalStack