06. S3 Encryption
1. Chiffrement au repos
yrdyLe dilemme à l'examen repose toujours sur deux critères : Qui gère la clé ? et Où se fait le chiffrement ?
A. Server-Side Encryption (SSE) : AWS chiffre pour vous
Les données arrivent brutes chez AWS, et c'est S3 qui s'occupe de les chiffrer avant de les écrire sur le disque.
"x-amz-server-side-encryption": "AES256"
SSE-KMS (Chiffrement via AWS KMS)
Le concept : Vous utilisez le service AWS Key Management Service (KMS) pour gérer les clés. Vous pouvez utiliser la clé AWS par défaut (aws/s3) ou créer votre propre clé personnalisée (Customer Managed Key).
Pourquoi ? Pour avoir un contrôle d'accès strict (qui a le droit d'utiliser la clé) et un suivi d'audit (CloudTrail) complet de chaque chiffrement/déchiffrement.
Ce qu'il faut savoir pour l'examen : * Génère des coûts (appels API KMS).
Attention aux quotas de requêtes KMS en cas de fort trafic.
Pour déchiffrer un objet, l'utilisateur a besoin de la permission S3 ET de la permission kms:Decrypt.
Header HTTP à l'upload : "x-amz-server-side-encryption": "aws:kms"
Le concept : Vous possédez et gérez la clé secrète, mais vous la passez à S3 dans la requête HTTPS pour qu'AWS fasse le travail de chiffrement. AWS ne stocke jamais votre clé. Une fois l'opération finie, AWS jette la clé de sa mémoire vive.
Pourquoi ? Pour les entreprises qui ont des obligations de conformité strictes interdisant de confier la gestion des clés à un tiers (même AWS).
Ce qu'il faut savoir pour l'examen : Si vous perdez la clé, vos données sont perdues à jamais. AWS a récemment renforcé la sécurité en désactivant le support SSE-C par défaut sur les nouveaux buckets (il faut l'autoriser explicitement via l'API si besoin).
Header HTTP : Vous devez envoyer la clé dans chaque requête HTTP (x-amz-server-side-encryption-customer-key).
B. Client-Side Encryption : Vous chiffrez avant d'envoyer
Le concept : Vos données sont chiffrées au sein même de votre application (par exemple avec le SDK AWS / S3 Encryption Client) avant de franchir le réseau. AWS reçoit un fichier qui est déjà un bloc illisible.
Pourquoi ? Sécurité maximale "End-to-End". AWS n'a aucun moyen de voir ce qu'il y a dans votre fichier, même s'ils le voulaient.