Staje się:
Wystąpił błąd (odmowa dostępu) podczas wywoływania operacji ListObjects: odmowa dostępu
Kiedy próbuję pobrać folder z mojego wiadra S3.
Za pomocą tego polecenia:
aws s3 cp s3://bucket-name/data/all-data/ . --recursive
Uprawnienia do zasobnika wyglądają następująco:
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
] }
Co muszę zmienić, aby móc copy
i ls
skutecznie?
amazon-web-services
amazon-s3
user1411335
źródło
źródło
aws
dla jednego użytkownika i użyłem go w skrypcie bash o nazwie cronjob od innego użytkownika, co oznacza, że klucz dostępu i token dostępu były nieprawidłowe / nieustawione. Moim rozwiązaniem było bezpośrednie umieszczenie poświadczeń (AWS_ACCESS_KEY_ID
iAWS_SECRET_ACCESS_KEY
) w moim pliku skryptu bash, jak opisano tutaj .Odpowiedzi:
Dałeś pozwolenie na wykonywanie poleceń na obiektach wewnątrz zasobnika S3, ale nie udzieliłeś pozwolenia na wykonywanie jakichkolwiek działań na samym zasobniku.
Nieznaczna modyfikacja polityki wyglądałaby następująco:
Jednak prawdopodobnie daje to więcej uprawnień niż jest to potrzebne. Zgodnie z najlepszą praktyką AWS IAM przyznawania najmniejszych uprawnień wyglądałoby to mniej więcej tak:
źródło
"Resource": [ "arn:aws:s3:::bucketname/", "arn:aws:s3:::bucketname/*" ]
tak jak ja (tzn. Chcesz tylko ukośnik przed*
) - zajęło mi 4 długie godziny, zanim zdałem sobie sprawę, że ten błąd spowodował, że wszystkie mojelistObjects
telefony zawiodły ...Jeśli chcesz skopiować wszystkie obiekty zasobnika s3 za pomocą polecenia „aws s3 cp s3: // nazwa-zasobnika / dane / wszystkie-dane /. --Recursive”, jak wspomniałeś, oto bezpieczna i minimalna zasada, aby to zrobić:
Pierwsza instrukcja w tej polityce pozwala na umieszczenie obiektów w podkatalogu określonego zasobnika. Zasób musi być arn segmentu S3, a aby ograniczyć wyświetlanie tylko do podkatalogu w tym segmencie, można edytować wartość „s3: prefix”.
Druga instrukcja w tej polityce umożliwia pobieranie obiektów do zasobnika w określonym podkatalogu. Oznacza to, że wszystko w ścieżce „s3: // nazwa-zasobnika / dane / wszystkie-dane /” będzie można skopiować. Pamiętaj, że nie pozwala to na kopiowanie ze ścieżek nadrzędnych, takich jak „s3: // nazwa-zasobnika / dane /”.
To rozwiązanie jest specyficzne dla ograniczania użycia poleceń AWS CLI; jeśli chcesz ograniczyć dostęp S3 za pośrednictwem konsoli AWS lub interfejsu API, potrzebnych będzie więcej zasad. Proponuję zajrzeć tutaj: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/ .
Podobny problem do tego można znaleźć tutaj, co doprowadziło mnie do rozwiązania, które podaję. https://github.com/aws/aws-cli/issues/2408
Mam nadzieję że to pomoże!
źródło
ListBucket
do podklucza: stackoverflow.com/a/35952877/89218Musisz określić zasób dla zasobnika za pomocą
"arn:aws:s3:::bucketname"
lub"arn:aws:3:::bucketname*"
. Ta ostatnia jest preferowana, ponieważ umożliwia również manipulowanie przedmiotami wiadra. Zwróć uwagę, że nie ma ukośnika!Lista obiektów to operacja na Bucket. Dlatego
"s3:ListBucket"
konieczne jest podjęcie działań . Dodanie obiektu do Bucket jest operacją na Object. Dlatego"s3:PutObject"
potrzebne jest działanie . Z pewnością możesz chcieć dodać inne akcje, jeśli potrzebujesz.źródło
arn:aws:s3:::bucketname*
polega na tym, że umożliwia również dostęp doarn:aws:s3:::bucketname-with-suffix
Nie mogłem uzyskać dostępu do S3, ponieważ
Rozwiązanie:
rm -rf .aws/credentials
następnieaws
używa roli.źródło
Wystąpił ten sam błąd podczas korzystania z zasad jak poniżej, chociaż mam „s3: ListBucket” dla operacji s3: ListObjects.
Następnie naprawiłem to, dodając jedną linię „arn: aws: s3 ::: bucketname”
źródło
Wydawało mi się, że błąd jest spowodowany akcją „s3: ListObjects”, ale musiałem dodać akcję „s3: ListBucket”, aby rozwiązać problem „Odmowa dostępu do zasobnika ListObjects dla S3”
źródło
Miałem ten sam problem. Właśnie dodałem konfigurację poświadczeń:
do "~ / .aws / credentials" + zrestartuj terminal dla profilu domyślnego.
W przypadku wielu profili --profile arg należy dodać:
gdzie PROFILE_NAME :
Więcej informacji na temat konfigurowania poświadczeń i wielu profili można znaleźć tutaj
źródło
Wypróbowałem następujące:
To dało mi błąd:
Korzystanie z tego formularza zadziałało:
źródło
Wpadłem na podobne problemy, dla mnie problem polegał na tym, że miałem różne klucze AWS ustawione w moim bash_profile.
Odpowiedziałem na podobne pytanie tutaj: https://stackoverflow.com/a/57317494/11871462
Jeśli masz sprzeczne klucze AWS w swoim bash_profile, interfejs wiersza polecenia AWS domyślnie przyjmuje te.
źródło
Miałem ten problem i chciałem, aby użytkownik mógł pisać do określonej ścieżki
i problem został rozwiązany dzięki tej zmianie
źródło
Dodaję odpowiedź w tym samym kierunku, co zaakceptowana odpowiedź, ale z małymi (ważnymi) różnicami i dodaję więcej szczegółów.
Rozważ poniższą konfigurację:
Polityka udziela programową zapisu usuwania dostępu i jest podzielony na dwie części: działanie zapewnia uprawnień na poziomie wiadro, a druga
ListBucket
PutObject/DeleteObject
działania wymagają uprawnienia na obiektach wewnątrz wiadra.Pierwszy element Resource określa
arn:aws:s3:::<Bucket-Name>
dlaListBucket
działania, dzięki czemu aplikacje mogą wymienić wszystkie obiekty w wiadrze.Drugi element Resource określa
arn:aws:s3:::<Bucket-Name>/*
dlaPutObject
iDeletObject
działania dzięki czemu aplikacje mogą pisać lub usuwać żadnych obiektów w wiadrze.Rozdzielenie na dwie różne „arny” jest ważne ze względów bezpieczeństwa w celu określenia szczegółowych uprawnień na poziomie zasobnika i obiektu.
Zauważ, że gdybym określił tylko
GetObject
w drugim bloku, co by się stało, to w przypadku dostępu programistycznego otrzymałem błąd taki jak:Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.źródło
Podoba mi się to bardziej niż którakolwiek z poprzednich odpowiedzi. Pokazuje, jak używać formatu YAML i umożliwia użycie zmiennej do określenia zasobnika.
źródło