Mam proste wiadro, które wygląda jak images.mysite.com
na moim S3 i innych zasobnikach zawierających kopie zapasowe itp.
Chcę zezwolić określonemu użytkownikowi na dostęp do images.mysite.com
zasobnika w celu przesyłania obrazów. Jednak NIE CHCĘ, żeby zobaczył inne wiadra; nawet nie to, że istnieją.
Nie mogłem stworzyć polityki, która to robi; za każdym razem, gdy próbuję czegoś restrykcyjnego, blokuje to wyświetlenie jakichkolwiek zasobników.
https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/
. W ten sposób uniemożliwiasz im przeglądanie całej listy i nie zmieniasz niczego w obecnej polityce.Odpowiedzi:
Próbowałem tego od jakiegoś czasu i wreszcie znalazłem działające rozwiązanie. Musisz użyć różnych „Zasobów” w zależności od rodzaju wykonywanej czynności. W poprzedniej odpowiedzi zawarłem również brakujące działania (lubiłem
DeleteObject
), a niektóre ograniczyłem (lubiłemPutBucketAcl
).Teraz działają dla mnie następujące zasady uprawnień:
Czynności dotyczące wiadra i obiektów muszą mieć różne arn.
źródło
ListAllMyBuckets
iGetBucketLocation
dla wszystkich zasobników S3 ("arn:aws:s3:::*"
będzie działać raczej niż"*"
dla zasobu). Jak stwierdzono w tym poście na blogu AWS „na marginesie, obecnie nie można selektywnie odfiltrowywać niektórych zasobników, więc użytkownicy muszą mieć uprawnienia do wyświetlania wszystkich zasobników w celu uzyskania dostępu do konsoli”.Nasz przypadek użycia: Zapewnij miejsce na kopie zapasowe dla klientów naszej aplikacji w chmurze, do którego klienci mają bezpośredni dostęp za pomocą typowych narzędzi S3. Oczywiście żaden klient nie powinien widzieć, co mają inni klienci.
Jak wyjaśnił cloudberryman: „Możesz podać wszystkie segmenty lub żadne”, więc musimy wymyślić obejście. Tło:
Przyznanie użytkownikowi uprawnień ListAllMyBuckets jest konieczne, aby konsola AWS S3 lub S3Fox łączyły się bez komunikatu o błędzie. Ale ListAllMyBuckets wyświetla wszystkie zasobniki, fragmenty przydzielonych zasobów (w rzeczywistości działa tylko arn: ... ::: *). To poważny błąd, jeśli o mnie chodzi. Przy okazji. odmowa ListBucket dla wszystkich zasobników nie zapobiega ich wyświetlaniu, ponieważ ListBucket przyznaje prawa do wyświetlania zawartości zasobnika.
Są 3 możliwości, które uważam za obejście. Ja wybrałem ostatnią.
(1) używaj tajemniczych nazw zasobników, np. Identyfikatorów GUID
Zaleta: łatwa konfiguracja
Wada: trudna w zarządzaniu, szczególnie dla klienta. (wyobraź sobie, że znajdujesz określony identyfikator GUID wśród tysięcy innych). Pokazuje również liczbę segmentów = liczba klientów korzystających z usługi tworzenia kopii zapasowych.
(2) użyj jednego zasobnika z folderami specyficznymi dla klienta
W ten sposób Amazon sugeruje na swoich przykładach S3 / IAM, aby zapewnić przestrzeń dostępną tylko dla niektórych użytkowników lub grup użytkowników. Zobacz: Przykładowe zasady uprawnień AWS
Zaleta: dość łatwa w konfiguracji, zgodna z pomysłami AWS
Wada: wymusza upublicznienie istnienia wszystkich wiader, aby klient mógł znaleźć swoje „domowe” wiadro. Rachunkowość AWS zapewnia statystyki wykorzystania zasobnika, ale nie wykorzystania folderów, co utrudnia obliczanie kosztów według klienta.
(3) nie udzielaj praw dostępu do ListAllMyBuckets
Zaleta: dostajesz to, czego chcesz: klienci nie widzą segmentów innych klientów
Wada: klient nie widzi własnego wiadra. S3Browser zawiera ładną wiadomość „nie można” i prosi o wprowadzenie nazwy zasobnika. S3Fox generuje komunikat o błędzie podczas łączenia się z rootem, ale pozwala na bezpośrednią nawigację do zasobnika klienta, jeśli znana jest nazwa zasobnika. Konsola Amazon S3 w ogóle nie działa.
Mam nadzieję, że pomogło to obsłużyć S3 IAM tak, jak tego potrzebujesz.
źródło
Nie jest możliwe zapewnienie dostępu do konsoli S3 bez nadania uprawnień
ListAllMyBuckets
zgody.W moim przypadku (i być może również w Twoim, przyszłym czytelniku) akceptowalną alternatywą jest przekierowywanie użytkowników po zalogowaniu się bezpośrednio do zasobnika, który chcesz, aby widzieli.
Aby to zrobić, dołącz następujące informacje do adresu URL logowania do uprawnień:
/s3/?bucket=bucket-name
Pełny adres URL logowania (zastąp swój alias i nazwę zasobnika ):
https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name
Zasady uprawnień (zastąp nazwę zasobnika ):
Więcej informacji na temat tworzenia uprawnień specyficznych dla zasobnika dla użytkowników można znaleźć na tym blogu: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /
źródło
Wypróbuj tę zasadę. Weź również pod uwagę, że nie ma możliwości, aby użytkownik wyświetlał tylko wybrany segment. Możesz wyświetlić wszystkie zasobniki lub żadne.
źródło
s3:*
, aby działało na mnie. Miałem też"Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"]
, ale to może nie być potrzebne.Interpretuję to pytanie jako: „Czy mogę zezwolić na dostęp do jednego zasobnika, w którym inne zasobniki nie będą dostępne, a zatem niewidoczne”. Ponieważ wyświetlenie nazwy zasobnika, do którego nie udzielono dostępu, nadal jest równoznaczne z wyciekiem informacji.
Prawidłowa odpowiedź brzmi: nie. Wymagane uprawnienie to ListAllMyBuckets, które pozwoli użytkownikowi zobaczyć WSZYSTKIE zasobniki. Rezygnacja z tego uprawnienia spowoduje, że konsola będzie bezużyteczna.
źródło
Istnieje świetny sposób, aby umożliwić użytkownikom dostęp do określonego zasobnika bez znajomości innych zasobników. Zasady grupy podobne do przedstawionych poniżej umożliwiają użytkownikom wyświetlanie tylko „zasobnika a”. Jedynym haczykiem jest to, że użytkownik będzie mógł uzyskać dostęp do zasobnika tylko wtedy, gdy połączy się z danym punktem końcowym zasobnika. W poniższym przykładzie będzie to bucket-a.s3.amazonaws.com. Aby to nastąpiło, zasobnik może również mieć zezwolenie na „Użytkownicy uwierzytelnieni”.
Ta metoda została przetestowana z programem Cyberduck w systemie Mac OS / X i przy użyciu pakietu s3cmd
źródło
Nie wiesz, dlaczego żadna odpowiedź nie została zaznaczona?
Podzielmy każde oświadczenie polityczne na podstawie powyższych rozwiązań:
Niniejsze oświadczenie o zasadach od ma zastosowanie do zawartości zasobnika, ale nie samego złotówki. Prawdopodobnie nie o to chodziło w pytaniu, ponieważ nie możesz zobaczyć, co jest w wiadrze.
Ta zasada dwóch instrukcji wywodząca się z daje dostęp tylko do odczytu do zasobnika at (
arn:aws:s3:::your_bucket_here/
) tylko do odczytu , ale nadal zezwala na operacje CRUD na zawartości zasobnika (arn:aws:s3:::your_bucket_here/*
).Jednak polityka zawiera poniższe oświadczenie, które pozwala użytkownikowi zobaczyć wszystkie zasobniki w punkcie końcowym. Jest to prawdopodobnie nie co pytanie prosiłem.
Jednak powyższe bardzo przydatne, jeśli używasz klienta przeglądającego sklep S3. Jeśli twój klient uzyskuje dostęp do sklepu, a nie bezpośrednio do zasobnika, potrzebujesz dostępu do listy zasobników w katalogu głównym.
źródło
Prawdopodobnie najprostszy przypadek użycia:
źródło
This policy contains the following error: The policy must contain a valid version string
(listing included)
znaczeniu wypisywania tylko tego zasobnika, do którego użytkownik może się dostać? Jak dotąd (i według wszystkich innych odpowiedzi) wygląda na to, że AWS nie pozwoli ci tego zrobić.Jest na to łatwy sposób lub obejście za pomocą organizacji AWS. Organizacja AWS pozwala na posiadanie wielu kont użytkowników. Twoje główne konto może mieć wiele kont AWS (Sub) i wszelkie usługi (s3 / EC2 / *), które zostaną dodane do dowolnego konta AWS, tylko te zasoby będą widoczne.
Zobacz https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/
Organizacja na stronie Moje konto
źródło
Znalazłem takie rozwiązanie:
AWS FLOW:
Zasady dotyczące zasobnika:
Zasady dotyczące uprawnień:
aws iam get-user -–user-name NAZWA-UŻYTKOWNIKA --profile = ExampleProfile
aws iam get-role --role-name NAZWA-ROLI --profile = ExampleProfile
Źródło: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
PS, uważaj na politykę zasobnika, możesz pozostać poza domem bez uprawnień
źródło
Jak zostało to dobrze omówione powyżej, umieszczenie tylko jednego zasobnika na konsoli nie jest możliwe. Ale jeśli dostęp do zasobnika S3 jest powiązany z uprawnieniem, uprawnienia mogą uzyskać bezpośredni dostęp do zasobnika, jeśli jest dostępny adres URL zasobnika. Adres URL segmentu S3 będzie wyglądał następująco:
https://s3.console.aws.amazon.com/s3/buckets/BucketName
Gdzie BucketName to nazwa zasobnika, do którego uprawnienia mają dostęp
źródło
Udało mi się uzyskać następującą pracę. Oznaczało to, że lista innych zasobników otrzymała komunikat o odmowie dostępu. Ale nadal mogłem zobaczyć zasobnik, który chciałem, jeśli połączyłem się z nazwą zasobnika ustawioną jako ścieżka.
Użyłem Cyberducka do przetestowania tego połączenia.
źródło
Chociaż nie jest możliwe ograniczenie
s3:ListAllMyBuckets
działania do określonych zasobników, ponieważ w celu obejścia można wysłać im adres URL konsoli dla określonego zasobnika, np.https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/
Źródło: Ograniczająca lista zasobników S3 z konsoli S3
Aby to zrobić, musisz określić następujący dokument zasad dla danego użytkownika lub grupy:
Gdzie
my-bucket-1
imy-bucket-2
są twoje zasobniki, aby dać dostęp do odczytu i zapisu.Związane z:
źródło
Wypróbuj tę zasadę. Użytkownik nie może podać żadnego zasobnika, musi użyć bezpośredniego linku do dozwolonego zasobnika.
Na przykład: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview
źródło
Podobnie jak inne opisane powyżej:
Tutaj jest jednak brakujący element. Chociaż nie jest możliwy dostęp do zasobnika przez S3-> Home, możliwy jest dostęp tylko do pożądanego zasobnika poprzez bezpośrednie łącze.
Więcej informacji znajdziesz w następującym poście:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/
źródło
Poniższe rozwiązanie zadziałało dla mnie. Chciałem politykę dostępu do grantu do konkretnego użytkownika my_iam_user w konkretnym wiadra my-s3-wiadro .
Ta zasada pozwala mojemu użytkownikowi wyświetlać, usuwać i umieszczać pliki w określonym segmencie s3.
źródło
Po prostu dodaję podobną potrzebę, rozwiązaną przez to:
źródło
Używam następujących rzeczy, aby ukryć zawartość wiadra przed innymi użytkownikami. Pomaga to nie tylko ukryć inne zasobniki (nie używaj ListAllMyBuckets), ale także foldery w tym samym zasobniku, gdy tworzysz jeden zasobnik, ale chcesz mieć w nim podfoldery przypisujące odpowiednie uprawnienia użytkownikowi IAM / podfolderowi.
Poniższe zasady mają zastosowanie do grupy IAM i wszyscy użytkownicy są w tej grupie. Musisz wziąć
aws:userid
i utworzyć podfolder o tej samej nazwie w wiadrze.Identyfikator użytkownika można pobrać:
aws iam get-user --user-name "user_name_for_folder_access":
źródło
Miłym prostym rozwiązaniem, które wymyśliliśmy, jest zablokowanie użytkownikowi logowania się do katalogu głównego. Dlatego muszą zalogować się ze zdalną ścieżką ustawioną na żądany folder.
źródło
Nie, obecnie nie jest możliwe ograniczenie użytkowników do przeglądania selektywnych zasobników w katalogu głównym lub gdziekolwiek indziej. W tej chwili masz tylko te 3 opcje.
Postanowiłem poprosić klienta o jawne użycie nazwy zasobnika.
źródło
Szczegóły podaje Amazon na http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket
źródło
To zadziałało idealnie dla mnie. Użytkownik może przesyłać, pobierać i pobierać listę plików, ale nie będzie mógł wyświetlać plików z innego zasobnika.
źródło
Dodaj
Deny
klauzulę dotyczącą zasobników, do których nie chcesz mieć dostępu. Pamiętaj, że nadal mogą być na liście, ale nie będziesz mieć dostępu do ich zawartości.źródło