2017-05-11 3 views
2

ich zur Zeit in einer virtuellen Maschine zu erhalten Zugriff auf Amazon S3 versuche und Download von Dateien wie folgt:Boto3 Fehler: Die AWS Access Key Id Ihnen zur Verfügung gestellten nicht in unseren Aufzeichnungen existieren

s3 = boto3.resource('s3', 
     aws_access_key_id="xxxxxxxxxxx", 
     aws_secret_access_key="xxxxxxxxxxxxxxxxx") 
s3client = boto3.client('s3') 

bucket = s3.Bucket('bucketone') 

for obj in bucket.objects.all(): 
    s3client.download_file(bucket_name, obj.key, filename) 

Aber ich bin Fehlermeldung:

Was könnte ich falsch machen? Ich überprüfte mehrfach meine aws_access_key_id und aws_secret_access_key, aber immer noch den gleichen Fehler. Der gleiche Code lokal, aber nicht auf einer virtuellen Maschine, funktioniert auch auf einem anderen Computer. Es gibt einen Grund, warum ich in den Schlüsseln fest codiere, wie ich muss.

+0

Bitte überprüfen Sie, ob das hilft: http://stackoverflow.com/questions/39051477/the-aws-access-key-id-does-not-exist-in-our-records/41850256#41850256 –

+1

Sie Did versuchen, mit aws cli verbinden? Nachdem Sie aws configure ausgeführt haben, führen Sie aws s3 ls aus und prüfen Sie, ob es funktioniert. Versuchen Sie auch, einen Parameter region_name an 'boto3.resource' zu ​​übergeben. – iMil

+0

Beginnt Ihre Access-Key-ID mit "AKIA ..." oder ist es "ASIA ..."? –

Antwort

1

Sie müssen den Zugriff für die Boto3-Sitzung festlegen. Sie möchten Ihre Schlüssel nicht wirklich in Ihren Code einfügen. Was ich zuerst empfehlen würde, ist die Ausführung von 'aws configure' und das Setzen von aws_access_key_id und aws_secret_access_key in Ihrer .credentials-Datei. Dann im Code wie folgt vor:

session = boto3.Session(profile_name='name_of_your_profile') 

Wenn Sie nur das Standardprofil haben, können Sie das nicht tun müssen, oder für eine gute Maßnahme, einfach ausgedrückt:

session = boto3.Session(profile_name='default') 

Sobald Sie, dass in Ihr Code können Sie eine Verbindung s3 mit etablieren:

s3 = session.resource('s3') 
bucket = s3.Bucket('bucketone') 
for obj in bucket.objects.all(): 
    print(obj.key) 

ein Problem mit Ihrem Code gibt auch ist. Sie erstellen einen S3-Client. Der S3-Client verfügt nicht über eine Bucket-Methode oder -Eigenschaft. die gleiche Sache mit dem s3-Client zu tun, was Sie tun würden:

s3client = session.client('s3') 
response = s3client.get_object(Bucket='bucketone', key='your key') 

Sie können dann durch die Reaktion durchlaufen, die die Liste der Objekte zu sehen, in dem Eimer zurückgeführt wird.

Das sollte sich um Ihren Fehler kümmern.

0

Wenn Sie EC2/Lambda/etc. Sie erhalten temporary security credentials, was bedeutet, dass Sie AWS_SESSION_TOKEN Umgebungsvariable verwenden und es an Boto3 übergeben müssen.

Wird es weggelassen, wird InvalidAccessKeyId Fehler geworfen.

Verwandte Themen