Як вказати облікові дані при підключенні до boto3 S3?


104

На бото я вказував свої облікові дані під час підключення до S3 таким чином:

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

Потім я міг би використовувати S3 для виконання своїх операцій (у моєму випадку видалення об’єкта з сегмента).

З boto3 всі приклади, які я знайшов, такі:

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

Я не міг вказати свої облікові дані, і тому всі спроби не вдаються з InvalidAccessKeyIdпомилкою.

Як я можу вказати облікові дані за допомогою boto3?


Відповідь на це питання може допомогти вам: stackoverflow.com/a/36913771/2681632
Ilja Everilä

1
Дивіться розділ "Налаштування облікових даних" в офіційній документації: boto3.readthedocs.io/en/latest/guide/configuration.html
Марк Б

Відповіді:


159

Ви можете створити сеанс :

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

Потім використовуйте цей сеанс, щоб отримати ресурс S3:

s3 = session.resource('s3')

24
працює, я сприйму це як відповідь. Чому вони не документують це як очевидний спосіб зробити це? !!
Роберт Бракс,

3
Як уже згадувалося вище , в коментарі, це є насправді в документації .
Moot

69

Ви можете отримати clientновий сеанс безпосередньо, як показано нижче.

 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
                      )

9
Це працює для отримання клієнта s3 , але операційна система хотіла замість цього ресурс s3 .
Alasdair,

Я згоден з @Alasdair. У документах не показано, як щось робити з клієнтом, як і у вас, тому я не бачу, наскільки ця відповідь актуальна.
Черін

Я спробував це, але це видає мені помилку "Не вдається знайти облікові дані" ... Я раніше видалив папку ~ / .aws, щоб перевірити це, оскільки я знаю, що бото за замовчуванням шукатиме там
кредити

6

Це старше, але розміщення цього тут також для моєї довідки. boto3.resource лише реалізує сеанс за замовчуванням, ви можете пройти через деталі сеансу boto3.resource.

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

ви бачите, що для цього потрібні ті самі аргументи, що і для Boto3.Session

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()

5

Я хотів би розширити відповідь @ JustAGuy. Я віддаю перевагу використанню методу AWS CLIстворення конфігураційного файлу. Причина полягає в тому, що за допомогою конфігураційного файлу CLIабо SDKавтоматично буде шукати облікові дані в ~/.awsпапці. І добре, що цеAWS CLI написано на python.

Ви можете отримати кліп від pypi, якщо у вас його ще немає. Ось кроки для налаштування кліку з терміналу

$> 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]:

Після цього ви можете отримати доступ до botoбудь-якого з api без необхідності вказувати ключі (якщо ви не хочете використовувати інші облікові дані).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.