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

时间:2017-08-31 12:54:09

标签: python amazon-web-services amazon-s3 boto3

在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指定凭据?

6 个答案:

答案 0 :(得分:67)

您可以创建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')

答案 1 :(得分:33)

您可以直接获得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
                      )

答案 2 :(得分:8)

这是旧的,但也将其放在这里供我参考。 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()

答案 3 :(得分:2)

我想扩展@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(除非您想使用其他凭据)。

答案 4 :(得分:0)

有许多方法可以在仍使用boto3.resource()的情况下存储凭据。 我自己在使用AWS CLI方法。效果很好。

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

答案 5 :(得分:0)

您可以为密钥和访问密钥设置默认的 aws 环境变量 - 这样您就不需要更改默认的客户端创建代码 - 尽管如果您有非默认凭据,最好将其作为参数传递