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
我在 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