Как указать учетные данные при подключении к boto3 S3?

В boto я указывал свои учетные данные при подключении к 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?

Ответ 1

Вы можете создать session:

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

Ответ 2

Вы можете получить 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
                      )

Ответ 4

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

Вы можете получить Cli из Pypi, если у вас его еще нет. Вот шаги, чтобы настроить Cli с терминала

$> 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, не указывая ключи (если вы не хотите использовать другие учетные данные).