Amazon S3 ACL dla dostępu tylko do odczytu i zapisu raz

Rozwijam aplikację internetową i obecnie mam przypisany następujący ACL do konta AWS, którego używa, aby uzyskać dostęp do swoich danych:

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

Chciałbym jednak uczynić to nieco bardziej restrykcyjnym, aby jeśli nasze poświadczenia AWS zostały kiedykolwiek naruszone, atakujący nie mógł zniszczyć żadnych danych.

Z dokumentacji wygląda na to, że chcę zezwolić tylko na następujące działania: s3:GetObject i s3:PutObject, ale chcę, aby konto mogło tworzyć tylko obiekty, które nie istnieją już-tzn. żądanie PUT na istniejącym obiekcie powinno zostać odrzucone. Czy to możliwe?

Author: Steffen Opel, 2012-05-15

3 answers

Nie jest to możliwe w Amazon S3, Jak zapewne sobie wyobrażałeś; jednak możesz obejść to ograniczenie przez używając wersjonowania , Które jest sposobem przechowywania wielu wariantów obiektu w tym samym wiadrze i zostało opracowane z myślą o takich przypadkach użycia:

Możesz włączyć wersjonowanie, aby zapobiec usuwaniu obiektów lub nadpisane przez pomyłkę, lub do archiwizacji obiektów, dzięki czemu można odzyskać poprzednie wersje oni.

Istnieje również kilka powiązanych FAQ, na przykład:

  • Czym jest wersjonowanie? - wersjonowanie pozwala zachować, odzyskać i przywrócić każdą wersję każdego obiektu przechowywanego w zasobniku Amazon S3. Po włączeniu wersjonowania dla zasobnika Amazon S3 zachowuje istniejące obiekty za każdym razem, gdy wykonujesz na nich operację PUT, POST, COPY lub DELETE. Domyślnie żądania GET pobierają ostatnio napisaną wersję. Starsze wersje nadpisany lub usunięty obiekt można odzyskać poprzez podanie wersji w żądaniu.

  • Dlaczego warto używać wersjonowania? - Amazon S3 zapewnia klientom wysoce trwałą infrastrukturę pamięci masowej. Wersjonowanie oferuje dodatkowy poziom ochrony, zapewniając sposób odzyskiwania, gdy klienci przypadkowo nadpisują lub usuwają obiekty. pozwala to na łatwe odzyskiwanie danych po niezamierzonych działaniach użytkownika i awariach aplikacji. Możesz również użyć Wersjonowanie w celu przechowywania i archiwizacji danych. [moje podkreślenie]

  • W Jaki Sposób wersjonowanie chroni mnie przed przypadkowym usunięciem moich obiektów? - Gdy użytkownik wykona operację usunięcia obiektu, kolejne żądania domyślne nie będą już pobierać obiektu. Jednak wszystkie wersje tego obiektu będą nadal przechowywane w zasobniku Amazon S3 i można je odzyskać lub przywrócić. [[28]}tylko właściciel wiadra Amazon S3 może trwale usunąć wersja. [akcent mój]

Jeśli naprawdę zależy ci na danych uwierzytelniających AWS właściciela wiadra (który może być inny niż użytkownicy uzyskujący dostęp), możesz pójść o krok dalej, zobacz Jak mogę zapewnić maksymalną ochronę moich zachowanych wersji?:

Możliwość usuwania wersji MFA, która wykorzystuje uwierzytelnianie wieloskładnikowe , może być używana do zapewnienia dodatkowej warstwy Ochrona. [...] Jeśli włączysz Wersjonowanie z MFA Delete w wiadrze Amazon S3 wymagane są dwie formy uwierzytelniania trwale Usuń wersję obiektu: Twoje konto AWS poświadczenia oraz ważny sześciocyfrowy kod i numer seryjny z urządzenie uwierzytelniające znajdujące się w Twoim fizycznym posiadaniu. [...]

 45
Author: Steffen Opel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-15 01:04:27

Jeśli jest to przypadkowe nadpisanie, którego próbujesz uniknąć, a twoje wymagania biznesowe pozwalają na krótkie okno czasowe niespójności, możesz wykonać rollback w funkcji Lambda:

  1. uczyń to zasadą, że "nie ma nowych obiektów o tej samej nazwie". W większości przypadków tak się nie stanie. Aby go wyegzekwować:
  2. słuchaj zdarzeń S3:PutObject wAWS Lambda funkcja .
  3. Po wywołaniu zdarzenia sprawdź, czy istnieje więcej niż jedna wersja.
  4. jeśli jest istnieje więcej niż jedna wersja, usuń wszystkie oprócz najnowszej.
  5. powiadom uploadera co się stało (warto mieć oryginalny uploader w x-amz-meta-* obiektu. Więcej informacji tutaj ).
 6
Author: Motiejus Jakštys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-30 11:56:29

Tak, Nie jest możliwe utworzenie takiej polityki, w której można zezwolić put tylko na nowo obiekty(nie istnieje na s3).

Jestem programistą Bucket Explorer, możesz wypróbować Bucket Explorer, który robi wersję na dwa sposoby. 1. Wersjonowanie Amazon S3, jeśli jest włączone w Bucket 2. Jest to własne enbale wersjonowania Bcuket Explorer, gdy wersjonowanie Amazon S3 jest wyłączone na zasobniku.

Możesz również wypróbować Bucket Explorer Team Edition, jeśli chcesz dać konkretny dostęp do twój przyjaciel lub klient.

 -3
Author: Tej Kiran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-15 16:18:38