Kiedy po prostu uruchamiam następujący kod, zawsze pojawia się ten błąd.
s3 = boto3.resource('s3')
bucket_name = "python-sdk-sample-%s" % uuid.uuid4()
print("Creating new bucket with name:", bucket_name)
s3.create_bucket(Bucket=bucket_name)
Zapisałem plik poświadczeń w
C:\Users\myname\.aws\credentials
, skąd Boto powinien przeczytać moje referencje.
Czy moje ustawienie jest złe?
Oto wynik z boto3.set_stream_logger('botocore', level='DEBUG')
.
2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Skipping environment variable credential check because profile name was explicitly set.
2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Looking for credentials via: env
2015-10-24 14:22:28,773 botocore.credentials [DEBUG] Looking for credentials via: shared-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: config-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: ec2-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: boto-config
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: iam-role
boto3.set_stream_logger('botocore', level='DEBUG')
przed kodem? Pokaże, gdzie szuka poświadczeń.HOME
aby wskazywałaC:\Users\myname
lub ustaw,AWS_SHARED_CREDENTIALS_FILE
aby wskazywała bezpośrednio na plik poświadczeń.botocore.exceptions.NoRegionError: You must specify a region.
* mój plik konfiguracyjny ↓ znajduje się w tym samym folderze co moje referencje.[default] ap-northeast-1
Odpowiedzi:
spróbuj ręcznie określić klucze
Upewnij się, że nie podajesz ACCESS_ID i ACCESS_KEY bezpośrednio w kodzie ze względów bezpieczeństwa. Rozważ użycie konfiguracji środowiska i wstrzyknięcie ich do kodu zgodnie z sugestią @Tiger_Mike.
W przypadku środowisk Prod rozważ użycie obrotowych kluczy dostępu: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey
źródło
.env
pliku (niezatwierdzone) byłoby idealne i byłoby lepsze niż konieczność wybierania z~/.aws/
folderu.Miałem ten sam problem i okazało się, że format mojego
~/.aws/credentials
pliku jest nieprawidłowy.Działało z plikiem zawierającym:
Pamiętaj, że nazwa profilu musi mieć postać „
[default]
”. Niektóre oficjalne dokumenty odnoszą się do profilu o nazwie „[credentials]
”, który dla mnie nie działał.źródło
aws configure
działa również, jeśli masz zainstalowany aws-cliJeśli szukasz alternatywnego sposobu, spróbuj dodać swoje poświadczenia za pomocą AmazonCLI
od typu terminala: -
następnie wprowadź swoje klucze i region.
źródło
Upewnij się, że plik ~ / .aws / credentials w systemie Unix wygląda następująco:
Twój skrypt w Pythonie powinien wyglądać następująco i będzie działać:
Źródło: https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration .
źródło
output = json
Jest zazwyczaj umieszczony w~/.aws/config
w[profile MyProfile1]
przekroju. Może nie działać, jeśli zostanie określony wcredentials
pliku.Te instrukcje dotyczą komputerów z systemem Windows z pojedynczym profilem użytkownika dla AWS. Upewnij się, że
~/.aws/credentials
plik wygląda takMusiałem ustawić
AWS_DEFAULT_PROFILE
zmienną środowiskową, abyprofile_name
znaleźć się w twoich poświadczeniach.Wtedy mój Python był w stanie się połączyć. np. stąd
źródło
Miałem również ten sam problem, można go rozwiązać, tworząc plik konfiguracyjny i poświadczający w katalogu domowym. Poniżej przedstawiam kroki, które wykonałem, aby rozwiązać ten problem.
Utwórz plik konfiguracyjny:
I w tym pliku wszedłem do regionu
Następnie utwórz plik poświadczeń:
Następnie wprowadź swoje poświadczenia
Po ustawieniu tego wszystkiego, mój plik Pythona do podłączenia wiadra. Uruchomienie tego pliku spowoduje wyświetlenie całej zawartości.
Możesz również skorzystać z poniższych linków:
źródło
od typu terminala: -
następnie wprowadź swoje klucze i region.
po tym wykonaj następny krok w dowolnym środowisku. W zależności od konta możesz mieć wiele kluczy. Może zarządzać wieloma środowiskami lub kluczami
źródło
Pracuję dla dużej korporacji i napotkałem ten sam błąd, ale potrzebowałem innego rozwiązania. Mój problem był związany z ustawieniami proxy. Skonfigurowałem serwer proxy, więc musiałem ustawić no_proxy na białą listę AWS, zanim mogłem wszystko uruchomić. Możesz to również ustawić w swoim skrypcie bash, jeśli nie chcesz mylić kodu Pythona z ustawieniami systemu operacyjnego.
Pyton:
Grzmotnąć:
Edycja: powyżej założono region S3 Wschodnie stany USA. W przypadku innych regionów: użyj s3. [Region] .amazonaws.com, gdzie region to coś w rodzaju us-east-1 lub us-west-2
źródło
no_proxy
na169.254.169.254
tak aby klient mógł dostać się do AWS usługi metadanych znaleźć profil instancji.Boto3 szuka poświadczeń w folderze, takim jak
Powinieneś zapisać dwa pliki w tym folderze
credentials
iconfig
.Możesz sprawdzić ogólną kolejność, w jakiej boto3 szuka poświadczeń w tym łączu . Zajrzyj do nagłówka podrzędnego Konfigurowanie poświadczeń .
źródło
Jeśli jesteś pewien, że poprawnie skonfigurowałeś swoje aws, po prostu upewnij się, że użytkownik projektu może czytać z ./aws lub po prostu uruchom swój projekt jako root
źródło
Jeśli masz wiele profili aws w
~/.aws/credentials
takich jak ...Wykonaj dwa kroki:
Utwórz taki, którego chcesz używać jako domyślnego, używając
export AWS_DEFAULT_PROFILE=Profile 1
polecenia w terminalu.Upewnij się, że wykonujesz powyższe polecenie w tym samym terminalu, z którego używasz boto3 lub otwierasz edytor. [Zrozum następujący scenariusz]
Scenariusz:
t1
it2
.t1
Uruchamiasz polecenie eksportu w i otwierasz JupyterLab lub inny zt2
, otrzymasz NoCredentialsError: Unable to locate credentials error.Rozwiązanie:
t1
a następnie otwórz JupyterLab lub dowolny inny z tego samego terminalat1
.źródło
Utwórz obiekt klienta S3 za pomocą swoich poświadczeń
Zawsze dobrze jest uzyskać poświadczenia ze środowiska operacyjnego
źródło