Introduction
AWS KMS centralise la gestion des clés de chiffrement et simplifie la conformité RGPD et ISO. Dans ce tutoriel intermédiaire, vous allez créer une clé CMK, chiffrer des données sensibles et implémenter la rotation automatique. Chaque étape inclut du code prêt à l'emploi pour Node.js avec le SDK v3. Vous découvrirez également comment intégrer KMS dans une architecture serverless tout en respectant le principe du moindre privilège.
Prérequis
- Compte AWS avec permissions KMS
- Node.js 20+ et AWS CLI v2
- Connaissances de base TypeScript et IAM
Configuration AWS CLI
aws configure
aws sts get-caller-identityConfigurez vos credentials AWS et vérifiez l'identité IAM avant toute opération KMS.
Création d'une clé CMK
aws kms create-key --description "Clé application 2026" --tags TagKey=Environment,TagValue=Production --output jsonCrée une clé CMK avec tags. Notez l'ARN retourné pour les étapes suivantes.
Installation du SDK AWS
npm init -y
npm install @aws-sdk/client-kmsInstalle le client KMS v3 officiel, plus léger et typé que la v2.
Client KMS TypeScript
import { KMSClient } from '@aws-sdk/client-kms';
const kmsClient = new KMSClient({
region: 'eu-west-3',
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
},
});Initialise le client KMS avec région et credentials. Toujours utiliser des variables d'environnement.
Fonction de chiffrement
import { EncryptCommand } from '@aws-sdk/client-kms';
import { kmsClient } from './kms-client';
export async function encryptData(plaintext: string, keyId: string): Promise<Uint8Array> {
const command = new EncryptCommand({
KeyId: keyId,
Plaintext: Buffer.from(plaintext),
});
const response = await kmsClient.send(command);
return response.CiphertextBlob!;
}Chiffre une chaîne et retourne le ciphertext. Gère les erreurs avec try/catch en production.
Fonction de déchiffrement
import { DecryptCommand } from '@aws-sdk/client-kms';
import { kmsClient } from './kms-client';
export async function decryptData(ciphertext: Uint8Array): Promise<string> {
const command = new DecryptCommand({
CiphertextBlob: ciphertext,
});
const response = await kmsClient.send(command);
return Buffer.from(response.Plaintext!).toString();
}Déchiffre le ciphertext sans spécifier la clé (KMS la déduit automatiquement).
Bonnes pratiques
- Utilisez toujours des alias pour référencer les clés
- Activez la rotation automatique tous les 365 jours
- Limitez les permissions IAM au strict minimum
- Stockez les ciphertext dans S3 avec SSE-KMS
- Activez CloudTrail pour auditer les appels KMS
Erreurs courantes à éviter
- Oublier de gérer l'exception KeyUnavailableException
- Utiliser des clés AWS gérées pour des données sensibles
- Ne pas activer la rotation sur les clés de production
- Hardcoder l'ID de clé dans le code source
Pour aller plus loin
Découvrez nos formations avancées sur la sécurité AWS : https://learni-group.com/formations