连接到boto3 S3时如何指定凭据?


104

在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ä17年

1
请参阅官方文档中的“配置凭据”部分:boto3.readthedocs.io/en/latest/guide/configuration.html
Mark B

Answers:


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
如上文的评论中提到,这事实上的文档
辩论

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客户端,但是OP希望使用s3资源
阿拉斯代尔

我同意@Alasdair。这些文档没有显示如何与客户端进行任何操作,您也没有这样做,因此我看不出此答案的相关性。
塞林

我尝试了此操作,但它给了我“无法找到凭据”错误。.我之前已删除〜/ .aws文件夹进行测试,因为我知道默认情况下boto会在那寻找
信誉

6

这是旧的,但也将其放在这里供我参考。boto3.resource只是实现默认的Session,可以通过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创建配置文件。原因是使用配置文件时,CLISDK会自动在~/.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(除非您想使用其他凭据)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.