1

我有一个 aws 设置,需要我承担角色并获取相应的凭据才能写入 s3。例如,要写 with aws cli,我需要使用--profile readwriteflag。如果我自己使用引导编写代码,我将通过 承担角色sts,获取凭据并创建新会话。

但是,有很多应用程序和包依赖于 boto3 的配置,例如内部代码运行如下:

s3 = boto3.resource('s3')
result_s3 = s3.Object(bucket, s3_object_key)
result_s3.put(
                Body=value.encode(content_encoding),
                ContentEncoding=content_encoding,
                ContentType=content_type,
        )

从文档中,可以将 boto3 设置为使用(以及其他)AWS_PROFILEenv 变量使用默认配置文件,并且它显然在boto3.Session().profile_name与变量匹配的条件下“工作” - 但应用程序仍然不会写入 s3。

正确设置它们的最干净/正确的方法是什么?我试图从 sts 中提取凭证,并将它们写为 AWS_SECRET_TOKEN 等,但这对我不起作用......

4

2 回答 2

0

在这里查看答案: How to choose an AWS profile when using boto3 to connect to CloudFront

您可以让 boto3 像这样使用其他配置文件:

rw = boto3.session.Session(profile_name='readwrite')
s3 = rw.resource('s3')
于 2020-11-26T19:23:37.250 回答
0

我认为我的问题的正确答案是 Nathan Williams 在评论中分享的。

在我的特定情况下,鉴于我必须从 python 启动代码,并且有点担心设置可能会溢出到其他操作中的 AWS 设置,我使用了 boto3 具有DEFAULT_SESSION单例的事实,每次都使用,然后用一个承担适当角色的会话:

hook = S3Hook(aws_conn_id=aws_conn_id)  
boto3.DEFAULT_SESSION = hook.get_session()  

(这里,S3Hook 是气流的 s3 处理对象)。之后(在同一个运行时)一切正常

于 2020-12-01T22:32:40.807 回答