Wie gebe ich Anmeldeinformationen an, wenn ich eine Verbindung zu boto3 S3 herstelle?

96

Auf boto habe ich meine Anmeldeinformationen angegeben, wenn ich eine Verbindung zu S3 hergestellt habe:

import boto
from boto.s3.connection import Key, S3Connection
S3 = S3Connection( settings.AWS_SERVER_PUBLIC_KEY, settings.AWS_SERVER_SECRET_KEY )

Ich könnte dann S3 verwenden, um meine Operationen auszuführen (in meinem Fall ein Objekt aus einem Bucket löschen).

Mit boto3 sind alle Beispiele, die ich gefunden habe, solche:

import boto3
S3 = boto3.resource( 's3' )
S3.Object( bucket_name, key_name ).delete()

Ich konnte meine Anmeldeinformationen nicht angeben und daher schlagen alle Versuche mit InvalidAccessKeyIdFehler fehl .

Wie kann ich mit boto3 Anmeldeinformationen angeben?

Robert Brax
quelle
Diese Antwort könnte Ihnen helfen: stackoverflow.com/a/36913771/2681632
Ilja Everilä
1
Siehe den Abschnitt "Konfigurieren von Anmeldeinformationen" in der offiziellen Dokumentation: boto3.readthedocs.io/en/latest/guide/configuration.html
Mark B

Antworten:

147

Sie können eine Sitzung erstellen :

import boto3
session = boto3.Session(
    aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY,
    aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY,
)

Verwenden Sie dann diese Sitzung, um eine S3-Ressource abzurufen:

s3 = session.resource('s3')
Alasdair
quelle
22
funktioniert, ich werde es als Antwort nehmen. Warum um alles in der Welt dokumentieren sie dies nicht als den offensichtlichen Weg, dies zu tun? !!
Robert Brax
2
Wie oben in einem Kommentar erwähnt, dies ist in der Tat in der Dokumentation .
Moot
67

Sie können eine clientmit neuer Sitzung direkt wie unten erhalten.

 s3_client = boto3.client('s3', 
                      aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, 
                      aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY, 
                      region_name=REGION_NAME
                      )
Rajez
quelle
9
Dies funktioniert, um einen s3- Client zu erhalten , aber das OP wollte stattdessen eine s3- Ressource .
Alasdair
Ich stimme @Alasdair zu. Die Dokumente zeigen nicht, wie man etwas mit dem Kunden macht, und Sie auch nicht, daher sehe ich nicht, wie relevant diese Antwort ist.
Cerin
Ich habe es versucht, aber es gibt mir den Fehler "Anmeldeinformationen können nicht gefunden werden". Ich hatte zuvor den Ordner ~ / .aws entfernt, um dies zu testen, da ich weiß, dass Boto dort standardmäßig nach Creds sucht ...
Prathamesh Dhanawade
6

Dies ist älter, aber hier als Referenz zu platzieren. boto3.resource implementiert nur die Standardsitzung. Sie können die Sitzungsdetails von boto3.resource durchgehen.

Help on function resource in module boto3:

resource(*args, **kwargs)
    Create a resource service client by name using the default session.

    See :py:meth:`boto3.session.Session.resource`.

https://github.com/boto/boto3/blob/86392b5ca26da57ce6a776365a52d3cab8487d60/boto3/session.py#L265

Sie können sehen, dass es nur die gleichen Argumente wie Boto3.Session braucht

import boto3
S3 = boto3.resource('s3', region_name='us-west-2', aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY)
S3.Object( bucket_name, key_name ).delete()
DataDecay
quelle
4

Ich möchte die Antwort von @ JustAGuy erweitern. Die Methode, die ich bevorzuge, ist AWS CLIdas Erstellen einer Konfigurationsdatei. Der Grund dafür ist, dass bei der Konfigurationsdatei CLIoder SDKautomatisch nach Anmeldeinformationen im ~/.awsOrdner gesucht wird. Und das Gute ist, dass AWS CLIes in Python geschrieben ist.

Sie können Cli von Pypi bekommen, wenn Sie es noch nicht haben. Hier sind die Schritte, um cli vom Terminal aus einzurichten

$> pip install awscli  #can add user flag 
$> aws configure
AWS Access Key ID [****************ABCD]:[enter your key here]
AWS Secret Access Key [****************xyz]:[enter your secret key here]
Default region name [us-west-2]:[enter your region here]
Default output format [None]:

Danach können Sie auf botojede API zugreifen, ohne Schlüssel angeben zu müssen (es sei denn, Sie möchten andere Anmeldeinformationen verwenden).

x85ms16
quelle