利用IRSA和AWS SES从EKS Pods发送电子邮件
内容提要
本文介绍了如何使用IRSA配置EKS集群,在不同的AWS账户中使用Amazon SES发送电子邮件。IRSA允许Kubernetes服务账户扮演IAM角色,提高安全性、简化设置,并优化从Kubernetes pods发送电子邮件的工作流程。配置IRSA需要启用EKS集群的OIDC,并创建IAM策略、IAM角色和Kubernetes服务账户。跨账户访问SES资源需要建立信任策略和配置SES。最佳实践和安全注意事项也被提及。
延伸解读
IRSA 如何提升 EKS 邮件发送的安全性
传统方式需在 Pod 中存储 AWS 访问密钥,存在泄露风险。IRSA 通过 OIDC 联合身份,让 Kubernetes 服务账户扮演 IAM 角色,Pod 自动获取临时凭证。这实现了凭证隔离:每个 Pod 只能获取自身服务账户关联角色的凭证,无法访问其他 Pod 的凭证。同时,权限可精细控制到服务账户级别,遵循最小权限原则,且所有访问可通过 CloudTrail 审计。
跨账户访问 SES 的关键配置
当 SES 位于不同 AWS 账户时,需在 SES 账户中为发送者身份创建授权策略,允许 EKS 账户中的 IAM 角色发送邮件。同时,EKS 账户中的 IAM 角色信任策略需允许服务账户扮演。此外,SES 需验证发件人身份(沙箱环境还需验证收件人),并确保 IAM 策略中资源 ARN 正确指向 SES 账户中的身份。
沙箱与生产环境的差异及注意事项
新 AWS 账户默认处于 SES 沙箱环境,只能向已验证的收件人发送邮件,且发送者和接收者邮箱都需验证。生产环境中,收件人无需验证,但所有发件人身份(如 From、Return-Path)仍需验证。IAM 策略中,沙箱环境需包含收件人身份的 ARN,而生产环境则无需。迁移到生产环境需申请解除沙箱限制。
测试与验证邮件发送功能
部署一个使用配置了 IAM 角色的服务账户的 Pod,例如基于 amazon/aws-cli 镜像的测试 Pod。通过 kubectl exec 进入 Pod,使用 AWS CLI 的 ses send-email 命令发送测试邮件。需指定区域、发件人、源 ARN、收件人及邮件内容。成功收到邮件即验证配置正确。此方法可快速排查权限或配置问题。
Q&A
如何在EKS集群中配置IRSA以使用Amazon SES发送电子邮件?
需要启用EKS集群的OIDC,创建IAM策略和角色,并将IAM角色与Kubernetes服务账户关联。
IRSA的主要优点是什么?
IRSA提高了安全性,允许细粒度访问,提供凭证隔离和可审计性。
如何在跨AWS账户中访问SES资源?
需要建立信任策略,允许EKS账户的IAM角色访问不同账户中的SES资源。
在SES中发送电子邮件需要哪些配置?
需要验证发件人和收件人的电子邮件地址,并创建发送邮件身份的授权策略。
如何测试EKS集群中的邮件发送功能?
可以部署一个示例应用程序,并使用AWS CLI命令发送测试邮件来验证功能。
在使用SES的沙盒环境中,发件人和收件人需要做什么?
在沙盒环境中,发件人和收件人都需要在SES中进行验证。