无法使用 python SDK 在 ECS fargate 作业上发送邮件,并在另一个 aws 帐户中使用经过验证的 SES 的凭据

Posted

技术标签:

【中文标题】无法使用 python SDK 在 ECS fargate 作业上发送邮件,并在另一个 aws 帐户中使用经过验证的 SES 的凭据【英文标题】:Unable to send mail on an ECS fargate job using python SDK with credentials of a verified SES in another aws account 【发布时间】:2021-04-02 12:27:25 【问题描述】:

我有一个在发送电子邮件的 Fargate ECS 中运行的 python 应用程序。我在另一个帐户中有经过验证的 SES。我正在尝试在 python 应用程序中使用这些凭据,该应用程序在与经过验证的 SES 不同的 aws 帐户中运行。它使用 aws python sdk 的 ses 模块来创建 boto3 ses 对象。 如果我在主应用程序中创建一个 boto3 ses 对象而不使用 sdk,则邮件可以工作。但是当我使用 sdk 时,它似乎在主帐户中使用 SES(它是沙盒),尽管我传递了经过验证的 SES 帐户的端点、访问和秘密访问密钥(这些作为安全字符串存储在我的主帐户的参数存储中) .

即使我提供已验证 SES 帐户的凭据,sdk 仍继续使用主帐户的 SES 的原因是什么?我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

这是因为 AWS Fargate 还将其自己的 AWS 环境注入到您的容器中,并且它将使用您为任务提供的执行角色的凭据。所以硬编码的环境会覆盖你的环境配置。

最快的解决方案是在参数存储中以不同的方式命名您的 SES 凭据。去寻找类似的东西

SERVER_AWS_ACCESS_KEY_ID=your-key
SERVER_AWS_SECRET_ACCESS_KEY=your-key
SERVER_AWS_REGION=your-region

而不是传统的 AWS 凭证声明(因为它会被覆盖)

AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-key
AWS_REGION=your-region

然后在您的代码中,您需要使用您刚刚保存的 SERVER_AWS_ACCESS_KEY_IDSERVER_AWS_SECRET_ACCESS_KEYSERVER_AWS_REGION 启动 aws-sdk 的新实例。

【讨论】:

paramstore 中的名称已经不同于常规的 aws cedential 声明。使用这些键创建 sdk 的新实例仍然不能解决问题。到目前为止,唯一的方法是在主应用程序中创建一个没有 sdk 的 boto3 对象。这意味着在主应用程序中冗余地创建所有必需的功能,这完全是低效的。 @DanielArvind 您的主应用程序中的某些地方可能会再次覆盖 sdk。不幸的是,我对 Python 不太熟悉,无法阅读您的代码。但我最好的选择是检查创建 SDK 新实例的代码。因为可能发生的情况是它是一个异步函数,并且您在 SDK 正确注入新配置之前引用了 SDK 的旧实例。

以上是关于无法使用 python SDK 在 ECS fargate 作业上发送邮件,并在另一个 aws 帐户中使用经过验证的 SES 的凭据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SDK 为 ecs 服务的弹性伸缩策略设置最小和最大任务?

阿里云云服务器ECS开发者工具包(SDK)

如何使用 IAM 角色通过 aws sdk (java) 从 ECS 容器调用 s3 存储桶

OpenCV Python FAR/FRR 中的人脸识别

AWS ECS 开发工具包。使用开发工具包为 ECS 集群注册新容器实例 (EC2)

无法在 ECS 优化的 AMI 中安装 Ansible