Secrets Manager och Parameter Store
Rotera databasautentiseringsuppgifter automatiskt med Secrets Manager, lagra icke-hemlig konfiguration i Parameter Store och integrera båda med Lambda och ECS.
Secrets Manager och Parameter Store är en gratis lektion i Cloud & IT Cert Prep på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Cloud & IT Cert Prep, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.
Problemet med hemligheter i kod
Ett vanligt och farligt antipattern är att lagra hemligheter (databaslösenord, API-nycklar och OAuth-token) i applikationens källkod, miljövariabler eller konfigurationsfiler som checkats in i versionshanteringen. När dessa arkiv exponeras – genom att de av misstag görs offentliga eller genom att en angripare får åtkomst – komprometteras alla hemligheter omedelbart. AWS tillhandahåller två hanterade tjänster som eliminerar detta problem: AWS Secrets Manager för autentiseringsuppgifter som behöver automatisk rotation och AWS Systems Manager Parameter Store för konfigurationsvärden och hemligheter utan 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 currentÖversikt över AWS Secrets Manager
AWS Secrets Manager är en hanterad tjänst för lagring, hämtning och automatisk rotation av hemligheter. Alla hemligheter krypteras med KMS (som standard med en AWS-hanterad nyckel eller med din CMK). Hemligheter kan lagra valfria strukturerade data som en JSON-sträng med nyckel-värdepar. Secrets Manager kostar 0,40 USD per hemlighet och månad samt 0,05 USD per 10 000 API-anrop. Den viktigaste skillnaden mot Parameter Store är inbyggd automatisk rotation för RDS, Redshift, DocumentDB och anpassade hemligheter via Lambda-rotationsfunktioner – inga ändringar i applikationen behövs 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 är Secrets Managers mest kraftfulla funktion. För RDS-databaser roterar Secrets Manager lösenord automatiskt genom att: 1) generera ett nytt lösenord. 2) uppdatera databas-användarens lösenord i RDS. 3) uppdatera hemligheten med det nya lösenordet. 4) verifiera att de nya autentiseringsuppgifterna fungerar. Allt detta sker medan applikationen körs – utan driftstopp och utan manuella åtgärder. Applikationer anropar alltid get-secret-value för att hämta det aktuella lösenordet och använder därför automatiskt de roterade autentiseringsuppgifterna.
# 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 cachning av hemligheter
Det skulle vara dyrt och långsamt att anropa Secrets Manager för varje databasfråga. Bästa praxis är att cacha hemligheten lokalt i minnet under en kort period. AWS tillhandahåller officiella caching-klienter för Secrets Manager för Java och Python, som cachar hemligheter under en konfigurerbar TTL. När cachen löper ut hämtar klienten hemligheten på nytt från Secrets Manager. Om en applikation får ett autentiseringsfel (vilket visar att lösenordet har roterats) uppdaterar den omedelbart cachen och försöker igen. Det här mönstret ger både god prestanda och aktuella värden utan att överbelasta Secrets Manager-API:t.
# 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 är ett kostnadsfritt (för standardparametrar) hierarkiskt nyckel-värde-lager för konfigurationsdata och hemligheter. Det stöder parametertyperna String, StringList och SecureString. SecureString krypterar värden med KMS. Till skillnad från Secrets Manager stöder Parameter Store INTE automatisk rotation – tjänsten är utformad för konfigurationsvärden som ändras sällan. Standardparametrar är kostnadsfria och kan lagra upp till 4 KB. Avancerade parametrar stöder större värden (upp till 8 KB), parameterprinciper (förfallodatum och påminnelser om rotation) och kostar 0,05 USD per parameter och månad.
# 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 och IAM
Organisera värden i Parameter Store med en hierarkisk sökvägsstruktur som speglar er miljö och applikationsarkitektur. Det möjliggör detaljerade IAM-principer som beviljar åtkomst till parametrar baserat på sökvägsprefix. Ni kan till exempel ge en Lambda-funktion åtkomst endast till parametrar under /prod/payment-service/ – den kan då inte komma åt andra tjänsters parametrar. Denna princip om minsta privilegium för konfiguration hindrar en komprometterad tjänst från att läsa andra tjänsters hemligheter.
# 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 eller Parameter Store: när ska respektive tjänst användas
Välj mellan de två tjänsterna utifrån era krav: Använd Secrets Manager när ni behöver automatisk rotation av hemligheter, lagrar databasautentiseringsuppgifter, behöver dela hemligheten mellan flera AWS-konton eller när efterlevnadskrav kräver dokumenterade rotationsprinciper. Använd Parameter Store när ni behöver konfigurationsvärden (som inte är hemliga), vill ha en kostnadsfri lösning för enkel nyckel-värde-lagring, behöver hierarkisk konfiguration med åtkomstkontroll baserad på sökvägar eller behöver lagra versionshistorik för parametrar. Många arkitekturer använder båda tillsammans: Parameter Store för konfiguration och Secrets Manager för autentiseringsuppgifter.
# 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 secretsIntegrering med Lambda och ECS
Lambda-funktioner och ECS-uppgifter bör hämta hemligheter vid starten, inte vid varje anrop. För Lambda: hämta hemligheter i initieringskoden (utanför handler-funktionen) och cacha dem i globala variabler – Lambdas exekveringsmiljö finns kvar mellan anrop, så hemligheter hämtas bara en gång under varje miljös livslängd. För ECS: använd fältet secrets i uppgiftsdefinitionen för att injicera värden från Secrets Manager eller SecureString-värden från Parameter Store som miljövariabler – ECS hämtar och injicerar dem när uppgiften startar, utan ändringar 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 för EC2 AMI-ID:n
En praktisk men ofta förbisedd användning av Parameter Store är att lagra AMI-ID:n och andra referenser för distribution. I stället för att hårdkoda AMI-ID:n i era CloudFormation-mallar (som blir inaktuella när nya AMI:er släpps) kan ni referera till ett värde i Parameter Store. Er CI/CD-pipeline uppdaterar AMI-ID:t i Parameter Store varje gång en ny golden AMI skapas. CloudFormation läser det senaste AMI-ID:t från Parameter Store vid distributionen. AWS publicerar även de senaste Amazon Linux AMI-ID:na i offentliga Parameter Store-sökvägar som ni kan referera till direkt.
# 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 LatestAmiIdGranskning och efterlevnad för hemligheter
Styrning av hemligheter kräver att ni vet vem som har fått åtkomst till hemligheter och när. AWS CloudTrail registrerar varje API-anrop till Secrets Manager och Parameter Store: GetSecretValue, PutParameter, GetParameter. Det ger er ett fullständigt granskningsspår för efterlevnad. Använd CloudWatch Alarms på CloudTrail-mätvärden för att få aviseringar när hemligheter används på avvikande sätt – till exempel om en produktionshemlighet används av en ovanlig IAM-principal eller från en IP-adress utanför ert kända intervall. Då utlöses en avisering för vidare utredning.
# 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 secretsDelning av hemligheter mellan konton
I arkitekturer med flera konton behöver applikationer i ett konto ibland hemligheter som hanteras i ett annat konto (till exempel när ett centralt Security-konto hanterar alla RDS-lösenord). Resurspolicyer för Secrets Manager möjliggör åtkomst mellan konton. Konfigurera en resursbaserad policy för hemligheten som ger en roll i det konsumerande kontot behörighet att anropa GetSecretValue. Rollen i det konsumerande kontot måste dessutom ha en IAM-policy som tillåter anrop till hemlighetens ARN. KMS-nyckelpolicyer måste också ge det konsumerande kontot åtkomst till den CMK som används för att kryptera hemligheten.
# 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 ARNSnabbkontroll
Testa er förståelse av koncepten i AWS Solutions Architect (SAA-C03) från den här lektionen.
Sammanfattning av lektionen
I den här lektionen har ni lärt er att: Secrets Manager tillhandahåller automatisk rotation för databasautentiseringsuppgifter och API-nycklar och är det rekommenderade valet för hemligheter som måste roteras, Parameter Store tillhandahåller kostnadsfri hierarkisk konfigurationslagring med IAM-åtkomstkontroll baserad på sökvägar och ECS och Lambda kan injicera hemligheter som miljövariabler utan ändringar i applikationskoden. CloudTrail tillhandahåller granskningsspår för all åtkomst till hemligheter. Härnäst utforskar vi WAF, Shield och Network Firewall.
Lär dig Cloud & IT Cert Prep med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 150
- Lektioner
- 600
Vanliga frågor
Är lektionen ”Secrets Manager och Parameter Store” gratis?
Ja – hela texten till ”Secrets Manager och Parameter Store” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Cloud & IT Cert Prep, kan Ni uppgradera till CoddyKit PRO. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.
Vad lär jag mig i ”Secrets Manager och Parameter Store”?
Rotera databasautentiseringsuppgifter automatiskt med Secrets Manager, lagra icke-hemlig konfiguration i Parameter Store och integrera båda med Lambda och ECS. Ni övar på Cloud & IT Cert Prep med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Cloud & IT Cert Prep?
Du behöver inga förkunskaper. Utbildningen i Cloud & IT Cert Prep på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Secrets Manager och Parameter Store”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Cloud & IT Cert Prep-lektionen?
Ja. Varje Cloud & IT Cert Prep-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- KMS, ACM och krypteringsmönster
- GuardDuty, Inspector och Macie
- Secrets Manager och Parameter Store
- WAF, Shield och Network Firewall