问题:连接到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指定凭据?
回答 0
您可以创建一个会话:
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
您可以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
这是旧的,但也将其放在这里供我参考。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
我想扩展@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(除非您想使用其他凭据)。
回答 4
在仍然使用boto3.resource()的情况下,有多种存储凭证的方法。我自己在使用AWS CLI方法。完美运作。