Secrets Manager dan Parameter Store
Putarkan kelayakan pangkalan data secara automatik dengan Secrets Manager, simpan konfigurasi bukan rahsia dalam Parameter Store, dan integrasikan kedua-duanya dengan Lambda serta ECS.
Secrets Manager dan Parameter Store ialah pelajaran Cloud & IT Cert Prep percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Cloud & IT Cert Prep, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Cloud & IT Cert Prep merangkumi sejumlah 4 pelajaran.
Masalah Secrets dalam Kod
Anti-corak yang lazim dan berbahaya ialah menyimpan Secrets (kata laluan pangkalan data, kunci API, token OAuth) dalam kod sumber aplikasi, pemboleh ubah persekitaran atau fail konfigurasi yang dimasukkan ke dalam kawalan versi. Apabila repositori ini terdedah — sama ada tidak sengaja dijadikan awam atau diakses oleh penyerang — semua Secrets terus terjejas. AWS menyediakan dua perkhidmatan terurus untuk menghapuskan masalah ini: AWS Secrets Manager untuk kelayakan yang memerlukan putaran automatik dan AWS Systems Manager Parameter Store untuk nilai konfigurasi serta Secrets yang tidak berputar.
# 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 currentGambaran Keseluruhan AWS Secrets Manager
AWS Secrets Manager ialah perkhidmatan terurus untuk menyimpan, mendapatkan semula dan memutar Secrets secara automatik. Ia menyulitkan semua Secrets dengan KMS (secara lalai menggunakan kunci terurus AWS atau CMK anda). Secrets boleh menyimpan sebarang data berstruktur sebagai rentetan JSON nilai-kunci. Secrets Manager mengenakan caj $0.40/Secrets/bulan serta $0.05 bagi setiap 10,000 panggilan API. Perbezaan utama berbanding Parameter Store: putaran automatik terbina dalam untuk RDS, Redshift, DocumentDB dan Secrets tersuai melalui fungsi putaran Lambda — tiada perubahan aplikasi diperlukan semasa putaran.
# 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"])'Putaran Automatik dengan Secrets Manager
Putaran automatik ialah ciri paling berkuasa Secrets Manager. Untuk pangkalan data RDS, Secrets Manager memutarkan kata laluan secara natif dengan: 1) Menjana kata laluan baharu. 2) Mengemas kini kata laluan pengguna pangkalan data dalam RDS. 3) Mengemas kini rahsia dengan kata laluan baharu. 4) Mengesahkan bahawa kelayakan baharu berfungsi. Semua ini berlaku semasa aplikasi anda sedang berjalan — tanpa masa henti dan tanpa campur tangan manual. Aplikasi sentiasa memanggil get-secret-value untuk mendapatkan kata laluan semasa, jadi aplikasi akan menggunakan kelayakan yang telah diputar secara automatik.
# 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 Rahsia dalam Cache Secara Setempat
Memanggil Secrets Manager pada setiap pertanyaan pangkalan data akan memakan kos yang tinggi dan mengambil masa. Amalan terbaik ialah menyimpan rahsia dalam cache secara setempat di dalam memori untuk tempoh yang singkat. AWS menyediakan klien caching Secrets Manager rasmi untuk Java dan Python yang menyimpan rahsia dalam cache selama TTL yang boleh dikonfigurasikan. Apabila cache tamat tempoh, klien mendapatkan semula rahsia daripada Secrets Manager. Jika aplikasi menerima ralat pengesahan (yang menunjukkan bahawa kata laluan telah diputar), aplikasi akan menyegarkan cache dengan serta-merta dan mencuba semula. Corak ini memberikan prestasi dan kesegaran data tanpa membebankan API Secrets Manager dengan permintaan berlebihan.
# 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 ialah gedung nilai kunci hierarki percuma (untuk parameter standard) bagi data konfigurasi dan rahsia. Ia menyokong jenis parameter String, StringList, dan SecureString. SecureString menyulitkan nilai menggunakan KMS. Tidak seperti Secrets Manager, Parameter Store TIDAK menyokong putaran automatik — ia direka untuk nilai konfigurasi yang jarang berubah. Parameter standard adalah percuma dan boleh menyimpan sehingga 4 KB. Parameter lanjutan menyokong nilai yang lebih besar (sehingga 8 KB), dasar parameter (peringatan tamat tempoh dan putaran), serta berharga $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
Susun nilai Parameter Store menggunakan struktur laluan hierarki yang mencerminkan persekitaran dan seni bina aplikasi anda. Ini membolehkan dasar IAM terperinci yang memberikan akses kepada parameter berdasarkan awalan laluan. Sebagai contoh, berikan fungsi Lambda akses hanya kepada parameter di bawah /prod/payment-service/ — fungsi itu tidak boleh mengakses parameter perkhidmatan lain. Prinsip keistimewaan minimum untuk konfigurasi ini menghalang satu perkhidmatan yang terjejas daripada membaca rahsia perkhidmatan 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 berbanding Parameter Store: Bila Perlu Menggunakan Setiap Satu
Pilih antara kedua-dua perkhidmatan berdasarkan keperluan anda: Gunakan Secrets Manager apabila: anda memerlukan putaran rahsia automatik, anda menyimpan kelayakan pangkalan data, rahsia itu mesti dikongsi merentas beberapa akaun AWS, atau pematuhan memerlukan dasar putaran yang didokumenkan. Gunakan Parameter Store apabila: anda memerlukan nilai konfigurasi (bukan rahsia), anda mahukan penyelesaian percuma untuk penyimpanan nilai kunci yang mudah, anda memerlukan konfigurasi hierarki dengan kawalan akses berasaskan laluan, atau anda perlu menyimpan sejarah versi parameter. Banyak seni bina menggunakan kedua-duanya: Parameter Store untuk konfigurasi dan Secrets Manager untuk kelayakan.
# 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 secretsPenyepaduan dengan Lambda dan ECS
Fungsi Lambda dan tugasan ECS hendaklah mendapatkan rahsia semasa permulaan, bukan pada setiap pemanggilan. Untuk Lambda: dapatkan rahsia dalam kod pemulaan (di luar fungsi pengendali) dan simpan dalam pemboleh ubah global — persekitaran pelaksanaan Lambda kekal antara pemanggilan, jadi rahsia hanya diambil sekali bagi setiap tempoh hayat persekitaran. Untuk ECS: gunakan medan secrets dalam definisi tugasan untuk menyuntik nilai Secrets Manager atau SecureString Parameter Store sebagai pemboleh ubah persekitaran — ECS mendapatkan dan menyuntiknya semasa pelancaran tugasan tanpa sebarang perubahan pada kod 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
Satu kegunaan Parameter Store yang praktikal tetapi sering terlepas pandang ialah menyimpan ID AMI dan rujukan penggunaan lain. Daripada menetapkan ID AMI secara keras dalam templat CloudFormation anda (yang menjadi lapuk apabila AMI baharu dikeluarkan), rujuk nilai Parameter Store. Saluran paip CI/CD anda mengemas kini ID AMI dalam Parameter Store setiap kali AMI utama baharu dibina. CloudFormation membaca ID AMI terkini daripada Parameter Store pada masa penggunaan. AWS turut menerbitkan ID AMI Amazon Linux terkini dalam laluan Parameter Store awam yang boleh dirujuk secara terus.
# 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 LatestAmiIdPengauditan dan Pematuhan untuk Rahsia
Tadbir urus rahsia memerlukan pengetahuan tentang siapa yang mengakses rahsia dan bila. AWS CloudTrail merekodkan setiap panggilan API kepada Secrets Manager dan Parameter Store: GetSecretValue, PutParameter, GetParameter. Ini memberikan jejak audit lengkap untuk pematuhan. Gunakan Penggera CloudWatch pada metrik CloudTrail untuk memberikan amaran apabila rahsia diakses di luar corak biasa — contohnya, jika rahsia pengeluaran diakses daripada prinsipal IAM yang luar biasa atau daripada IP yang tiada dalam julat yang diketahui, cetuskan amaran untuk siasatan.
# 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 secretsPerkongsian Rahsia Merentas Akaun
Dalam seni bina berbilang akaun, aplikasi dalam satu akaun kadangkala memerlukan rahsia yang diuruskan dalam akaun lain (contohnya, akaun Security pusat menguruskan semua kata laluan RDS). Dasar sumber Secrets Manager membenarkan akses merentas akaun. Konfigurasikan dasar berasaskan sumber pada rahsia yang memberikan peranan dalam akaun pengguna kebenaran untuk memanggil GetSecretValue. Peranan akaun pengguna juga mesti mempunyai dasar IAM yang membenarkan panggilan kepada ARN rahsia tersebut. Dasar kunci KMS juga mesti memberikan akaun pengguna akses kepada CMK yang digunakan untuk menyulitkan rahsia.
# 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 ARNSemakan Pantas
Uji pemahaman anda tentang konsep AWS Solutions Architect (SAA-C03) daripada pelajaran ini.
Ulang Kaji Pelajaran
Dalam pelajaran ini, anda telah mempelajari bahawa: Secrets Manager menyediakan putaran automatik untuk kelayakan pangkalan data dan kunci API, serta merupakan pilihan yang disyorkan untuk rahsia yang mesti diputar, Parameter Store menyediakan storan konfigurasi hierarki percuma dengan kawalan akses IAM berasaskan laluan, dan ECS serta Lambda boleh menyuntik rahsia sebagai pemboleh ubah persekitaran tanpa perubahan pada kod aplikasi. CloudTrail menyediakan jejak audit untuk semua akses rahsia. Seterusnya, kita akan meneroka WAF, Shield dan Network Firewall.
Pelajari Cloud & IT Cert Prep dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 150
- Pelajaran
- 600
Soalan Lazim
Adakah pelajaran “Secrets Manager dan Parameter Store” percuma?
Ya — teks penuh “Secrets Manager dan Parameter Store” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Cloud & IT Cert Prep, tingkat taraf kepada CoddyKit PRO. Kursus Cloud & IT Cert Prep merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Secrets Manager dan Parameter Store”?
Putarkan kelayakan pangkalan data secara automatik dengan Secrets Manager, simpan konfigurasi bukan rahsia dalam Parameter Store, dan integrasikan kedua-duanya dengan Lambda serta ECS. Anda berlatih Cloud & IT Cert Prep menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Cloud & IT Cert Prep?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Cloud & IT Cert Prep di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Secrets Manager dan Parameter Store” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Cloud & IT Cert Prep ini?
Ya. Setiap pelajaran Cloud & IT Cert Prep menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- KMS, ACM dan Corak Penyulitan
- GuardDuty, Inspector dan Macie
- Secrets Manager dan Parameter Store
- WAF, Shield dan Network Firewall