连接到 boto3S3时如何指定凭据?

在 boto 上,当以这样的方式连接到 S3时,我用来指定我的凭据:

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

然后,我可以使用 S3来执行我的操作(在我的例子中,从 bucket 中删除一个对象)。

在 boto3中,我发现的所有例子都是这样的:

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

我无法指定我的凭据,因此所有尝试都会失败,并出现 InvalidAccessKeyId错误。

如何使用 boto3指定凭据?

208574 次浏览

你可以创建一个 会议:

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

你可以直接得到一个带有新会话的 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
)

在仍然使用 boto3.resource ()的情况下,存储凭据的方法有很多。 我自己也在使用 AWS CLI 方法。

Https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html?fbclid=iwar2llrs4o2gyh6xaf4qdvih2q2tzff_vz6lom3xfxspaor4qa-px_qailys

我想详细解释一下“ 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,而不必指定密钥(除非您想使用不同的凭据)。

这个比较旧,但是放在这里也是为了我的参考。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()

您可以为 secret 和 access key 设置默认 aws env 变量-这样您就不需要更改默认的客户端创建代码-尽管如果您有非默认信用证,最好将其作为参数传递

If you rely on your .aws/credentials to store id and key for a user, it will be picked up automatically.

比如说

session = boto3.Session(profile_name='dev')
s3 = session.resource('s3')

如果您的 credentials文件包含以下内容,这将提取 Dev配置文件(用户) :

[dev]
aws_access_key_id = AAABBBCCCDDDEEEFFFGG
aws_secret_access_key = FooFooFoo
region=op-southeast-2