Avec IAM, on sait dire "ce rôle peut lire ce bucket S3". Mais quand par exemple on veut donner à un user l'accès aux données RH sans voir la colonne des salaires, IAM ne sait pas faire, il raisonne en fichiers, pas en colonnes. Et un fichier Parquet contient toutes les colonnes.
C'est là l'intéret de Lake Formation, une couche de droits par dessus le catalogue Glue Data, qui parle en tables et en colonnes comme une base de données. On va voire la manip complète, puis on chiffre le bucket avec KMS.
Comment ça marche
Pour faire simple le Lake Formation prend la main sur les accès au lake. Au lieu de donner des droits S3 dans IAM, on enregistre le bucket dans Lake Formation, et c'est lui qui distribue les autorisations sur les tables du catalogue, du style GRANT SELECT ON commandes façon SQL.
Athena, Glue et Redshift Spectrum vont lui demander l'autorisation avant chaque requête. Et donc, un analyste qui n'a pas le droit sur la colonne salaire ne la voit tout simplement pas dans le résultat, alors que le fichier Parquet contient toujours le champ.
Enregistrer le bucket
- Ouvre Lake Formation. Au premier accès, la console propose de désigner les administrateurs, ajoute ton user IAM (celui de l'article 2), sinon tu n'auras accès à rien par la suite.
- Menu "Data lake locations", puis "Register location".
- Chemin
s3://ibdata-datalake-formation/, et laisse le rôleAWSServiceRoleForLakeFormationDataAccessproposé par défaut.



À partir de maintenant, Lake Formation contrôle les accès aux tables de ce bucket.

Créer un utilisateur analyste
Pour tester des droits, il faut quelqu'un à qui les donner. On crée un user IAM qui va jouer le rôle de l'analyste.
Dans le service IAM, crée un user analyste-test avec accès console, et attache-lui une seule policy managée, AmazonAthenaFullAccess. Elle va lui donner le droit d'utiliser Athena, mais pas d'accéder aux données, c'est Lake Formation qui décidera de ça.

Donner les droits, colonne par colonne
On retourne dans Lake Formation, menu "Data permissions", puis "Grant".

- Principals, choisis "IAM users and roles" et sélectionne
analyste-test. - LF-Tags or catalog resources, choisis "Named data catalog resources", database
ecommerce_clean, tablecommandes. - Table permissions, coche Select uniquement.
- Data permissions, et voilà le cœur du sujet, choisis "Column-based access" puis "Exclude columns" et sélectionne
montant. - Valide.

Notre analyste peut lire la table commandes, sauf la colonne montant.
ecommerce_clean
Le test
Dans une navigation privée connecte toi avec analyste-test, et ouvre Athena.
SELECT * FROM ecommerce_clean.commandes LIMIT 10;

Le résultat s'affiche avec toutes les colonnes sauf montant, comme si elle n'existait pas et si on la demande explicitement :
SELECT commande_id, montant FROM ecommerce_clean.commandes LIMIT 10;
La requête échoue, la colonne est inconnue pour cet utilisateur.

C'est la grande différence avec IAM. Le fichier Parquet dans S3 contient toujours les montants, mais l'analyste ne peut pas les atteindre en passant par le catalogue. Si tu connais snowflake c'est la même logique que le masquage dynamique mais appliquée au data lake.
Chiffrer le bucket avec KMS
On a vu les droits qui contrôles qui accède à la donnée. Le chiffrement protège la donnée elle-même, y compris si quelqu'un met la main sur les fichiers.
S3 chiffre déjà tout par défaut avec ses propres clés (SSE-S3), c'est gratuit et transparent. Passer à KMS apporte trois choses, une clé qui t'appartient, la trace de chaque utilisation dans CloudTrail, et la possibilité de révoquer l'accès à la clé, ce qui rend les données illisibles même pour qui a les fichiers. C'est ce qu'on demande dès qu'il y a des données personnelles.
- Ouvre KMS, "Create key", type symétrique, alias
key-datalake. - Dans les key users, ajoute les rôles qui doivent lire et écrire, le rôle Glue et celui de la Lambda mais on va exclure le user analyste-test pour tester.


Dans le bucket S3 'ibdata-datalake-formation', onglet Properties, section "Default encryption", Edit, choisis SSE-KMS et ta clé.


On tester avec le user analyste-test

Ce que ça coûte
Lake Formation est gratuit, on ne paye que les services qui l'utilisent. KMS coûte 1 $ par mois et par clé, plus 0,03 $ pour 10 000 appels. Sur notre lake, on peut compter environ 1 $ par mois, c'est le seul coût fixe de la série.
Donc, pour éviter de continuer à être facturé après le test, pense à supprimer la clé KMS et à revenir sur « Server-side encryption with Amazon S3 managed keys (SSE-S3) ».

La checklist finale
- [ ] Créer le user
analyste-test, GRANT Select avec exclusion de la colonne montant. - [ ] Test fait en tant qu'analyste,
montantinvisible dans leSELECT *. - [ ] Bucket chiffré en SSE-KMS, rôles ajoutés en key users.
La suite ?
On a maintenant le pipeline qui tourne, les droits sont posés, la donnée est chiffrée. Il est temps de regarder la facture. Prochain article, FinOps AWS pour apprendre à lire son Cost Explorer et comprendre quels services coûtent quoi dans notre pipeline, et la checklist complète pour tout nettoyer sans rien oublier.
Aller plus loin
Le programme complet du parcours est sur la page de la formation AWS.
Tu prépares la certification AWS Certified Data Engineer Associate (DEA-C01) ? Lake Formation, les permissions par colonne et le chiffrement KMS sont au programme du domaine sécurité. Pour t'entraîner, j'ai créé des questions d'examen blanc en français.
👉 S'entraîner sur DataCertification.fr
Tu veux que je t'accompagne sur ton projet data (AWS, Snowflake, dbt, modélisation, coûts) ?
👉 Réserver un appel de 30 minutes
Questions fréquentes
C'est quoi AWS Lake Formation ?
Une couche de droits posée sur le Glue Data Catalog. Au lieu de gérer les accès par fichiers S3 dans IAM, on donne des permissions sur des tables et des colonnes, comme dans une base de données. Athena, Glue et Redshift Spectrum vérifient ces droits avant chaque requête.
Quelle différence entre IAM et Lake Formation ?
IAM raisonne en ressources S3, un rôle peut lire un préfixe ou pas. Lake Formation raisonne en tables et colonnes du catalogue, et permet de donner accès à une table en excluant certaines colonnes ou lignes. Les deux se complètent, IAM pour l'accès aux services, Lake Formation pour la donnée.
Pourquoi mes permissions Lake Formation ne s'appliquent pas ?
Souvent parce que les options "Use only IAM access control" sont encore cochées dans Data catalog settings. Elles sont actives par défaut pour la compatibilité et peuvent impacter les droits Lake Formation. Il faut les décocher pour que les GRANT prennent effet.
Faut-il chiffrer un bucket S3 avec KMS ?
S3 chiffre déjà par défaut avec ses propres clés gratuitement. KMS ajoute une clé que tu contrôles, la traçabilité des usages dans CloudTrail et la possibilité de révoquer l'accès. C'est le standard dès qu'il y a des données personnelles, pour environ 1 $ par mois et par clé.
Pourquoi j'ai des AccessDenied après avoir activé KMS ?
Parce que les rôles doivent aussi être autorisés à utiliser la clé. Un rôle avec tous les droits S3 mais absent des key users de la clé KMS ne pourra pas déchiffrer les fichiers. Il faut l'ajouter dans les key users de la clé.
