2012-05-14 14 views
35

ich eine Web-Anwendung zu entwickeln, und ich habe zur Zeit die folgenden ACL auf die AWS-Konto zugewiesen er seine Daten zugreift:Amazon S3 ACL für Nur-Lese-und Schreib einmal Zugang

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

aber ich Ich möchte dies etwas restriktiver machen, damit ein Angreifer keine Daten zerstören kann, wenn seine AWS-Anmeldeinformationen jemals kompromittiert wurden.

Aus der Dokumentation, es sieht aus wie ich nur die folgenden Aktionen zulassen möge: s3:GetObject und s3:PutObject, aber ich mag speziell auf das Konto nur in der Lage sein, Objekte zu erstellen, die nicht bereits vorhanden ist - dh eine PUT-Anfrage auf einem existierendes Objekt sollte abgelehnt werden. Ist das möglich?

+0

Ich wusste nichts über Sprachtags! Wo sind die aufgelistet? –

+2

Ich denke, der Grund, warum dies nicht unterstützt wird, ist, dass S3 letztendlich konsistent ist, also gibt es keine autoritative "Objekt existiert nicht" Semantik. – jberryman

Antwort

37

Dies ist in Amazon S3 nicht möglich, wie Sie es sich wahrscheinlich vorgestellt haben; Sie können jedoch diese Einschränkung durch Using Versioning arbeiten die ist ein Mittel in der gleichen Eimer mehrere Varianten eines Objekts halten und hat mit Anwendungsfällen wie diesem Sinne entwickelt:

Sie könnten aktivieren Versionierung verhindern, dass Objekte gelöscht oder versehentlich überschrieben werden oder Objekte archiviert werden, sodass Sie frühere Versionen von Objekten abrufen können.

Es gibt ein paar verwandten FAQs auch, zum Beispiel:

  • What is Versioning? - Versionierung ermöglicht es Ihnen, zu erhalten, abrufen und jede Version jedes in einem Amazon S3 Eimer gespeicherte Objekt wiederherstellen . Sobald Sie die Versionierung für einen Bucket aktiviert haben, behält Amazon S3 vorhandene Objekte bei jeder PUT-, POST-, COPY- oder DELETE-Operation bei. GET-Anfragen rufen standardmäßig die zuletzt geschriebene Version ab. Ältere Versionen eines überschriebenen oder gelöschten Objekts können durch Angabe einer Version in der Anfrage abgerufen werden.

  • Why should I use Versioning? - Amazon S3 bietet Kunden eine äußerst langlebige Speicherinfrastruktur. Die Versionierung bietet eine zusätzliche Schutzebene, da sie eine Möglichkeit zur Wiederherstellung bietet, wenn Benutzer versehentlich Objekte überschreiben oder löschen. Dies ermöglicht Ihnen die einfache Wiederherstellung von unbeabsichtigten Benutzeraktionen und Anwendungsfehlern. Sie können Versionierung auch für die Aufbewahrung und Archivierung von Daten verwenden. [Hervorhebung von mir]

  • How does Versioning protect me from accidental deletion of my objects? - Wenn ein Benutzer auf ein Objekt eine DELETE-Operation durchführt, werden nachfolgende Standardanfragen abrufen nicht mehr das Objekt. Alle Versionen dieses Objekts werden jedoch weiterhin in Ihrem Amazon S3-Bucket beibehalten und können abgerufen oder wiederhergestellt werden. Nur der Besitzer eines Amazon S3-Buckets kann eine Version dauerhaft löschen. [Hervorhebung von mir]

Wenn Sie wirklich von größter Bedeutung über die AWS-Anmeldeinformationen des Eimers Eigentümer sind (die anders als den zugreifenden Benutzer natürlich sein kann), können Sie nehmen, dass einen Schritt weiter selbst finden How can I ensure maximum protection of my preserved versions? :

Versioning MFA Delete-Fähigkeit, die multi-factor authentication verwendet, kann eine zusätzliche Schicht von Sicherheit bieten verwendet werden. [...] Wenn Sie die Versionierung mit MFA Delete in Ihrem Amazon S3-Bucket aktivieren, sind zwei Formen der Authentifizierung erforderlich: Eine Version eines Objekts dauerhaft löschen: Ihr AWS-Konto Anmeldeinformationen und eine gültige sechsstellige Code- und Seriennummer von einem Authentifizierungsgerät in Ihrem physischen Besitz. [...]

+6

Es ist bedauerlich, dass dies die einzige Lösung für eine sehr häufige und offensichtliche Backup-Anforderung ist ("Nur neu schreiben"). Wenn Sie die S3-Versionierung verwenden, können Sie die Lebenszyklus-Management-Richtlinien von S3 nicht verwenden. Jetzt müssen Sie sich entscheiden, ob Sie eine solide Backup-Sicherheit haben oder ob Sie eine bequeme Möglichkeit haben, alte Backups zu entfernen. Ich denke nicht, dass es zu viel ist, um beides zu erwarten. –

+4

Ich benutze sowohl die Versionierung als auch das Lifecycle-System innerhalb des gleichen Eimers oft dort, wo es benötigt wird - die Verwendung des einen schließt den anderen nicht aus. Aus der Beschreibung der Versionierung innerhalb der s3-Schnittstelle: '' 'Mit Lifecycle-Regeln können Sie alle Versionen Ihrer Objekte sowie die damit verbundenen Kosten verwalten. Lifecycle-Regeln ermöglichen es Ihnen, Ihre Objekte automatisch in der Glacier Storage-Klasse zu archivieren und/oder nach einem bestimmten Zeitraum zu entfernen.''' – PhillipHolmes

+1

Hört sich gut an. Ist es einem Angreifer möglich, die Versionierung zu deaktivieren?Oder ist es egal, weil sie die bereits versionierten Objekte sowieso nicht löschen könnten? – z0r

-1

Ja, Es ist nicht möglich, eine solche Politik zu schaffen, in dem Sie die Berechtigung nur auf neu Objekte setzen geben (existiert nicht auf s3).

Ich bin ein Entwickler von Bucket Explorer, Sie können Bucket Explorer versuchen, die Version in zwei Richtungen tut. 1. Amazon S3-Versionierung, wenn sie im Bucket 2 aktiviert ist. Dies ist die eigene Versionierung von Bcuket Explorer, wenn Amazon S3 Versioning für den Bucket deaktiviert ist.

Sie können auch Bucket Explorer Team Edition ausprobieren, wenn Sie Ihrem Freund oder Kunden einen bestimmten Zugriff gewähren möchten.

3

Wenn die versehentliche Überschreiben Sie versuchen zu vermeiden, und Ihre Geschäftsanforderungen ermöglichen einem kurzes Zeitfenster von Inkonsistenz, können Sie die Rollback in der Funktion Lambda tun:

  1. es eine Politik Sie sich, dass „no neue Objekte mit dem gleichen Namen ". Die meiste Zeit wird es nicht passieren. Um es zu erzwingen:
  2. Listen für S3: PutObject-Ereignisse in einem AWS Lambda function.
  3. Wenn das Ereignis ausgelöst wird, prüfen Sie, ob mehr als eine Version vorhanden ist.
  4. Wenn mehr als eine Version vorhanden ist, löschen Sie alle bis auf die neueste Version.
  5. Benachrichtigen Sie den Uploader, was passiert ist (es ist nützlich, den ursprünglichen Uploader in x-amz-meta-* des Objekts zu haben. Weitere Informationen here).