Secrets Manager og Parameter Store
Rotér databaselegitimationsoplysninger automatisk med Secrets Manager, gem ikke-hemmelig konfiguration i Parameter Store, og integrér begge med Lambda og ECS
Secrets Manager og Parameter Store er en gratis AWS Solutions Architect-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i AWS Solutions Architect, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.
Problemet med hemmeligheder i kode
Et almindeligt og farligt anti-mønster er at gemme hemmeligheder (databaseadgangskoder, API-nøgler og OAuth-tokens) i applikationens kildekode, miljøvariabler eller konfigurationsfiler, der er lagt ind i versionsstyring. Når disse arkiver eksponeres — fordi de ved en fejl gøres offentlige eller tilgås af en angriber — kompromitteres alle hemmeligheder øjeblikkeligt. AWS tilbyder to administrerede tjenester, der eliminerer dette problem: AWS Secrets Manager til legitimationsoplysninger, der kræver automatisk rotation, og AWS Systems Manager Parameter Store til konfigurationsværdier og hemmeligheder uden rotation.
# 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 currentOversigt over AWS Secrets Manager
AWS Secrets Manager er en administreret tjeneste til lagring, hentning og automatisk rotation af hemmeligheder. Den krypterer alle hemmeligheder med KMS (som standard ved hjælp af en AWS-administreret nøgle eller din CMK). Hemmeligheder kan gemme strukturerede data i form af en JSON-streng med nøgle-værdi-par. Secrets Manager koster 0,40 USD pr. hemmelighed pr. måned plus 0,05 USD pr. 10.000 API-kald. Den vigtigste forskel fra Parameter Store er indbygget automatisk rotation for RDS, Redshift, DocumentDB og brugerdefinerede hemmeligheder via Lambda-rotationsfunktioner — der kræves ingen ændringer i applikationen under rotationen.
# 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"])'Automatisk rotation med Secrets Manager
Automatisk rotation er Secrets Managers mest avancerede funktion. For RDS-databaser roterer Secrets Manager automatisk adgangskoder ved at: 1) generere en ny adgangskode. 2) opdatere databasebrugerens adgangskode i RDS. 3) opdatere hemmeligheden med den nye adgangskode. 4) kontrollere, at de nye legitimationsoplysninger virker. Alt dette sker, mens din applikation kører — ingen nedetid og ingen manuel indgriben. Applikationer kalder altid get-secret-value for at hente den aktuelle adgangskode, så de automatisk bruger de roterede legitimationsoplysninger.
# 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-termLokal caching af hemmeligheder
Det ville være dyrt og langsomt at kalde Secrets Manager ved hver databaseforespørgsel. Den bedste praksis er at cache hemmeligheden lokalt i hukommelsen i en kort periode. AWS leverer officielle cachingklienter til Secrets Manager til Java og Python, som cacher hemmeligheder i et konfigurerbart TTL-interval. Når cachen udløber, henter klienten hemmeligheden igen fra Secrets Manager. Hvis en applikation modtager en godkendelsesfejl (hvilket angiver, at adgangskoden er blevet roteret), opdaterer den straks cachen og prøver igen. Dette mønster giver både god ydeevne og aktuelle data uden at overbelaste Secrets Manager-API'en.
# 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 er et gratis (for standardparametre) hierarkisk nøgleværdilager til konfigurationsdata og hemmeligheder. Det understøtter parametertyperne String, StringList og SecureString. SecureString krypterer værdier med KMS. I modsætning til Secrets Manager understøtter Parameter Store IKKE automatisk rotation — det er designet til konfigurationsværdier, der ændres sjældent. Standardparametre er gratis og kan gemme op til 4 KB. Avancerede parametre understøtter større værdier (op til 8 KB), parameterpolitikker (påmindelser om udløb og rotation) og koster 0,05 USD pr. parameter pr. måned.
# 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 textParameter Stores hierarki og IAM
Organiser værdier i Parameter Store ved hjælp af en hierarkisk sti-struktur, der afspejler dit miljø og din applikationsarkitektur. Det gør det muligt at oprette detaljerede IAM-politikker, som giver adgang til parametre ud fra et sti-præfiks. Du kan for eksempel give en Lambda-funktion adgang til kun parametre under /prod/payment-service/ — den kan ikke få adgang til andre tjenesters parametre. Dette princip om mindst mulige privilegier for konfiguration forhindrer, at én kompromitteret tjeneste læser en anden tjenestes hemmeligheder.
# 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 sammenlignet med Parameter Store: Hvornår skal du bruge hvad
Vælg mellem de to tjenester ud fra dine krav: Brug Secrets Manager, når du har brug for automatisk rotation af hemmeligheder, gemmer databaselegitimationsoplysninger, skal dele hemmeligheden på tværs af flere AWS-konti, eller når compliance kræver dokumenterede rotationspolitikker. Brug Parameter Store, når du har brug for konfigurationsværdier (som ikke er hemmeligheder), ønsker en gratis løsning til enkel nøgleværdilagring, har brug for hierarkisk konfiguration med sti-baseret adgangskontrol, eller skal gemme versionshistorik for parametre. Mange arkitekturer bruger begge tjenester sammen: Parameter Store til konfiguration og Secrets Manager til legitimationsoplysninger.
# 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 secretsIntegration med Lambda og ECS
Lambda-funktioner og ECS-opgaver bør hente hemmeligheder ved opstart, ikke ved hver påkaldelse. For Lambda: hent hemmeligheder i initialiseringskoden (uden for handler-funktionen), og cache dem i globale variabler — Lambda-kørselsmiljøet bevares mellem påkaldelser, så hemmeligheder kun hentes én gang pr. miljøs levetid. For ECS: brug feltet secrets i opgavedefinitionen til at indsætte værdier fra Secrets Manager eller SecureString-værdier fra Parameter Store som miljøvariabler — ECS henter og indsætter dem, når opgaven startes, uden ændringer i applikationskoden.
# 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 til EC2 AMI-id'er
En praktisk, men ofte overset anvendelse af Parameter Store er at gemme AMI-id'er og andre referencer til udrulning. I stedet for at hardkode AMI-id'er i dine CloudFormation-skabeloner (som bliver forældede, når der udgives nye AMI'er), kan du referere til en værdi i Parameter Store. Din CI/CD-pipeline opdaterer AMI-id'et i Parameter Store, hver gang der oprettes en ny gylden AMI. CloudFormation læser det nyeste AMI-id fra Parameter Store på udrulningstidspunktet. AWS udgiver også de nyeste Amazon Linux AMI-id'er i offentlige stier i Parameter Store, som du kan referere til direkte.
# 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 LatestAmiIdRevision og compliance for hemmeligheder
Styring af hemmeligheder kræver viden om, hvem der har haft adgang til hemmeligheder, og hvornår det skete. AWS CloudTrail registrerer hvert API-kald til Secrets Manager og Parameter Store: GetSecretValue, PutParameter, GetParameter. Det giver dig et komplet revisionsspor til compliance. Brug CloudWatch Alarms på CloudTrail-målinger til at give besked, når der er adgang til hemmeligheder uden for normale mønstre — hvis der for eksempel er adgang til en hemmelighed i produktion fra en usædvanlig IAM-principal eller fra en IP-adresse, der ikke findes i dit kendte interval, skal du udløse en alarm til undersøgelse.
# 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 secretsDeling af hemmeligheder på tværs af konti
I arkitekturer med flere konti har applikationer i én konto nogle gange brug for hemmeligheder, der administreres i en anden konto (f.eks. administrerer en central Security-konto alle RDS-adgangskoder). Ressourcepolitikker i Secrets Manager gør adgang på tværs af konti mulig. Konfigurer en ressourcebaseret politik på hemmeligheden, som giver en rolle i den konto, der bruger hemmeligheden, tilladelse til at kalde GetSecretValue. Rollen i den konto, der bruger hemmeligheden, skal også have en IAM-politik, der tillader kald til hemmelighedens ARN. KMS-nøglepolitikker skal også give den anden konto adgang til den CMK, der bruges til at kryptere hemmeligheden.
# 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 ARNHurtigt tjek
Test din forståelse af begreberne fra AWS Solutions Architect (SAA-C03) i denne lektion.
Opsummering af lektionen
I denne lektion har du lært, at: Secrets Manager tilbyder automatisk rotation af databaselegitimationsoplysninger og API-nøgler og er det foretrukne valg til hemmeligheder, der skal roteres, Parameter Store tilbyder gratis hierarkisk konfigurationslagring med sti-baseret IAM-adgangskontrol, og ECS og Lambda kan indsætte hemmeligheder som miljøvariabler uden ændringer i applikationskoden. CloudTrail leverer revisionsspor for al adgang til hemmeligheder. Næste gang udforsker vi WAF, Shield og Network Firewall.
Lær AWS Solutions Architect med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Secrets Manager og Parameter Store” gratis?
Ja — alle 3 lektioner i læringssporet AWS Solutions Architect, inklusive “Secrets Manager og Parameter Store”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Secrets Manager og Parameter Store”?
Rotér databaselegitimationsoplysninger automatisk med Secrets Manager, gem ikke-hemmelig konfiguration i Parameter Store, og integrér begge med Lambda og ECS Du øver dig i AWS Solutions Architect med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på AWS Solutions Architect?
Der kræves ingen tidligere erfaring. AWS Solutions Architect på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Secrets Manager og Parameter Store”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne AWS Solutions Architect-lektion?
Ja. Alle AWS Solutions Architect-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- KMS, ACM og krypteringsmønstre
- GuardDuty, Inspector og Macie
- Secrets Manager og Parameter Store
- WAF, Shield og Network Firewall