Naprawdę walczę w AWS, próbując dowiedzieć się, czego tu brakuje. Chciałbym to zrobić, aby użytkownik IAM mógł pobierać pliki z segmentu S3 - bez publicznego udostępniania plików - ale dostaję odmowę dostępu. Jeśli ktokolwiek zdoła dostrzec, co jest nie tak, będę oszołomiony.
Co zrobiłem do tej pory:
- Utworzono użytkownika o nazwie my-user (na przykład)
- Wygenerowano klucze dostępu dla użytkownika i umieściłem je w ~ / .aws w instancji EC2
- Utworzyłem zasadę segmentu, która, jak mam nadzieję, zapewnia dostęp mojemu użytkownikowi
- Wykonałem polecenie
aws s3 cp --profile my-user s3://my-bucket/thing.zip .
Zasady dotyczące wiader:
{
"Id": "Policy1384791162970",
"Statement": [
{
"Sid": "Stmt1384791151633",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/my-user"
}
}
]
}
Rezultat jest taki, A client error (AccessDenied) occurred: Access Denied
że mogę pobierać za pomocą tego samego polecenia i domyślnych kluczy dostępu (konto root?).
Próbowałem również dodać zasady użytkownika. Chociaż nie wiem, dlaczego byłoby to konieczne, myślałem, że to nie zaszkodzi, więc załączyłem to do mojego użytkownika.
{
"Statement": [
{
"Sid": "Stmt1384889624746",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Te same wyniki.
Kiedy napotkałem ten sam problem, okazało się, że AWS wymaga włączenia szyfrowania po stronie serwera. Więc następujące polecenie zadziałało dla mnie pomyślnie:
źródło
--sse aws:kms
to użycie „domyślnego” wiadra ...--sse-kms-key-id 0123-abc-etc
Nie jest jednak jasne, że aby użyć własnego klucza KMS, musisz mieć uprawnienia IAM, wkms:GenerateDataKey
przeciwnym razie nadal będziesz mieć dostęp odmowy.Nie poleciłbym opcji „Dowolny uwierzytelniony użytkownik AWS” wspomnianej przez Jamesa.
Powoduje to dodanie listy ACL na poziomie segmentu, która pozwala dowolnemu kontu AWS (nie tylko użytkownikom IAM) na wyświetlanie / usuwanie / modyfikację acls dla tego segmentu.
tj. publiczne odczyt / zapis dla każdego, kto ma konto aws.
źródło
Udało mi się to naprawić bez konieczności pisania zasad - z konsoli S3 (interfejs użytkownika) wybrałem wiadro, a na karcie uprawnień wybrałem opcję „Dowolny uwierzytelniony użytkownik AWS” i wystawiłem bilet na wszystkie pola.
AKTUALIZACJA: jak wskazano w komentarzach „Dowolny uwierzytelniony użytkownik AWS” to nie tylko użytkownicy na Twoim koncie, to tylko uwierzytelniony użytkownik AWS, używaj go ostrożnie
źródło
Nawet jeśli Twoje zasady IAM są poprawnie skonfigurowane, nadal możesz otrzymać błąd, taki jak z
An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
powodu wymagań MFA (Multi-Factor Authentication) na swoich poświadczeniach. Mogą cię zaskoczyć, ponieważ jeśli już zalogowałeś się do konsoli AWS, okaże się, że twoje dane uwierzytelniające działają poprawnie, a komunikat o błędzie odmowy dostępu z aws cli nie jest szczególnie pomocny.Jest już kilka dobrych instrukcji, jak skonfigurować MFA z aws cli:
Zasadniczo musisz uzyskać adres urządzenia MFA i wysłać go wraz z kodem z urządzenia, aby uzyskać tymczasowy token.
źródło
Po prostu włączyłem interfejs webUI i kliknąłem wiadro, a następnie poszedłem do uprawnień, a potem poszedłem do zasad. Kiedy go otworzyłem, po prostu kliknąłem Usuń. Zrobiłem to, ponieważ myślę, że była to również konfiguracja.
Wróciłem do głównej strony s3, a następnie kliknąłem wiadro i próbowałem go usunąć i zadziałało.
nawet gdy zrobiłem to za pomocą aws-cli
W każdym razie to działało dla mnie. Zasady dotyczące uprawnień powstrzymują cię przed usunięciem wiadra.
źródło
Po otrzymaniu tego błędu po prostu próbuję uruchomić:
aws s3 cp s3://[bucketName]/[fileName] .
w folderze, w którym nie miałem uprawnień. To głupie, ale zanim przejdziesz dalej, upewnij się, że jesteś właścicielem folderu, w którym się znajdujesz!
źródło
Problem pojawia się, gdy wstawisz nieprawidłowe nazwy zasobów lub obiektów. Miałem ten sam problem z boto3 (w moim przypadku była to nieprawidłowa nazwa segmentu)
źródło