当前位置: 首页 > 知识库问答 >
问题:

将AWS角色传递给使用默认boto3配置的应用程序

易飞文
2023-03-14

我有一个aws设置,它要求我承担角色并获得相应的凭据,以便写入s3。例如,要使用aws cli编写,我需要使用--profile readwrite标志。如果我自己用boot编写代码,我将通过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\u profileenv变量,并且它显然“工作”在boto3.Session()方面。profile\u name与变量匹配,但应用程序仍然不会写入s3。

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

共有2个答案

曾河
2023-03-14

我认为内森·威廉姆斯在评论中也给出了我问题的正确答案。

在我的具体案例中,考虑到我必须从python启动代码,并且有点担心设置AWS设置可能会溢出到其他操作中,我使用了boto3具有DEFAULT\u SESSIONsingleton这一事实,每次都使用它,并使用一个承担适当角色的会话重写它:

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

(这里,S3Hook是气流的s3处理对象)。在那之后(在同一个运行时),一切都运行得很好

王曜文
2023-03-14

在这里查看答案:使用boto3连接到CloudTop时如何选择AWS配置文件

您可以让boto3使用其他配置文件,如下所示:

rw = boto3.session.Session(profile_name='readwrite')
s3 = rw.resource('s3')
 类似资料:
  • 问题内容: 我有一个复杂的场景,对此我不知道如何处理: 我的ejbs在远程服务器上运行。 我的Web应用程序在另一台服务器上运行。 我有一个ApplicationContext,根据域,语言,国家等而有所不同。 我希望以匿名方式将此应用程序上下文传递给远程EJB,以使开发人员不必使用ApplicationContext作为参数来调用其所有后端请求。 这是场景,可以说我有一个远程无状态EJB: 在前

  • 我使用预先签名的post/url上传到S3并从S3下载。预签名的url/post是通过Lambda函数中的boto3生成的(它是通过zappa部署的)。 当我添加我的和作为env变量时,效果非常好。然后,我删除了我的凭据,并向lambda添加了一个IAM角色,以完全访问S3存储桶。之后,lambda返回带有预先签名的URL和运行良好,但是当我想通过URL上传对象时,它返回一个错误。使用的密钥id,

  • myrole/tasks/main.yml myrole/defaults/main.yml 但是,当我将变量传递给我的角色时,它无法使用defaults/main.yml文件,并且得到以下错误: 似乎可以使用数组,但如果我使用哈希并希望访问带有item.xxx的变量,则返回此错误: 失败了!=>{“failed”:true,“msg”:“字段'args'具有无效值,该值似乎包含未定义的变量。错误

  • 我想使用Terraform为应用程序角色分配托管身份访问权限。 我发现了一个类似的过程,但它使用PowerShell。我想用Terraform来做这件事。 https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-to-assign-app-role-managed-

  • 问题内容: 我正在尝试将我的应用程序升级到新版本的Firebase。我仔细阅读了设置指南,并编辑了所有代码以匹配新语法。但是,当我运行该应用程序时,出现了这两个错误。 我 在AppDelegate中,并将GoogleServices- Info.plist导入到我的项目中。plist也具有所有正确的信息。其他人遇到这个问题或知道如何解决? 问题答案: 这是您的问题的答案: 要配置Firebase,

  • 问题内容: 我正在使用pm2启动我的应用程序,但无法将参数传递给它。我正在使用的命令是pm2 start app.js-dev。尽管这永远有效。 问题答案: 您可以按照此票证所述进行操作:https : //github.com/Unitech/pm2/issues/13 尽管如果通过环境,则可能需要考虑利用环境变量。使用此工具,您可以创建一个变量,该环境中的任何进程都可以访问该变量。 因此,您有