Amazon Simple Storage Service (Amazon S3) est le stockage pour Internet. Vous pouvez utiliser Amazon S3 pour stocker et récupérer n’importe quelle quantité de données à tout moment, n’importe où sur le web.

Sa mise à l’échelle est quasi-infinie, un nombre considérable de sites web utilisent Amazon S3 ainsi que de nombreux services de AWS. Par conséquent, c’est un composant essentiel de AWS.



Buckets et Objets

Dans Amazon S3, le stockage des objets (fichiers) se fait dans des Buckets (répertoires)

Bucket

  • Un Bucket doit avoir un nom unique au niveau global du rĂ©seau AWS mĂŞme s’il est dĂ©fini au niveau d’une Region
  • Il suit une convention de nommage :
    • Pas de majuscule
    • Pas d’underscore
    • Pas d’IP
    • Et commence par une lettre minuscule ou bien un chiffre

Objet

  • Sous forme de fichier
  • Il a une taille maximale de 5 To (sous forme de multi-parts de 5 Go)
  • On peut lui attachĂ© des meta-data, tags et un ID de version

  • Les objets sont accessibles par leur Key
  • Une Key est composĂ©e d’un prefix et du nom de l’objet :
    • Prefix : company/department/
    • Object Name : users.json
    • Key : company/department/users.json
  • Pour un Bucket nommĂ© referential, on accèdera alors Ă  l’objet par l’URL :
    • s3://referential/company/department/users.json

Même s’il n’existe pas de notion de répertoire dans S3, on voit que le nommage des Prefix avec des / permet de simuler une structure arborescente.


Catégories de Stockage

Il existe plusieurs catégories de stockage S3 (S3 Classes) qu’il convient d’utiliser en fonction de votre cas d’usage :

  • Amazon S3 Standard :
    • Usage gĂ©nĂ©ral
    • DonnĂ©es hautement durables (10.000 ans)
    • DisponibilitĂ© de 99,99% sur 1 an (onze 9)
    • Supporte 2 dĂ©faillances simultanĂ©es (rĂ©siste Ă  une dĂ©faillance de AZ)
  • Amazon S3 Standard-Infrequent Access (SIA) :
    • Pour des donnĂ©es moins frĂ©quemment utilisĂ©es
      • Sauvegarde
      • Disaster Recovery
    • DonnĂ©es hautement durables (10.000 ans)
    • DisponibilitĂ© de 99,9% sur 1 an (un 9)
    • RĂ©silient au dĂ©sastre d’une AZ (supporte 2 dĂ©faillances simultanĂ©es)
    • Moins cher que S3 Standard
  • Amazon S3 One Zone-Infrequent Access :
    • Pour des donnĂ©es moins frĂ©quemment utilisĂ©es et que l’on peut perdre :
      • Sauvegarde secondaire
      • DonnĂ©es que l’on peut recrĂ©er
    • DonnĂ©es hautement durables (10.000 ans) MAIS sur une seule AZ (risque de perte de donnĂ©es)
    • DisponibilitĂ© de 99,5% sur 1 an
    • Moins cher que S3 SIA
  • Amazon S3 One Intelligent Tiering :
    • MĂŞme latence faible et dĂ©bit Ă©levĂ© que S3 Standard
    • DĂ©place les Objets entre 2 tiers (par ex. entre S3 standard et S3 IA)
    • DonnĂ©es hautement durables (10.000 ans)
    • DisponibilitĂ© de 99,9% sur 1 an
    • RĂ©silient au dĂ©sastre d’une AZ (supporte 2 dĂ©faillances simultanĂ©es)
    • CoĂ»t supplĂ©mentaire dĂ» au monitoring nĂ©cessaire
  • Amazon Glacier :
    • Pour des donnĂ©es Ă  longue durĂ©e de rĂ©tention (minimum de 90 jours) pouvant aller jusqu’à 10 ans, qui ne nĂ©cessitent pas d’accès :
      • Archives ou sauvegardes
    • Stockage Ă  très faible coĂ»t MAIS avec un coĂ»t de rĂ©cupĂ©ration
    • RĂ©cupĂ©ration :
      • Expedited : 1 Ă  5 min
      • Standard : 3 Ă  5 h
      • Bulk : 5 Ă  12 h
    • DonnĂ©es hautement durables (10.000 ans)
    • On parle d’Archive dont la taille eput atteindre 40 To
    • Le stockage s’effectue dans des Vaults
  • Amazon Glacier Deep Archive :
    • Comme Amazon Glacier
    • Pour des donnĂ©es Ă  longue durĂ©e de rĂ©tention (minimum de 180 jours) pouvant aller jusqu’à 10 ans, qui ne nĂ©cessitent pas d’accès
    • RĂ©cupĂ©ration :
      • Standard : 12 h
      • Bulk : 48 h

Transition et Cycle de vie

Il est possible de créer des règles afin que les données soient migrées automatiquement vers un stockage plus adapté ou bien qu’elles soient supprimées :

  • Transition : dĂ©place les objets vers un stockage moins couteux après un certain temps
  • Expiration : supprime un objet après un certain temps

Note

  • Le cycle de transitions supportĂ© est contraint et il n’est pas possible de passer de Amazon Glacier Ă  S3 Standard directement
  • Le but ultime est bien de diminuer les coĂ»ts de stockage

Versioning

Pour mettre en oeuvre la gestion des version des objets, il faut tout d’abord activer le versioning au niveau du Bucket.

  • Le numĂ©ro de version est gĂ©nĂ©rĂ© par Amazon S3
  • La suppression d’un objet est alors logicielle et l’objet sera marquĂ© avec un Delete Marker. Il ne sera plus afficher dans la liste des objets mais il existera toujours avec ses diffĂ©rentes versions.

RĂ©plication

Il est possible de répliquer un S3 Bucket entre 2 Regions (Cross Region Replication) ou dans la même Region (Same Region Replication) :

  • Le Versioning doit ĂŞtre activĂ© sur les 2 Buckets
  • Ils peuvent appartenir Ă  2 comptes diffĂ©rents
  • Les permissions sont gĂ©rĂ©es par un Role IAM
  • La rĂ©plication est asynchrone mais rapide

Les cas d’utilisation possibles sont :

  • Pour une CRR : conformitĂ© rĂ©glementaire, rĂ©duction de latence, rĂ©plication inter-rĂ©gion AWS
  • Pour une SCR : aggrĂ©gation de donnĂ©es, rĂ©plication en direct entre environnements

Bon Ă  savoir

  • Une fois activĂ©e, la rĂ©plication ne s’effectue que sur les nouveaux objets ou ceux modifiĂ©s
  • Une option permet de rĂ©pliquer les suppressions (uniquement les Delete Markers)
  • Il n’est pas possible de rĂ©pliquer un Replication Bucket

Chiffrement

MĂ©thodes

Il existe 4 méthodes de chiffrement des objets dans S3 :

  • SSE-S3 :
    • ClĂ© gĂ©rĂ©e par AWS
    • Server Side Encryption (SSE)
    • Algorithme AES-256
    • S’active en passant le Header “x-amz-server-side-encryption”:”AES256” lors de l’upload de l’objet
    • Peut utiliser le HTTP ou HTTPS
  • SSE-KMS :
    • Utilise le service KMS (Key Management Service) pour gĂ©rer la clĂ©
    • Server Side Encryption (SSE)
    • S’active en passant le Header “x-amz-server-side-encryption”:”aws:kms” lors de l’upload de l’objet
    • Utlise la clĂ© Customer Master Key dĂ©finie dans KMS pour le chiffrement
    • Peut utiliser le HTTP ou HTTPS
  • SSE-C :
    • Permet de fournir votre propre clĂ© (mais c’est Ă  vous de la stocker)
    • Server Side Encryption (SSE) mais la clĂ© n’est pas stocker dans AWS !
    • S’active en passant la clĂ© dans le Header lors de l’upload de l’objet mais aussi lors de sa lecture
    • Utilise uniquement le protocole HTTPS (pour protĂ©ger la clĂ©)
  • Chiffrement cotĂ© Client :
    • Le chiffrement des objets est Ă  la charge du Client
    • Client Side Encryption (CSE)
    • Le chiffrement / dĂ©chiffrement se font du cĂ´tĂ© Client

Forcer le chiffrement

Il existe 2 façons de forcer le chiffrement d’un Objet dans son Bucket :

  • Forcer le chiffrement avec un S3 Bucket Policy qui n’accepte que les requĂŞtes PUT avec un Header de chiffrement (et sinon refuse la requĂŞte)
  • Activer l’option Default Encryption sur un Bucket :
    • Si l’objet est envoyĂ© avec une mĂ©thode de chiffrement dans la requĂŞte, celle-ci sera appliquĂ©e
    • Si l’objet est envoyĂ© sans mĂ©thode de chiffrement, celui-ci sera chiffrĂ© avec la mĂ©thode de chiffrement configurĂ©e par dĂ©faut

A noter

  1. L’option Default Encryption s’assure donc que les objets seront toujours chiffrés mais ne garantit pas la méthode de chiffrement
  2. Le Bucket Policy sera toujours évalué avant le Default Encryption

Encryption In Transit n’assure que le chiffrement d’un objet en SSL/TLS lors de son transfert vers/de AWS. Il ne chiffre pas l’objet dans son Bucket.


Sécurité

Gestion des accès

La gestion de l’accès à S3 se fait à différents niveaux :

  • Utilisateur :
    • IAM Policy : DĂ©finit les appels autorisĂ©s aux APIs de S3 pour chaque utilisateur IAM
  • Ressource :
    • Bucket Policy :
      • S3 Bucket Policy :
        • Configuration au format JSON
        • Permet de configurer un accès public Ă  un Bucket, de forcer le chiffrement des objets ou encore de donner l’accès Ă  un autre compte (Cross-Account)
      • Block Public Access :
        • Bloque l’accès public Ă  un Bucket
        • PrĂ©vient une fuite de donnĂ©es stockĂ©es dans un Bucket
    • Object Access Control List : ACL au niveau de chaque objet
    • Bucket Access Control List : ACL au niveau de chaque bucket

Pre-signed URL

Une Pre-signed URL permet de générer une URL valide un lapse de temps (par défaut 1H) afin de permettre à un utilsateur de télécharger ou uploader un fichier dans un Bucket :

  • Elle peut ĂŞtre gĂ©nĂ©rĂ©e avec le AWS CLI ou SDK
  • L’utilisateur de la Pre-signed URL hĂ©rite des mĂŞmes droits (GET / PUT) que celui qui l’a crĂ©Ă©e

Cas d'utilisation

  1. Génération d’URLs uniques et temporaires pour des téléchargements
  2. Génération d’URLs temporaires pour des uploads à des emplacements précis dans un Bucket

Autres

  • Networking :
    • Supporte les VPC Endpoints (instances EC2 sans accès Ă  Internet)
  • MFA pour la suppression :
    • Doit ĂŞtre activĂ© sous le Root Account avec la commande AWS CLI suivante : aws s3api put-bucket-versioning --bucket <bucket-name> --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "<mfa-device-arn> <mfa-code>"
    • RĂ©servĂ© au propriĂ©taire du Bucket, exige un token MFA (Multi Factor Authentication) pour supprimer un Objet versionnĂ© ou bien supprimer le versioning d’un Bucket

Logging et Audit

Logging Bucket

Il est possible de loguer tous les accès à un Bucket S3 dans un autre Bucket S3 :

  • Ce Bucket s’appelle un Logging Bucket
  • Tous les accès, autorisĂ©s ou pas, y seront consignĂ©s avec de nombreuses informations sur le Client qui y a accĂ©dĂ© (format des Logs)
  • Il sera possible ensuite d’analyser ces requĂŞtes (voir Athena ci-dessous)
  • Les appels aux APIs S3 peuvent ĂŞtre loguĂ©s dans AWS CloudTrail

Attention

Il ne faut jamais configurer le Logging Bucket comme étant le même que le Bucket monitoré sous peine de provoquer les boucles infinies de logs et de voir sa facture AWS explosée !

Audit avec Athena

Athena est un service qui permet d’effectuer des requêtes d’analyse directement sur les objets de S3 (sans passer par une BDD) :

  • Il utilse le langage SQL
  • Il fournit des drives JDBC ou ODBC ce qui permet d’interfacer d’autres logiciels de BI par exemple
  • Il supporte de nombreux formats :
    • de fichiers : CSV, TSV, dĂ©limitĂ©, JSON
    • liĂ©s Ă  Hadoop : ORC, Apache Avro, Parquet
    • de fichiers journaux : Logstash, AWS CloudTrail, Apache WebServer

Site Web S3

  • S3 peut hĂ©berger les contenus statics de sites web
  • Le Bucket doit ĂŞtre activĂ© de la sorte
  • L’URL d’accès est de la forme :
    • <bucket>.s3-website.<region>.amazonaws.com
    • <bucket>.s3-website-<region>.amazonaws.com

S3 CORS (Cross-Origin Resource Sharing )

  • Un site web qui fait rĂ©fĂ©rence Ă  des ressources sur un Bucket S3 peut avoir Ă  configurer un Header CORS
  • Il faut alors autosiser le nom DNS du Bucket dans le Header HTTP Access-Control-Allow-Origin
Jean-Jerome Levy

Ecrit par

Jean-JĂ©rĂ´me LĂ©vy

Consultant DevOps

Professionnel chevronné dans le domaine de l’informatique, cumulant plus de 20 années d’expérience au sein de DSI de grandes entreprises, mon expertise diversifiée m’a permis de jouer un rôle clé dans de nombreux projets, caractérisés par la mise en place de pratiques DevOps innovantes.