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

2024-06-28 11:09:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: keynamefromimportawssettingss3bucket
3条回答

您可以直接使用下面的新会话获得一个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
                      )

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

我想详述一下“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,而无需指定密钥(除非您想使用其他凭据)。

相关问题 更多 >