IAM应该怎么写才能让某个VPC只能通过SES发邮件?

How should I write IAM to make only a certain VPC can send mail via SES?

我在 EC2 实例上使用 Redash,我必须通过 Amazon SES 发送邀请邮件。
我想添加一个设置来限制邮件发件人在 Redash 实例所在的某个 VPC 内。

这是我的 SES IAM:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ses:SendRawEmail",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpce": "vpce-******"
                },
                "ForAnyValue:StringLike": {
                    "ses:Recipients": "*@mycompany.com"
                }
            }
        }
    ]
}

但是我无法发送任何邮件。我认为这是因为我在上面的代码中使用了 VPC 端点。 SES 尚不可用。
还有其他方法可以指定某个VPC吗?

这是一个有趣的挑战!

Amazon SES 界面在互联网上,因此理论上任何人都可以访问它。通常,策略限制使用调用 SES 的 IAM 用户或角色的 权限 来确定是否允许调用,而不是从调用的位置。

我假设您这样做是因为您只希望生产系统发送电子邮件,而不是 Dev/Test 系统。

但是,不可能通过 VPC 进行限制,因为 Amazon SES 对 VPC 的概念不可见。它只是通过互联网接收 API 个电话。

如果您的应用程序位于私有子网中并且通过 NAT 网关发送请求,那么您可以添加一个策略以根据 NAT 网关的 IP 地址进行限制。

您可以通过对 Allow 语句施加限制或添加 Deny 语句来做到这一点。

参见:AWS: Denies Access to AWS Based on the Source IP - AWS Identity and Access Management