Gestion des secrets - 04 - AWS Secrets Manager et ses alternatives

AWS Secrets Manager, SSM Parameter Store et les alternatives cloud. Setup, rotation automatique et intégration.

04 - AWS Secrets Manager et ses alternatives

Ce que tu vas apprendre

  • La différence entre AWS Secrets Manager et SSM Parameter Store
  • Stocker, lire et faire tourner des secrets avec la CLI AWS
  • Comparaison entre GCP, AWS et Azure pour la gestion des secrets

Prerequisites

Un compte AWS. Le CLI AWS installe et configure.


Deux services, deux usages

AWS a deux services pour stocker des secrets. C'est deroutant au début, mais chacun a sa place.

AWS Secrets Manager est le vault manage. Il stocke des secrets, les chiffre avec KMS, gere le versioning, et propose la rotation automatique via Lambda. Il coûte $0.40 par secret par mois, plus $0.05 pour 10 000 appels API.

SSM Parameter Store (Systems Manager Parameter Store) est un key-value store plus generaliste. Il stocke de la configuration et des secrets. La version Standard est gratuite (jusqu'a 10 000 paramètres). Pas de rotation automatique intégrée, mais c'est souvent suffisant.

Mon conseil : utilise Parameter Store pour la configuration non-sensible (URLs, feature flags, noms de bucket) et Secrets Manager pour les vrais secrets (API keys, mots de passe, credentials). Ca évité de payer $0.40/mois pour stocker l'URL de ton API qui n'a rien de secret.

Stocker et lire des secrets

Avec Secrets Manager :

bash# Creer un secret
aws secretsmanager create-secret \
  --name "paltemps/ANTHROPIC_KEY" \
  --secret-string "sk-ant-api03-xxxx" \
  --description "Cle API Anthropic pour paltemps.fr"

# Lire
aws secretsmanager get-secret-value \
  --secret-id "paltemps/ANTHROPIC_KEY" \
  --query SecretString \
  --output text

Avec SSM Parameter Store :

bash# Creer (SecureString = chiffre avec KMS)
aws ssm put-parameter \
  --name "/paltemps/SMTP_HOST" \
  --value "smtp.paltemps.fr" \
  --type String

aws ssm put-parameter \
  --name "/paltemps/SMTP_PASS" \
  --value "monmotdepasse" \
  --type SecureString

# Lire
aws ssm get-parameter \
  --name "/paltemps/SMTP_PASS" \
  --with-decryption \
  --query Parameter.Value \
  --output text

La convention /app/env/secret est une bonne pratique. Ca permet de filtrer par prefixe et de donner des droits IAM par chemin :

bash# Lire tous les parametres de paltemps
aws ssm get-parameters-by-path \
  --path "/paltemps/" \
  --with-decryption \
  --query "Parameters[*].{Name:Name,Value:Value}"

Acces depuis du code TypeScript

bashbun add @aws-sdk/client-secrets-manager
typescriptimport { SecretsManagerClient, GetSecretValueCommand } from "@aws-sdk/client-secrets-manager";

const client = new SecretsManagerClient({ region: "eu-west-3" });

async function getSecret(name: string): Promise<string> {
  const command = new GetSecretValueCommand({ SecretId: name });
  const response = await client.send(command);

  if (!response.SecretString) {
    throw new Error(`Secret ${name} has no string value`);
  }
  return response.SecretString;
}

// Usage
const anthropicKey = await getSecret("paltemps/ANTHROPIC_KEY");

L'authentification passe par les credentials AWS standards : variables d'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY, fichier ~/.aws/credentials, ou rôle IAM attache a l'instance EC2 / au conteneur ECS.

Rotation automatique avec Lambda

La rotation automatique est le gros avantage de Secrets Manager par rapport a Parameter Store. Le principe : tu attaches une fonction Lambda a un secret, et AWS l'exécuté selon un planning pour générer une nouvelle valeur.

bash# Activer la rotation (rotation tous les 30 jours)
aws secretsmanager rotate-secret \
  --secret-id "paltemps/DB_PASSWORD" \
  --rotation-lambda-arn "arn:aws:lambda:eu-west-3:123456:function:rotate-db-password" \
  --rotation-rules '{"AutomaticallyAfterDays": 30}'

La Lambda doit implementer 4 étapes : createSecret, setSecret, testSecret, finishSecret. AWS fournit des templates pour les cas courants (RDS, Redshift, DocumentDB).

Pour les clés API externes (Anthropic, OpenAI), la rotation automatique est plus compliquee parce que ca implique d'appeler l'API du fournisseur pour régénérer la clé. En pratique, on fait souvent la rotation manuellement pour ces cas-la. L'article sur la rotation donne une méthode.

IAM : contrôle d'acces

Le contrôle fin passe par les politiques IAM. Tu peux restreindre un rôle a un seul secret :

json{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:eu-west-3:123456:secret:paltemps/ANTHROPIC_KEY-*"
    }
  ]
}

Meme logique qu'on a vue avec Google IAM dans l'article précédent. Le principe est le meme : un service ne voit que les secrets dont il a besoin.

Comparaison des vaults cloud

Google Secret Manager AWS Secrets Manager AWS SSM Parameter Store Azure Key Vault
Cout par secret/mois ~$0.06 (>6 versions) $0.40 Gratuit (Standard) $0.03/10k opérations
Rotation automatique Via Pub/Sub + Cloud Function Via Lambda (intégré) Non Via Event Grid
Versioning Oui Oui (2 versions actives) Oui (historique) Oui
Chiffrement AES-256 (Cloud KMS) AES-256 (AWS KMS) AES-256 (AWS KMS) RSA/AES (Azure KMS)
Replication Multi-region auto Multi-region Par region Multi-region
Audit Cloud Audit Logs CloudTrail CloudTrail Azure Monitor

Pour un projet hébergé hors cloud (VPS OVH, Hetzner, Scaleway), aucune de ces solutions n'est un choix naturel. Tu dois quand meme créer un compte cloud, gerer un service account, et accepter une dépendance réseau. Si ton VPS ne peut pas joindre l'API GCP ou AWS, ton application ne démarré pas.

C'est pour ca que pour paltemps.fr, qui tourne sur un VPS OVH, je reste sur des variables CI/CD GitLab et du chiffrement SOPS. Pas de dépendance cloud, pas de latence réseau supplementaire au démarrage.

Quand choisir AWS Secrets Manager

Si ton infrastructure est deja sur AWS (EC2, ECS, Lambda), c'est le choix logique. L'intégration IAM est native, la rotation avec Lambda fonctionne bien pour les bases de donnees, et CloudTrail te donne l'audit trail automatiquement.

Si tu n'es pas sur AWS et que tu n'as pas l'intention d'y aller, passe ton chemin. Le prochain article couvre HashiCorp Vault, la solution self-hosted qui ne depend d'aucun cloud.


Navigation : Precedent : 03 - Google Secret Manager | Suivant : 05 - HashiCorp Vault


Sources

Retrouve d'autres articles techniques sur paltemps.fr.

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.