Wenn ich einfach den folgenden Code ausführe, wird immer dieser Fehler angezeigt.
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)
Ich habe meine Anmeldeinformationsdatei in gespeichert
C:\Users\myname\.aws\credentials
, von wo aus Boto meine Anmeldeinformationen lesen sollte.
Ist meine Einstellung falsch?
Hier ist die Ausgabe von 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')
vor Ihrem Code hinzufügen ? Es wird angezeigt, wo nach Anmeldeinformationen gesucht wird.HOME
, dass sie auf Ihre Anmeldeinformationsdatei verweist ,C:\Users\myname
oderAWS_SHARED_CREDENTIALS_FILE
direkt darauf.botocore.exceptions.NoRegionError: You must specify a region.
* Meine Konfigurationsdatei ↓ befindet sich im selben Ordner wie meine Anmeldeinformationen.[default] ap-northeast-1
Antworten:
Versuchen Sie, die Schlüssel manuell anzugeben
Stellen Sie sicher, dass Sie Ihre ACCESS_ID und ACCESS_KEY aus Sicherheitsgründen nicht direkt in den Code aufnehmen. Erwägen Sie die Verwendung von Umgebungskonfigurationen und deren Einfügung in den von @Tiger_Mike vorgeschlagenen Code.
Verwenden Sie für Prod-Umgebungen rotierende Zugriffsschlüssel: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey
quelle
.env
Datei (nicht festgeschrieben) wäre ideal und besser, als aus einem~/.aws/
Ordner auswählen zu müssen .Ich hatte das gleiche Problem und stellte fest, dass das Format meiner
~/.aws/credentials
Datei falsch war.Es funktionierte mit einer Datei, die Folgendes enthielt:
Beachten Sie, dass der Profilname "
[default]
" sein muss. Einige offizielle Unterlagen verweisen auf ein Profil mit dem Namen "[credentials]
", das bei mir nicht funktioniert hat.quelle
aws configure
funktioniert auch, wenn Sie aws-cli installiert habenWenn Sie nach einer alternativen Möglichkeit suchen, versuchen Sie, Ihre Anmeldeinformationen mithilfe von AmazonCLI hinzuzufügen
vom Terminaltyp: -
Geben Sie dann Ihre Schlüssel und Ihre Region ein.
quelle
Stellen Sie sicher, dass Ihre Datei ~ / .aws / credentials unter Unix folgendermaßen aussieht:
Ihr Python-Skript sollte so aussehen und es wird funktionieren:
Quelle: https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration .
quelle
output = json
normalerweise~/.aws/config
in einem[profile MyProfile1]
Abschnitt platziert. Es funktioniert möglicherweise nicht, wenn escredentials
stattdessen in der Datei angegeben wird.Diese Anweisungen gelten für Windows-Computer mit einem einzelnen Benutzerprofil für AWS. Stellen Sie sicher, dass Ihre
~/.aws/credentials
Datei so aussiehtIch musste die
AWS_DEFAULT_PROFILE
Umgebungsvariable so einstellen , dassprofile_name
sie in Ihren Anmeldeinformationen gefunden wurde.Dann konnte sich mein Python verbinden. zB von hier
quelle
Ich hatte auch das gleiche Problem, es kann gelöst werden, indem eine Konfigurations- und Anmeldeinformationsdatei im Home-Verzeichnis erstellt wird. Unten sehen Sie die Schritte, die ich zur Lösung dieses Problems unternommen habe.
Erstellen Sie eine Konfigurationsdatei:
Und in dieser Datei habe ich die Region eingegeben
Erstellen Sie dann die Anmeldeinformationsdatei:
Geben Sie dann Ihre Anmeldeinformationen ein
Nachdem Sie alle diese eingestellt haben, dann meine Python-Datei, um Bucket zu verbinden. Wenn Sie diese Datei ausführen, werden alle Inhalte aufgelistet.
Sie können auch auf die folgenden Links verweisen:
quelle
vom Terminaltyp: -
Geben Sie dann Ihre Schlüssel und Ihre Region ein.
Verwenden Sie danach im nächsten Schritt eine beliebige Umgebung. Abhängig von Ihrem Konto können Sie mehrere Schlüssel haben. Kann mehrere Umgebungen oder Schlüssel verwalten
quelle
Ich arbeite für ein großes Unternehmen und bin auf denselben Fehler gestoßen, brauchte aber eine andere Lösung. Mein Problem hing mit den Proxy-Einstellungen zusammen. Ich hatte meinen Proxy eingerichtet, also musste ich meinen no_proxy auf Whitelist AWS setzen, bevor ich alles zum Laufen bringen konnte. Sie können es auch in Ihrem Bash-Skript festlegen, wenn Sie Ihren Python-Code nicht mit den OS-Einstellungen durcheinander bringen möchten.
Python:
Bash:
Bearbeiten: Die oben genannten nehmen eine Region US East S3 an. Für andere Regionen: Verwenden Sie s3. [Region] .amazonaws.com, wobei region so etwas wie us-east-1 oder us-west-2 ist
quelle
no_proxy
für169.254.169.254
so , dass der AWS - Client an den Metadatendienst bekommen konnte das Instanzprofil zu finden.Der boto3 sucht nach den Anmeldeinformationen im Ordner wie
Sie sollten zwei Dateien in diesem Ordner speichern
credentials
undconfig
.Vielleicht möchten Sie die allgemeine Reihenfolge überprüfen, in der boto3 unter diesem Link nach Anmeldeinformationen sucht . Schauen Sie unter der Unterüberschrift Configuring Credentials nach.
quelle
Wenn Sie sicher sind, dass Sie Ihre aws richtig konfigurieren, stellen Sie einfach sicher, dass der Benutzer des Projekts aus ./aws lesen kann, oder führen Sie Ihr Projekt einfach als Root aus
quelle
Wenn Sie mehrere aws-Profile in
~/.aws/credentials
wie ...Befolgen Sie zwei Schritte:
Erstellen Sie mit dem
export AWS_DEFAULT_PROFILE=Profile 1
Befehl im Terminal einen Befehl, den Sie standardmäßig verwenden möchten .Stellen Sie sicher, dass Sie den obigen Befehl im selben Terminal ausführen, von dem aus Sie boto3 verwenden, oder öffnen Sie einen Editor. [Verstehen Sie das folgende Szenario]
Szenario:
t1
und ant2
.t1
Wenn Sie den Exportbefehl in ausführen und JupyterLab oder einen anderen Befehl öffnent2
, wird NoCredentialsError angezeigt: Fehler beim Anmelden der Anmeldeinformationen nicht möglich.Lösung:
t1
und öffnen Sie JupyterLab oder ein anderes über dasselbe Terminalt1
.quelle