Chiffrer le contenu de son bucket S3

Les différentes méthodes
Il existe deux méthodes pour chiffrer ses données dans un bucket S3 :
- Server-Side Encryption (SSE) : Le chiffrement de vos données s’effectue directement côté serveur (comprendre par S3) avant que la donnée ne soit écrite sur disque.
- Client-Side Encryption : Les données seront chiffrées avant même qu’elles ne transitent vers S3. Cela implique donc beaucoup plus de complexité. En effet, cela vous demendera de gérer vos clefs de chiffrement, la méthode et les outils.
Vous l’aurez compris, il semble beaucoup plus simple d’exploiter la méthode Server-Side Encryption. D’autant plus qu’avec S3, le flux de données (in transit) est également sécurisé par TLS. C’est cette méthode que j’ai choisi de décrire.
Server-Side Encryption en “détail”
Amazon propose deux moyens pour réaliser le chiffrement côté serveur :
- Par clés KMS (SSE-KMS) : Globalement, il faut générer une clés via KMS (clé symétrique) et spécifier au moment où l’on push la donnée dans S3 que l’on souhaite chiffrer ou non l’objet (A noter qu’il est possible de l’exiger à travers une stratégie S3). Il faudra également que le client ait les bons droits IAM sur le service KMS pour pouvoir exploiter la clé.
- Clés de chiffrement géré par AWS (SSE-S3) : Pour résumer, Amazon s’occupe de TOUT. On prendra uniquement soin de spécifier à la création du bucket l’option “chiffrer le bucket” et ce sera tout. Amazon s’occupera de chiffrer chaque objet avec une clé unique. Ces clés seront également chiffrées à l’aide d’un clé principale qui subira une rotation. L’algorithme
AES-256
est utilisé pour ce faire (chiffrement symétrique). Côté client rien à faire, on peut réaliser ses appels S3 comme avant.
Activer le SSE-S3 via Terraform
Rien de bien compliquer, il suffit de créer le bucket S3 comme ci-dessous :
resource "aws_s3_bucket" "bucket" {
bucket = "my-bucket"
acl = "private"
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
Conclusion
Et voilà, cet article se termine. Il n’est pas complet dans le sens où il ne décrit pas la totalité des mécanismes employés (chiffrement symétriques/asymétriques, méthode de chiffrement côté client, etc …) ni même le chiffrement SSE-KMS
. Mais le sujet est vaste et couvre beaucoup de domaines.
Néamoins, vous savez désormais qu’il peut être très simple de chiffrer côté serveur vos données dans un bucket S3 sans à devoir rien à faire côté client.