0Pricing
Cloud & IT Cert Prep · Leçon

Secrets Manager et Parameter Store

Renouvelez automatiquement les identifiants de base de données avec Secrets Manager, stockez les paramètres de configuration non secrets dans Parameter Store, puis intégrez les deux services à Lambda et ECS.

Secrets Manager et Parameter Store est une leçon Cloud & IT Cert Prep gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Cloud & IT Cert Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cloud & IT Cert Prep comprend 4 leçons au total.

Le problème des secrets dans le code

Une anti-architecture courante et dangereuse consiste à stocker des secrets (mots de passe de bases de données, clés d’API, jetons OAuth) dans le code source de l’application, les variables d’environnement ou des fichiers de configuration intégrés au contrôle de version. Lorsque ces référentiels sont exposés — rendus accidentellement publics ou consultés par un attaquant — tous les secrets sont immédiatement compromis. AWS fournit deux services gérés pour éliminer ce problème : AWS Secrets Manager pour les identifiants qui nécessitent une rotation automatique, et AWS Systems Manager Parameter Store pour les valeurs de configuration et les secrets qui ne font pas l’objet d’une 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

Présentation d’AWS Secrets Manager

AWS Secrets Manager est un service géré destiné au stockage, à la récupération et à la rotation automatique des secrets. Il chiffre tous les secrets avec KMS (par défaut à l’aide d’une clé gérée par AWS ou de votre CMK). Les secrets peuvent contenir des données structurées quelconques sous la forme d’une chaîne JSON clé-valeur. Secrets Manager facture 0,40 $ par secret et par mois, auxquels s’ajoutent 0,05 $ pour 10 000 appels d’API. Sa principale différence par rapport au magasin de paramètres est la rotation automatique intégrée pour RDS, Redshift, DocumentDB et les secrets personnalisés via des fonctions Lambda de rotation : aucune modification de l’application n’est nécessaire pendant la rotation.

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

Rotation automatique avec Secrets Manager

La rotation automatique est la fonctionnalité la plus puissante de Secrets Manager. Pour les bases de données RDS, Secrets Manager effectue nativement la rotation des mots de passe en : 1) générant un nouveau mot de passe ; 2) mettant à jour le mot de passe de l'utilisateur de la base de données dans RDS ; 3) mettant à jour le secret avec le nouveau mot de passe ; 4) vérifiant que les nouveaux identifiants fonctionnent. Tout cela se produit pendant que votre application est en cours d'exécution — sans interruption de service ni intervention manuelle. Les applications appellent toujours get-secret-value pour récupérer le mot de passe actuel ; elles utilisent donc automatiquement les identifiants renouvelés.

# 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

Mise en cache locale des secrets

Appeler Secrets Manager pour chaque requête adressée à la base de données serait coûteux et lent. La bonne pratique consiste à mettre le secret en cache localement, en mémoire, pendant une courte période. AWS fournit des clients officiels de mise en cache de Secrets Manager pour Java et Python, qui mettent les secrets en cache pendant une TTL configurable. Lorsque le cache expire, le client récupère de nouveau le secret auprès de Secrets Manager. Si une application reçoit une erreur d'authentification (indiquant que le mot de passe a été renouvelé), elle actualise immédiatement le cache et réessaie. Ce modèle offre de bonnes performances et des données à jour sans surcharger l'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 est un magasin hiérarchique clé-valeur gratuit (pour les paramètres standard) destiné aux données de configuration et aux secrets. Il prend en charge les types de paramètres String, StringList et SecureString. SecureString chiffre les valeurs avec KMS. Contrairement à Secrets Manager, Parameter Store ne prend PAS en charge la rotation automatique — il est conçu pour les valeurs de configuration qui changent peu fréquemment. Les paramètres standard sont gratuits et peuvent stocker jusqu'à 4 Ko. Les paramètres avancés prennent en charge des valeurs plus volumineuses (jusqu'à 8 Ko), des politiques de paramètres (expiration et rappels de rotation), et coûtent 0,05 $ par paramètre et par mois.

# 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

Hiérarchie de Parameter Store et IAM

Organisez les valeurs de Parameter Store à l'aide d'une structure de chemins hiérarchique qui reflète votre environnement et l'architecture de votre application. Cela permet de créer des politiques IAM précises qui accordent l'accès aux paramètres selon un préfixe de chemin. Par exemple, vous pouvez accorder à une fonction Lambda l'accès uniquement aux paramètres situés sous /prod/payment-service/ — elle ne pourra pas accéder aux paramètres des autres services. Ce principe du moindre privilège appliqué à la configuration empêche un service compromis de lire les secrets d'un autre service.

# 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 ou Parameter Store : lequel utiliser ?

Choisissez l'un des deux services en fonction de vos exigences : utilisez Secrets Manager lorsque vous avez besoin d'une rotation automatique des secrets, que vous stockez des identifiants de base de données, que le secret doit être partagé entre plusieurs comptes AWS ou que la conformité impose des politiques de rotation documentées. Utilisez Parameter Store lorsque vous avez besoin de valeurs de configuration (non secrètes), que vous souhaitez une solution gratuite pour un stockage clé-valeur simple, que vous avez besoin d'une configuration hiérarchique avec un contrôle d'accès fondé sur les chemins ou que vous devez stocker l'historique des versions des paramètres. De nombreuses architectures utilisent les deux : Parameter Store pour la configuration et Secrets Manager pour les identifiants.

# 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

Intégration avec Lambda et ECS

Les fonctions Lambda et les tâches ECS doivent récupérer les secrets au démarrage, et non à chaque invocation. Pour Lambda : récupérez les secrets dans le code d'initialisation (en dehors de la fonction gestionnaire) et mettez-les en cache dans des variables globales — l'environnement d'exécution Lambda persiste entre les invocations, de sorte que les secrets ne sont récupérés qu'une seule fois pendant la durée de vie de chaque environnement. Pour ECS : utilisez le champ secrets dans la définition de tâche pour injecter les valeurs de Secrets Manager ou les SecureStrings de Parameter Store en tant que variables d'environnement — ECS les récupère et les injecte au lancement de la tâche, sans aucune modification du code de l'application.

# 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 pour les ID d'AMI d'EC2

Une utilisation pratique, mais souvent négligée, de Parameter Store consiste à stocker les ID d'AMI et autres références de déploiement. Au lieu d'inscrire les ID d'AMI en dur dans vos modèles CloudFormation (qui deviennent obsolètes lorsque de nouvelles AMI sont publiées), référencez une valeur de Parameter Store. Votre pipeline CI/CD met à jour l'ID d'AMI dans Parameter Store chaque fois qu'une nouvelle AMI de référence est créée. CloudFormation lit l'ID d'AMI le plus récent dans Parameter Store au moment du déploiement. AWS publie également les ID des dernières AMI Amazon Linux dans des chemins publics de Parameter Store que vous pouvez référencer directement.

# 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

Audit et conformité des secrets

La gouvernance des secrets exige de savoir qui y a accédé et à quel moment. AWS CloudTrail enregistre chaque appel d'API à Secrets Manager et Parameter Store : GetSecretValue, PutParameter, GetParameter. Vous disposez ainsi d'une piste d'audit complète pour la conformité. Utilisez les alarmes CloudWatch sur les métriques CloudTrail pour vous alerter lorsque des secrets sont consultés selon des schémas inhabituels — par exemple, si un secret de production est consulté depuis un principal IAM inhabituel ou depuis une adresse IP qui ne se trouve pas dans votre plage connue, déclenchez une alerte afin d'effectuer une investigation.

# 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

Partage de secrets entre comptes

Dans les architectures à plusieurs comptes, les applications d'un compte ont parfois besoin de secrets gérés dans un autre compte (par exemple, un compte Security central gère tous les mots de passe RDS). Les politiques de ressources de Secrets Manager autorisent l'accès entre comptes. Configurez une politique fondée sur les ressources sur le secret afin d'accorder à un rôle du compte consommateur l'autorisation d'appeler GetSecretValue. Le rôle du compte consommateur doit également disposer d'une politique IAM autorisant les appels vers l'ARN du secret. Les politiques de clé KMS doivent aussi accorder au compte consommateur l'accès à la CMK utilisée pour chiffrer le 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 ARN

Vérification rapide

Vérifiez votre compréhension des concepts AWS Solutions Architect (SAA-C03) présentés dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que : Secrets Manager fournit une rotation automatique pour les identifiants de bases de données et les clés d'API, et constitue le choix privilégié pour les secrets qui doivent être renouvelés ; Parameter Store fournit un stockage de configuration hiérarchique gratuit avec un contrôle d'accès IAM fondé sur les chemins ; et ECS et Lambda peuvent injecter des secrets en tant que variables d'environnement sans modifier le code de l'application. CloudTrail fournit des pistes d'audit pour tous les accès aux secrets. Nous allons maintenant étudier WAF, Shield et Network Firewall.

Questions Fréquemment Posées

La leçon « Secrets Manager et Parameter Store » est-elle gratuite ?

Oui — le texte complet de « Secrets Manager et Parameter Store » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Cloud & IT Cert Prep, passe à CoddyKit PRO. Le cours Cloud & IT Cert Prep comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Secrets Manager et Parameter Store » ?

Renouvelez automatiquement les identifiants de base de données avec Secrets Manager, stockez les paramètres de configuration non secrets dans Parameter Store, puis intégrez les deux services à Lambda… Tu pratiques Cloud & IT Cert Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Cloud & IT Cert Prep ?

Aucune expérience préalable n'est requise. Cloud & IT Cert Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Secrets Manager et Parameter Store » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Cloud & IT Cert Prep ?

Oui. Chaque leçon Cloud & IT Cert Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. KMS, ACM et modèles de chiffrement
  2. GuardDuty, Inspector et Macie
  3. Secrets Manager et Parameter Store
  4. WAF, Shield et Network Firewall
← Retour à Cloud & IT Cert Prep