Secrets Manager dan Parameter Store
Rotasikan kredensial basis data secara otomatis dengan Secrets Manager, simpan konfigurasi non-rahasia di Parameter Store, lalu integrasikan keduanya dengan Lambda dan ECS.
Secrets Manager dan Parameter Store adalah pelajaran Cloud & IT Cert Prep gratis di CoddyKit. Ini adalah pelajaran 3 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 Cloud & IT Cert Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Cloud & IT Cert Prep mencakup 4 pelajaran total.
Masalah Secrets dalam Kode
Pola anti yang umum dan berbahaya adalah menyimpan secrets (kata sandi basis data, kunci API, token OAuth) dalam kode sumber aplikasi, variabel lingkungan, atau berkas konfigurasi yang dimasukkan ke dalam pengendalian versi. Ketika repositori ini terekspos — tidak sengaja dibuat publik atau diakses oleh penyerang — semua secrets langsung terbobol. AWS menyediakan dua layanan terkelola untuk menghilangkan masalah ini: AWS Secrets Manager untuk kredensial yang memerlukan rotasi otomatis, dan AWS Systems Manager Parameter Store untuk nilai konfigurasi serta secrets yang tidak dirotasi.
# Anti-pattern: secrets in code (NEVER do this)
# db_password = 'supersecret123'
# api_key = 'sk-abc123def456'
# Best practice: retrieve at runtime
import boto3
client = boto3.client('secretsmanager', region_name='us-east-1')
response = client.get_secret_value(SecretId='prod/myapp/db-password')
password = response['SecretString'] # fresh value, always currentIkhtisar AWS Secrets Manager
AWS Secrets Manager adalah layanan terkelola untuk menyimpan, mengambil, dan merotasi secrets secara otomatis. Layanan ini mengenkripsi semua secrets dengan KMS (secara default menggunakan kunci yang dikelola AWS atau CMK Anda). Secrets dapat menyimpan data terstruktur apa pun sebagai string JSON key-value. Secrets Manager mengenakan biaya $0.40/secret/bulan ditambah $0.05 per 10.000 panggilan API. Perbedaan utama dari Parameter Store: rotasi otomatis bawaan untuk RDS, Redshift, DocumentDB, dan secrets khusus melalui fungsi rotasi Lambda — tidak diperlukan perubahan pada aplikasi selama rotasi.
# Create a secret in Secrets Manager
aws secretsmanager create-secret \
--name 'prod/myapp/database' \
--description 'Production MySQL credentials' \
--secret-string '{"username":"admin","password":"changeme123","host":"mydb.rds.amazonaws.com","port":3306,"dbname":"orders"}'
# Retrieve the secret (by application)
aws secretsmanager get-secret-value \
--secret-id 'prod/myapp/database' \
--query 'SecretString' \
--output text | python3 -c 'import sys,json; s=json.load(sys.stdin); print(s["password"])'Rotasi Otomatis dengan Secrets Manager
Rotasi otomatis adalah fitur paling canggih Secrets Manager. Untuk basis data RDS, Secrets Manager secara bawaan merotasi kata sandi dengan cara: 1) Membuat kata sandi baru. 2) Memperbarui kata sandi pengguna basis data di RDS. 3) Memperbarui secret dengan kata sandi baru. 4) Memverifikasi bahwa kredensial baru berfungsi. Semua proses ini berlangsung saat aplikasi Anda berjalan — tanpa waktu henti dan tanpa intervensi manual. Aplikasi selalu memanggil get-secret-value untuk mengambil kata sandi terbaru, sehingga aplikasi otomatis menggunakan kredensial yang telah dirotasi.
# Enable automatic rotation for RDS secret
aws secretsmanager rotate-secret \
--secret-id 'prod/myapp/database' \
--rotation-rules AutomaticallyAfterDays=30 \
--rotation-lambda-arn arn:aws:lambda:us-east-1:123:function:SecretsManagerRDSMySQLRotationSingleUser
# AWS provides pre-built rotation Lambda functions for:
# - RDS MySQL/PostgreSQL/MariaDB/Oracle/SQL Server
# - DocumentDB
# - Redshift
# - Custom: write your own Lambda for other services
# Application code: always call GetSecretValue, never cache long-termMenyimpan Secret di Cache Secara Lokal
Memanggil Secrets Manager pada setiap kueri basis data akan mahal dan lambat. Praktik terbaiknya adalah menyimpan secret di cache lokal dalam memori untuk waktu yang singkat. AWS menyediakan klien caching Secrets Manager resmi untuk Java dan Python yang menyimpan secret di cache selama TTL yang dapat dikonfigurasi. Saat cache kedaluwarsa, klien mengambil ulang secret dari Secrets Manager. Jika aplikasi menerima kesalahan autentikasi (yang menunjukkan bahwa kata sandi telah dirotasi), aplikasi segera memperbarui cache dan mencoba lagi. Pola ini memberikan kinerja dan kesegaran data tanpa membebani API Secrets Manager dengan terlalu banyak permintaan.
# Python: Secrets Manager caching client
# pip install aws-secretsmanager-caching
from botocore.session import get_session
from aws_secretsmanager_caching import SecretCache, SecretCacheConfig
client = get_session().create_client('secretsmanager')
cache = SecretCache(
config=SecretCacheConfig(secret_refresh_interval=3600), # cache 1 hour
client=client
)
# Returns cached value unless refresh interval expired
secret = cache.get_secret_string('prod/myapp/database')AWS Systems Manager Parameter Store
AWS Systems Manager (SSM) Parameter Store adalah penyimpanan hierarkis key-value gratis (untuk parameter standar) bagi data konfigurasi dan secret. Layanan ini mendukung jenis parameter String, StringList, dan SecureString. SecureString mengenkripsi nilai menggunakan KMS. Berbeda dengan Secrets Manager, Parameter Store TIDAK mendukung rotasi otomatis — layanan ini dirancang untuk nilai konfigurasi yang jarang berubah. Parameter standar gratis dan dapat menyimpan hingga 4 KB. Parameter lanjutan mendukung nilai yang lebih besar (hingga 8 KB), kebijakan parameter (pengingat kedaluwarsa dan rotasi), serta dikenai biaya $0,05/parameter/bulan.
# Create Parameter Store parameters
aws ssm put-parameter \
--name '/prod/myapp/db-host' \
--value 'mydb.cluster-abc.us-east-1.rds.amazonaws.com' \
--type String
aws ssm put-parameter \
--name '/prod/myapp/db-password' \
--value 'mysecretpassword' \
--type SecureString \
--key-id alias/my-kms-key
# Retrieve parameter
aws ssm get-parameter \
--name '/prod/myapp/db-password' \
--with-decryption \
--query 'Parameter.Value' --output textHierarki Parameter Store dan IAM
Atur nilai Parameter Store menggunakan struktur jalur hierarkis yang mencerminkan lingkungan dan arsitektur aplikasi Anda. Dengan demikian, Anda dapat membuat kebijakan IAM yang terperinci untuk memberikan akses ke parameter berdasarkan prefiks jalur. Misalnya, berikan fungsi Lambda akses hanya ke parameter di bawah /prod/payment-service/ — fungsi tersebut tidak dapat mengakses parameter layanan lain. Prinsip hak akses paling rendah untuk konfigurasi ini mencegah satu layanan yang telah disusupi membaca secret layanan lain.
# Parameter hierarchy
/prod/payment-service/db-password
/prod/payment-service/stripe-api-key
/prod/order-service/db-password
/prod/order-service/redis-url
/staging/payment-service/db-password
# IAM policy: payment-service Lambda can ONLY read its params
{
'Effect': 'Allow',
'Action': ['ssm:GetParameter', 'ssm:GetParameters', 'ssm:GetParametersByPath'],
'Resource': 'arn:aws:ssm:us-east-1:123:parameter/prod/payment-service/*'
}
# Get all parameters for an app at once
aws ssm get-parameters-by-path \
--path '/prod/payment-service/' \
--with-decryption --recursiveSecrets Manager vs Parameter Store: Kapan Menggunakan Masing-Masing
Pilih di antara kedua layanan tersebut berdasarkan persyaratan Anda: Gunakan Secrets Manager jika: Anda memerlukan rotasi secret otomatis, menyimpan kredensial basis data, secret harus dibagikan ke beberapa akun AWS, atau kepatuhan mengharuskan kebijakan rotasi yang terdokumentasi. Gunakan Parameter Store jika: Anda memerlukan nilai konfigurasi (bukan secret), menginginkan solusi gratis untuk penyimpanan key-value sederhana, memerlukan konfigurasi hierarkis dengan kontrol akses berbasis jalur, atau perlu menyimpan riwayat versi parameter. Banyak arsitektur menggunakan keduanya: Parameter Store untuk konfigurasi dan Secrets Manager untuk kredensial.
# Usage comparison:
# Secrets Manager:
# Cost: $0.40/secret/month
# Rotation: Automatic (RDS, custom Lambda)
# Cross-account: Yes
# Best for: Database passwords, API keys, OAuth tokens
# Parameter Store:
# Cost: Free (standard) / $0.05/month (advanced)
# Rotation: Manual only
# Cross-account: No (use Secrets Manager)
# Best for: Config values, feature flags, non-rotating secretsIntegrasi dengan Lambda dan ECS
Fungsi Lambda dan tugas ECS sebaiknya mengambil secret saat dimulai, bukan pada setiap pemanggilan. Untuk Lambda: ambil secret dalam kode inisialisasi (di luar fungsi pengendali) dan simpan dalam variabel global — lingkungan eksekusi Lambda tetap ada di antara beberapa pemanggilan, sehingga secret hanya diambil sekali selama masa hidup setiap lingkungan. Untuk ECS: gunakan bidang secrets dalam definisi tugas untuk menyuntikkan nilai Secrets Manager atau SecureString Parameter Store sebagai variabel lingkungan — ECS mengambil dan menyuntikkannya saat tugas diluncurkan tanpa perubahan apa pun pada kode aplikasi.
# ECS task definition: inject secret as environment variable
{
'containerDefinitions': [{
'name': 'api',
'image': 'my-api:latest',
'secrets': [
{
'name': 'DB_PASSWORD',
'valueFrom': 'arn:aws:secretsmanager:us-east-1:123:secret:prod/myapp/database:password::'
},
{
'name': 'API_KEY',
'valueFrom': '/prod/myapp/api-key'
}
]
}]
}
# Application reads DB_PASSWORD from env var
# ECS injects the current secret value at task startParameter Store untuk ID AMI EC2
Salah satu penggunaan Parameter Store yang praktis tetapi sering terabaikan adalah menyimpan ID AMI dan referensi penerapan lainnya. Daripada menuliskan ID AMI secara langsung dalam templat CloudFormation (yang menjadi usang saat AMI baru dirilis), referensikan nilai Parameter Store. Pipeline CI/CD Anda memperbarui ID AMI di Parameter Store setiap kali AMI utama baru dibuat. CloudFormation membaca ID AMI terbaru dari Parameter Store saat penerapan. AWS juga menerbitkan ID AMI Amazon Linux terbaru di jalur Parameter Store publik yang dapat Anda referensikan secara langsung.
# Get AWS public AMI ID from Parameter Store
aws ssm get-parameter \
--name '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64' \
--query 'Parameter.Value' --output text
# CloudFormation: reference public AMI parameter
Parameters:
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64'
Resources:
MyEC2:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref LatestAmiIdAudit dan Kepatuhan untuk Secret
Tata kelola secret mengharuskan Anda mengetahui siapa yang mengakses secret dan kapan akses tersebut dilakukan. AWS CloudTrail mencatat setiap panggilan API ke Secrets Manager dan Parameter Store: GetSecretValue, PutParameter, GetParameter. Dengan demikian, Anda memiliki jejak audit lengkap untuk kepatuhan. Gunakan Alarm CloudWatch pada metrik CloudTrail untuk memberi peringatan saat secret diakses di luar pola normal — misalnya, jika secret produksi diakses dari prinsipal IAM yang tidak biasa atau dari IP yang tidak termasuk rentang yang dikenal, picu peringatan untuk penyelidikan.
# CloudTrail metric filter: alert on unexpected secret access
aws logs put-metric-filter \
--log-group-name CloudTrail/management-events \
--filter-name 'SecretAccessOutsideHours' \
--filter-pattern '{ $.eventSource = "secretsmanager.amazonaws.com" && $.eventName = "GetSecretValue" && $.userAgent != "lambda.amazonaws.com" }' \
--metric-transformations \
metricName=UnexpectedSecretAccess,metricNamespace=Security,metricValue=1
# Then create CloudWatch alarm on this metric
# Alert fires when non-Lambda principal accesses secretsBerbagi Secret Antar-Akun
Dalam arsitektur multi-akun, aplikasi di satu akun terkadang memerlukan secret yang dikelola di akun lain (misalnya, akun Security pusat mengelola semua kata sandi RDS). Kebijakan sumber daya Secrets Manager memungkinkan akses lintas akun. Konfigurasikan kebijakan berbasis sumber daya pada secret yang memberikan izin kepada suatu peran di akun pengguna untuk memanggil GetSecretValue. Peran di akun pengguna tersebut juga harus memiliki kebijakan IAM yang mengizinkan pemanggilan terhadap ARN secret. Kebijakan kunci KMS juga harus memberikan akses kepada akun pengguna ke CMK yang digunakan untuk mengenkripsi secret.
# Secret resource policy: allow cross-account access
aws secretsmanager put-resource-policy \
--secret-id 'prod/shared/rds-password' \
--resource-policy '{
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::999999999999:role/AppRole"
},
"Action": "secretsmanager:GetSecretValue",
"Resource": "*"
}]
}'
# KMS key policy must also allow account 999999999999
# IAM policy in 999999999999 must allow GetSecretValue on ARNPemeriksaan Singkat
Uji pemahaman Anda tentang konsep AWS Solutions Architect (SAA-C03) dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini, Anda mempelajari bahwa: Secrets Manager menyediakan rotasi otomatis untuk kredensial basis data dan kunci API, serta merupakan pilihan yang disarankan untuk secret yang harus dirotasi, Parameter Store menyediakan penyimpanan konfigurasi hierarkis gratis dengan kontrol akses IAM berbasis jalur, dan ECS serta Lambda dapat menyuntikkan secret sebagai variabel lingkungan tanpa perubahan pada kode aplikasi. CloudTrail menyediakan jejak audit untuk semua akses secret. Selanjutnya, kita akan membahas WAF, Shield, dan Network Firewall.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Secrets Manager dan Parameter Store” gratis?
Ya — teks lengkap “Secrets Manager dan Parameter Store” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Cloud & IT Cert Prep, upgrade ke CoddyKit PRO. Kursus Cloud & IT Cert Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Secrets Manager dan Parameter Store”?
Rotasikan kredensial basis data secara otomatis dengan Secrets Manager, simpan konfigurasi non-rahasia di Parameter Store, lalu integrasikan keduanya dengan Lambda dan ECS. Kamu berlatih Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?
Tidak diperlukan pengalaman sebelumnya. Cloud & IT Cert Prep 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 3 dari 4.
Berapa lama pelajaran “Secrets Manager dan Parameter Store” 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 Cloud & IT Cert Prep ini?
Ya. Setiap pelajaran Cloud & IT Cert Prep 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
- KMS, ACM, dan Pola Enkripsi
- GuardDuty, Inspector, dan Macie
- Secrets Manager dan Parameter Store
- WAF, Shield, dan Network Firewall