web-dev-qa-db-fra.com

ACL Amazon S3 pour un accès en lecture seule et en écriture unique

Je développe une application Web et j'ai actuellement la liste de contrôle d'accès suivante attribuée au compte AWS qu'il utilise pour accéder à ses données:

{
  "Statement": [
    {
      "Sid": "xxxxxxxxx", // don't know if this is supposed to be confidential
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::cdn.crayze.com/*"
      ]
    }
  ]
}

Cependant, je voudrais rendre cela un peu plus restrictif afin que si nos informations d'identification AWS étaient jamais compromises, un attaquant ne pourrait pas détruire de données.

D'après la documentation, il semble que je souhaite autoriser uniquement les actions suivantes: s3:GetObject et s3:PutObject, mais je veux spécifiquement que le compte ne puisse créer que des objets qui n'existent pas déjà - c'est-à-dire qu'une demande PUT sur un objet existant doit être refusée. Est-ce possible?

51
Jake Petroules

Ce n'est pas possible dans Amazon S comme vous l'avez probablement envisagé; cependant, vous pouvez contourner cette limitation en sing Versioning which est un moyen de conserver plusieurs variantes d'un objet dans le même compartiment et a été développé avec des cas d'utilisation comme ceci à l'esprit:

Vous pouvez activer le contrôle de version pour éviter que des objets ne soient supprimés ou remplacés par erreur, ou pour archiver des objets afin de pouvoir en récupérer les versions précédentes.

Il existe également quelques FAQ connexes, par exemple:

  • Qu'est-ce que le contrôle de version? - Le contrôle de version vous permet de conserver, de récupérer et de restaurer chaque version de chaque objet stocké dans un compartiment Amazon S3. Une fois que vous avez activé la gestion des versions pour un compartiment, Amazon S3 conserve les objets existants chaque fois que vous effectuez une opération PUT, POST, COPY ou DELETE sur eux. Par défaut, les requêtes GET récupèrent la dernière version écrite. Les anciennes versions d'un objet écrasé ou supprimé peuvent être récupérées en spécifiant une version dans la demande.

  • Pourquoi devrais-je utiliser le contrôle de version? - Amazon S3 fournit aux clients une infrastructure de stockage très durable. Le contrôle de version offre un niveau de protection supplémentaire en fournissant un moyen de récupération lorsque les clients écrasent ou suppriment accidentellement des objets. Cela vous permet de récupérer facilement des actions utilisateur involontaires et des échecs d'application . Vous pouvez également utiliser le contrôle de version pour la conservation et l'archivage des données. [c'est moi qui souligne]

  • Comment le contrôle de version me protège-t-il contre la suppression accidentelle de mes objets? - Lorsqu'un utilisateur effectue une opération DELETE sur un objet, les requêtes par défaut suivantes ne récupèrent plus l'objet. Cependant, toutes les versions de cet objet continueront d'être préservées dans votre compartiment Amazon S3 et peuvent être récupérées ou restaurées. Seul le propriétaire d'un compartiment Amazon S3 peut supprimer définitivement une version. [c'est moi qui souligne]

Si vous êtes vraiment primordial à propos des informations d'identification AWS du propriétaire du compartiment (qui peuvent être différentes des utilisateurs accédants bien sûr), vous pouvez même aller encore plus loin, voir Comment puis-je assurer une protection maximale de mes versions préservées ? :

La fonctionnalité de suppression MFA du versioning, qui utilise authentification multifacteur , peut être utilisée pour fournir une couche de sécurité supplémentaire. [...] Si vous activez le contrôle de version avec MFA Delete sur votre compartiment Amazon S3, deux formes d'authentification sont requises pour supprimer définitivement une version d'un objet: vos informations d'identification de compte AWS et un code à six chiffres et un numéro de série valides d'une authentification appareil en votre possession physique. [...]

47
Steffen Opel

Si cela est un écrasement accidentel que vous essayez d'éviter et que vos besoins commerciaux autorisent une courte période d'incohérence, vous pouvez effectuer la restauration dans la fonction Lambda:

  1. Faites-en une politique "sans nouveaux objets du même nom". La plupart du temps, cela n'arrivera pas. Pour l'appliquer:
  2. Écoutez les événements S3: PutObject dans un fonction AWS Lambda .
  3. Lorsque l'événement est déclenché, vérifiez si plusieurs versions sont présentes.
  4. S'il existe plusieurs versions, supprimez toutes les versions sauf la plus récente.
  5. Informez l'uploader de ce qui s'est passé (il est utile d'avoir l'uploader d'origine dans x-amz-meta-* de l'objet. Plus d'informations ici ).
7
Motiejus Jakštys

Vous pouvez maintenant le faire avec S3 Object Lock. Il s'agit d'un paramètre par compartiment et vous permet de placer l'un des deux types de verrous WORM.

  • "période de conservation" - ne peut pas être modifié
  • "maintien légal" - peut être modifié par le propriétaire du godet à tout moment

https://docs.aws.Amazon.com/AmazonS3/latest/dev/object-lock.html

2
Dan Pritts