0Pricing
Cloud & IT Cert Prep · Lekcja

Secrets Manager i Parameter Store

Automatycznie rotować dane uwierzytelniające baz danych za pomocą Secrets Manager, przechowywać niejawną konfigurację w Parameter Store oraz integrować oba rozwiązania z Lambda i ECS.

Secrets Manager i Parameter Store to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Problem sekretów w kodzie

Typowym i niebezpiecznym antywzorcem jest przechowywanie sekretów (haseł do baz danych, kluczy API, tokenów OAuth) w kodzie źródłowym aplikacji, zmiennych środowiskowych lub plikach konfiguracyjnych zatwierdzonych w systemie kontroli wersji. Gdy takie repozytoria zostaną ujawnione — przypadkowo upublicznione lub przejęte przez atakującego — wszystkie sekrety zostają natychmiast naruszone. AWS udostępnia dwie zarządzane usługi eliminujące ten problem: AWS Secrets Manager do danych uwierzytelniających wymagających automatycznej rotacji oraz AWS Systems Manager Parameter Store do wartości konfiguracyjnych i sekretów bez rotacji.

# 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

AWS Secrets Manager — omówienie

AWS Secrets Manager to zarządzana usługa służąca do przechowywania, pobierania i automatycznej rotacji sekretów. Szyfruje wszystkie sekrety za pomocą KMS (domyślnie przy użyciu klucza zarządzanego przez AWS lub Państwa CMK). Sekrety mogą przechowywać dowolne dane strukturalne w postaci ciągu JSON z parami klucz-wartość. AWS Secrets Manager kosztuje 0,40 USD za sekret miesięcznie oraz 0,05 USD za każde 10 000 wywołań API. Najważniejsza różnica w porównaniu z Parameter Store to wbudowana automatyczna rotacja dla RDS, Redshift, DocumentDB i własnych sekretów za pośrednictwem funkcji rotacji Lambda — podczas rotacji nie są wymagane zmiany w aplikacji.

# 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"])'

Automatyczna rotacja za pomocą Secrets Manager

Automatyczna rotacja to najbardziej zaawansowana funkcja usługi Secrets Manager. W przypadku baz danych RDS usługa Secrets Manager natywnie rotuje hasła, wykonując następujące czynności: 1) Generuje nowe hasło. 2) Aktualizuje hasło użytkownika bazy danych w RDS. 3) Aktualizuje sekret, zapisując w nim nowe hasło. 4) Weryfikuje, czy nowe dane uwierzytelniające działają. Wszystko to odbywa się podczas działania aplikacji — bez przestojów i bez ręcznej interwencji. Aplikacje zawsze wywołują get-secret-value, aby pobrać bieżące hasło, dzięki czemu automatycznie korzystają z obróconych danych uwierzytelniających.

# 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-term

Buforowanie sekretów lokalnie

Wywoływanie usługi Secrets Manager przy każdym zapytaniu do bazy danych byłoby kosztowne i powolne. Najlepszą praktyką jest lokalne buforowanie sekretu w pamięci przez krótki czas. AWS udostępnia oficjalne klienty buforujące Secrets Manager dla języków Java i Python, które buforują sekrety przez konfigurowalny czas TTL. Po wygaśnięciu bufora klient ponownie pobiera sekret z usługi Secrets Manager. Jeśli aplikacja otrzyma błąd uwierzytelniania (wskazujący, że hasło zostało obrócone), natychmiast odświeża bufor i ponawia próbę. Ten wzorzec zapewnia wydajność i aktualność danych bez nadmiernego obciążania interfejsu API Secrets Manager.

# 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 to bezpłatny (w przypadku parametrów standardowych), hierarchiczny magazyn klucz-wartość na dane konfiguracyjne i sekrety. Obsługuje typy parametrów String, StringList i SecureString. SecureString szyfruje wartości za pomocą KMS. W przeciwieństwie do Secrets Manager usługa Parameter Store NIE obsługuje automatycznej rotacji — jest przeznaczona do przechowywania wartości konfiguracyjnych, które zmieniają się rzadko. Parametry standardowe są bezpłatne i mogą przechowywać wartości o rozmiarze do 4 KB. Parametry zaawansowane obsługują większe wartości (do 8 KB), zasady parametrów (termin wygaśnięcia i przypomnienia o rotacji) oraz kosztują 0,05 USD za parametr miesięcznie.

# 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 text

Hierarchia Parameter Store i IAM

Organizuj wartości w Parameter Store za pomocą hierarchicznej struktury ścieżek, która odzwierciedla środowisko i architekturę aplikacji. Umożliwia to tworzenie szczegółowych zasad IAM przyznających dostęp do parametrów na podstawie prefiksu ścieżki. Na przykład można przyznać funkcji Lambda dostęp wyłącznie do parametrów znajdujących się pod ścieżką /prod/payment-service/ — funkcja nie będzie mogła uzyskać dostępu do parametrów innych usług. Ta zasada najmniejszych uprawnień dotycząca konfiguracji uniemożliwia przejętej usłudze odczytywanie sekretów innej usługi.

# 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 --recursive

Secrets Manager a Parameter Store: kiedy używać każdej z usług

Wybierz jedną z tych usług w zależności od wymagań: Użyj Secrets Manager, gdy: potrzebujesz automatycznej rotacji sekretów, przechowujesz dane uwierzytelniające do bazy danych, sekret musi być współdzielony między wieloma kontami AWS lub wymagania dotyczące zgodności nakładają obowiązek stosowania udokumentowanych zasad rotacji. Użyj Parameter Store, gdy: potrzebujesz wartości konfiguracyjnych (niebędących sekretami), chcesz skorzystać z bezpłatnego rozwiązania do prostego przechowywania danych klucz-wartość, potrzebujesz hierarchicznej konfiguracji z kontrolą dostępu opartą na ścieżkach lub chcesz przechowywać historię wersji parametrów. Wiele architektur korzysta z obu usług jednocześnie: Parameter Store służy do konfiguracji, a Secrets Manager do danych uwierzytelniających.

# 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 secrets

Integracja z Lambda i ECS

Funkcje Lambda i zadania ECS powinny pobierać sekrety podczas uruchamiania, a nie przy każdym wywołaniu. W przypadku Lambda: pobieraj sekrety w kodzie inicjalizacyjnym (poza funkcją obsługi) i buforuj je w zmiennych globalnych — środowisko wykonawcze Lambda jest zachowywane między wywołaniami, dlatego sekrety są pobierane tylko raz w całym okresie istnienia danego środowiska. W przypadku ECS: użyj pola secrets w definicji zadania, aby wstrzyknąć wartości z Secrets Manager lub elementy SecureString z Parameter Store jako zmienne środowiskowe — ECS pobiera je i wstrzykuje podczas uruchamiania zadania, bez konieczności wprowadzania zmian w kodzie aplikacji.

# 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 start

Parameter Store dla identyfikatorów AMI EC2

Praktycznym, choć często pomijanym zastosowaniem Parameter Store jest przechowywanie identyfikatorów AMI i innych odwołań wdrożeniowych. Zamiast umieszczać identyfikatory AMI na stałe w szablonach CloudFormation (które dezaktualizują się po wydaniu nowych AMI), odwołaj się do wartości w Parameter Store. Potok CI/CD aktualizuje identyfikator AMI w Parameter Store za każdym razem, gdy zostanie utworzony nowy złoty obraz AMI. CloudFormation odczytuje najnowszy identyfikator AMI z Parameter Store podczas wdrażania. AWS publikuje również identyfikatory najnowszych obrazów AMI Amazon Linux w publicznych ścieżkach Parameter Store, do których można odwoływać się bezpośrednio.

# 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 LatestAmiId

Audyt i zgodność w zakresie sekretów

Ład zarządzania sekretami wymaga wiedzy o tym, kto i kiedy uzyskiwał do nich dostęp. AWS CloudTrail rejestruje każde wywołanie interfejsu API usług Secrets Manager i Parameter Store: GetSecretValue, PutParameter, GetParameter. Zapewnia to pełny dziennik audytowy na potrzeby zgodności. Użyj alarmów CloudWatch opartych na metrykach CloudTrail, aby otrzymywać powiadomienia o dostępie do sekretów odbiegającym od zwykłych wzorców — na przykład gdy sekret produkcyjny zostanie odczytany przez nietypową jednostkę IAM lub z adresu IP spoza znanego zakresu, uruchom alarm wymagający zbadania.

# 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 secrets

Udostępnianie sekretów między kontami

W architekturach obejmujących wiele kont aplikacje na jednym koncie czasami potrzebują sekretów zarządzanych na innym koncie (np. centralne konto Security zarządza wszystkimi hasłami RDS). Zasady zasobów Secrets Manager umożliwiają dostęp między kontami. Skonfiguruj zasadę opartą na zasobie dla sekretu, która przyzna roli na koncie korzystającym uprawnienie do wywoływania GetSecretValue. Rola na koncie korzystającym musi mieć również zasadę IAM zezwalającą na wywołania dotyczące identyfikatora ARN sekretu. Zasady klucza KMS muszą także przyznawać kontu korzystającemu dostęp do klucza CMK używanego do szyfrowania sekretu.

# 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 ARN

Szybki sprawdzian

Sprawdź swoją wiedzę na temat zagadnień AWS Solutions Architect (SAA-C03) omówionych w tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyłeś się, że: Secrets Manager zapewnia automatyczną rotację danych uwierzytelniających do baz danych i kluczy API oraz jest preferowanym rozwiązaniem w przypadku sekretów, które muszą podlegać rotacji, Parameter Store zapewnia bezpłatne, hierarchiczne przechowywanie konfiguracji z kontrolą dostępu IAM opartą na ścieżkach, a ECS i Lambda mogą wstrzykiwać sekrety jako zmienne środowiskowe bez zmian w kodzie aplikacji. CloudTrail udostępnia dzienniki audytowe całego dostępu do sekretów. Następnie omówimy WAF, Shield i Network Firewall.

Często zadawane pytania

Czy lekcja „Secrets Manager i Parameter Store” jest bezpłatna?

Tak — pełny tekst „Secrets Manager i Parameter Store” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Secrets Manager i Parameter Store”?

Automatycznie rotować dane uwierzytelniające baz danych za pomocą Secrets Manager, przechowywać niejawną konfigurację w Parameter Store oraz integrować oba rozwiązania z Lambda i ECS. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?

Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Secrets Manager i Parameter Store”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?

Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. KMS, ACM i wzorce szyfrowania
  2. GuardDuty, Inspector i Macie
  3. Secrets Manager i Parameter Store
  4. WAF, Shield i Network Firewall
← Powrót do Cloud & IT Cert Prep