2012-05-14 6 views
35

Zajmuję się tworzeniem aplikacji internetowych i obecnie mam następujące ACL przypisany do konta AWS używa do dostępu do swoich danych:Amazon S3 ACL dla tylko do odczytu i zapisu jednokrotnego dostępu

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

jednak I chciałoby to uczynić to nieco bardziej restrykcyjnym, aby po naruszeniu naszych poświadczeń AWS atakujący nie mógł zniszczyć żadnych danych.

Z dokumentacji wygląda na to, że chcę zezwolić na następujące akcje: s3:GetObject i s3:PutObject, ale chcę, aby konto mogło tworzyć tylko obiekty, które już nie istnieją - tj. Żądanie PUT na istniejący obiekt powinien zostać odrzucony. czy to możliwe?

+0

Nie wiedziałem o znacznikach językowych! Gdzie są wymienione? –

+2

Myślę, że powodem, dla którego to nie obsługuje, jest to, że S3 jest w pewnym sensie spójny, więc nie ma autorytatywnej semantyki "obiekt nie istnieje". – jberryman

Odpowiedz

37

Nie jest to możliwe w Amazon S3, tak jak zapewne to sobie wyobrażałeś; Można jednak obejść to ograniczenie przez Using Versioning który jest sposobem na utrzymanie wielu wariantów obiektu w tym samym wiadrze i został opracowany z przypadków użycia jak to na uwadze:

może włączyć wersjonowanie do zapobiec usuwaniu obiektów lub ich zastępowaniu przez pomyłkę lub archiwizować obiekty, aby móc je odzyskać w poprzednich wersjach.

Istnieje kilka powiązanych ze sobą najczęściej zadawane pytania, a także, na przykład:

  • What is Versioning? - Versioning pozwala zachować, pobierania i odtwarzania wszystkich wersji każdego obiektu przechowywanego w wiaderku z Amazon S3 . Po włączeniu wersji dla wiadra, Amazon S3 zachowuje istniejące obiekty za każdym razem, gdy wykonasz operację PUT, POST, COPY lub DELETE. Domyślnie, żądania GET będą pobierać ostatnio napisaną wersję. Starsze wersje nadpisanego lub usuniętego obiektu można pobrać, podając wersję w żądaniu.

  • Why should I use Versioning? - Amazon S3 zapewnia klientom bardzo trwałą infrastrukturę pamięci masowej. Wersjonowanie oferuje dodatkowy poziom ochrony, zapewniając środki odzyskiwania, gdy klienci przypadkowo nadpisują lub usuwają obiekty. Umożliwia to łatwe odzyskanie po niezamierzonych działaniach użytkownika i niepowodzeniach aplikacji. Możesz także użyć wersji do przechowywania danych i archiwizacji. [Podkr]

  • How does Versioning protect me from accidental deletion of my objects? - Gdy użytkownik wykonuje operację usuwania na obiekcie, kolejne żądania domyślne nie będą już odebrania obiektu. Jednak wszystkie wersje tego obiektu będą nadal zachowane w twoim zasobniku Amazon S3 i mogą zostać odzyskane lub przywrócone. Tylko właściciel zasobnika Amazon S3 może trwale usunąć wersję. [podkr]

Jeśli jesteś naprawdę najważniejsze informacje poświadczeń AWS właściciela wiadro (która może być inna niż dostępu użytkowników oczywiście), można przyjąć, że jeden krok dalej nawet, zobacz How can I ensure maximum protection of my preserved versions? :

wersjonowanie w MSZ Usuń zdolność, która korzysta multi-factor authentication, mogą być wykorzystane w celu zapewnienia dodatkowej warstwy bezpieczeństwa. [...] Jeśli włączysz Wersję z MFA Usuń w swoim pojemniku Amazon S3, wymagane są dwie formy uwierzytelnienia, aby trwale usunąć wersję obiektu: swoje poświadczenia AWS poświadczenia i ważny sześciocyfrowy kod i numer seryjny z urządzenia uwierzytelniającego w twoim fizycznym posiadaniu. [...]

+6

To niefortunne, że jest to jedyne dostępne rozwiązanie dla bardzo powszechnego i oczywistego zapotrzebowania na kopię zapasową ("napisz tylko nowe"). Jeśli używasz wersji S3, uniemożliwia to używanie zasad zarządzania cyklem życia S3. Więc teraz jesteś zmuszony do wyboru między posiadaniem solidnego zabezpieczenia kopii zapasowej lub wygodnego sposobu na usunięcie starych kopii zapasowych. Nie sądzę, że to zbyt wiele, aby oczekiwać obu. –

+4

Używam zarówno wersjonowania, jak i systemu cyklu życia w tym samym wiadrze dość często tam, gdzie jest to potrzebne - używanie jednego nie wyklucza drugiego. Z opisu wersji w interfejsie s3: '' 'Możesz użyć reguł cyklu życia, aby zarządzać wszystkimi wersjami swoich obiektów, jak również związanymi z nimi kosztami. Reguły cyklu życia umożliwiają automatyczne archiwizowanie twoich obiektów do Klasy lodowcowej i/lub ich usunięcie po upływie określonego czasu. "' ' – PhillipHolmes

+1

Brzmi nieźle. Czy atakujący może wyłączyć wersjonowanie?Czy to nie ma znaczenia, ponieważ i tak nie mogliby oni usunąć obiektów już posiadanych? – z0r

-1

Tak, Nie można utworzyć takiej polityki, w której dajesz uprawnienia do składania tylko nowym obiektom (nie istnieje na s3).

Jestem programistą Bucket Explorer, możesz wypróbować Bucket Explorer, który robi wersję w dwojaki sposób. 1. Wersja Amazon S3, jeśli jest włączona na Wiadrze 2. Jest to wersja własna Bcuketara Explorer, gdy Amazon S3 Versioning jest wyłączona na Wiadrze.

Możesz również wypróbować Bucket Explorer Team Edition, jeśli chcesz przyznać swojemu znajomemu lub klientowi konkretny dostęp.

3

Jeśli jest to przypadkowe nadpisywania staramy się uniknąć, a Twoje wymagania biznesowe pozwalają krótki przedział czasowy niespójności, można wykonać rollback w funkcji lambda:

  1. sprawiają, że polityka, że ​​„nie nowe obiekty o tej samej nazwie ". Przez większość czasu to się nie stanie. Aby go wymusić:
  2. Posłuchaj S3: zdarzenia PutObject w AWS Lambda function.
  3. Po wystrzeleniu zdarzenia sprawdź, czy jest więcej niż jedna wersja.
  4. Jeśli występuje więcej niż jedna wersja, usuń wszystkie oprócz najnowszej.
  5. Poinformuj przesyłającego, co się stało (warto mieć oryginalnego przesyłającego w obiekcie x-amz-meta-*. Więcej informacji: here).
Powiązane problemy