web-dev-qa-db-ja.com

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で資格情報を指定するにはどうすればよいですか?

55
Robert Brax

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

以下のように、新しいセッションで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
                      )
39
Rajez

Boto3.resource()を使用しながら、資格情報を保存する方法は多数あります。私は自分でAWS CLIメソッドを使用しています。完璧に機能します。

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html?fbclid=IwAR2LlrS4O2gYH6xAF4QDVIH2Q2tzfF_VZ6loM3XfXsPAOR4qA-pX_qAILys

0
JustAGuy