无法使用 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_ID
、SERVER_AWS_SECRET_ACCESS_KEY
和 SERVER_AWS_REGION
启动 aws-sdk 的新实例。
【讨论】:
paramstore 中的名称已经不同于常规的 aws cedential 声明。使用这些键创建 sdk 的新实例仍然不能解决问题。到目前为止,唯一的方法是在主应用程序中创建一个没有 sdk 的 boto3 对象。这意味着在主应用程序中冗余地创建所有必需的功能,这完全是低效的。 @DanielArvind 您的主应用程序中的某些地方可能会再次覆盖 sdk。不幸的是,我对 Python 不太熟悉,无法阅读您的代码。但我最好的选择是检查创建 SDK 新实例的代码。因为可能发生的情况是它是一个异步函数,并且您在 SDK 正确注入新配置之前引用了 SDK 的旧实例。以上是关于无法使用 python SDK 在 ECS fargate 作业上发送邮件,并在另一个 aws 帐户中使用经过验证的 SES 的凭据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SDK 为 ecs 服务的弹性伸缩策略设置最小和最大任务?
如何使用 IAM 角色通过 aws sdk (java) 从 ECS 容器调用 s3 存储桶