boto3 S3に接続するときに資格情報を指定するにはどうすればよいですか?


105

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


この答えはあなたを助けるかもしれない:stackoverflow.com/a/36913771/2681632
は、IljaEverilä

1
公式ドキュメントの「資格情報の構成」セクションを参照してください:boto3.readthedocs.io/en/latest/guide/configuration.html
Mark B

回答:


162

あなたはセッションを作成することができます:

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
動作します、私はそれを答えとして取ります。いったいなぜ彼らはこれをそれを行う明白な方法として文書化しないのですか?!!
ロバートブラックス2017

3
上記のコメントで述べたように、これ実際にはドキュメントにあります
Moot 2018年

70

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クライアントを取得するために機能しますが、OPは代わりにs3リソースを必要としていました。
アラスデール2018年

@Alasdairに同意します。ドキュメントには、クライアントで何かを行う方法が示されておらず、あなたも示されていません。そのため、この回答がどのように関連しているかわかりません。
セリン

私はこれを試してみましたが、それはerror..Iは以前に私が知っているように〜/ .awsはこれをテストするために、フォルダを削除していた私は、「資格証明書が見つかりません」を与えるがcredsをデフォルトの外観によるのboto意志...その
Prathamesh dhanawade

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からcliを取得できます。ターミナルから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にアクセスできます(別の資格情報を使用する場合を除く)。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.