我正在尝试使用 Amazon Simple Email Service(Amazon SES)发送电子邮件,但我一直收到“未授权”错误。
简短描述
由于以下原因,可能会出现“未授权”错误:
- 您使用了错误的 AWS Identity and Access Management(IAM)用户或角色发送电子邮件。
- 您正在使用的 IAM 身份不具有 ses:SendEmail 或 ses:SendRawEmail 权限。
- IAM policy 或授权策略拒绝您获得 ses:SendEmail 或 ses:SendRawEmail 操作的 IAM 身份权限。
- IAM 权限边界不允许访问 Amazon SES。
- AWS Organizations 服务控制策略(SCP)不允许 Amazon SES 访问。
- 对于跨账户发送:发送身份的授权策略不允许 IAM 身份发送电子邮件。
要对授权错误进行故障排除,请执行这些步骤:
- 验证您是否使用正确的 IAM 身份发送电子邮件。
- 确保 IAM 身份拥有发送电子邮件的 ses:SendEmail 和 ses:SendRawEmail 权限。
- 检查 IAM policy 或授权策略中是否有任何阻止访问的拒绝语句。
- 检查您的 IAM policy 中允许的某项操作在权限边界内是否不被允许。
- 使用 IAM 控制台将所有必需的操作包括在权限边界中。
- 如果您使用 AWS Organizations,请确认您没有任何显式拒绝 Amazon SES 操作的 SCP。
- 对于跨账户发送,请检查发送身份的授权策略是否向 IAM 身份授予了所需的权限。
解决方法
检查 IAM 身份是否拥有 ses:SendEmail 和 ses:SendRawEmail 权限
确保您的 IAM 身份拥有发送电子邮件的正确权限。
请遵循以下步骤:
- 打开 IAM 控制台。
- 选择用于发送电子邮件的 IAM 用户或角色。
- 选择您用于发送电子邮件的 IAM 身份名称。
- 在您的 IAM 身份的 Permissions(权限)选项卡中,展开每个策略以查看其 JSON 策略文档。
- 搜索与 Amazon SES 访问相关的策略。然后,确认您拥有 ses:SendEmail 或 ses:SendRawEmail 操作的权限。
以下示例 IAM policy 允许 IAM 身份发送电子邮件:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ses:SendEmail",
"ses:SendRawEmail"
],
"Resource": "*"
}
]
}
**注意:**查看 SendEmail 和 SendRawEmail,了解您可以使用每种操作采取哪些发送操作的相关信息。如果 IAM policy 不存在,则创建一个 IAM policy 以授予您发送电子邮件的权限。
检查是否有任何阻止访问的拒绝语句
查看 IAM 策略中是否存在任何可能拒绝发送电子邮件的拒绝语句。
如果有拒绝语句,则根据以下各项检查阻止访问的条件:
- ses:Recipients
- ses:FromAddress
- ses:FromDisplayName
- ses:FeedbackAddress
- aws:CurrentTime
- aws:EpochTime
- aws:SecureTransport
- aws:SourceIp
- aws:UserAgent
确认 IAM 权限边界允许访问 Amazon SES
查看在尝试访问 Amazon SES 的 IAM 身份上设置的 IAM 权限边界。确认 IAM 权限边界允许访问 Amazon SES。有关更多信息,请参阅使用权限边界将责任委派给其他人。
检查是否有任何 AWS Organizations SCP 不允许 Amazon SES 访问
如果您使用的是 AWS Organizations,请查看 SPC 中是否有显式拒绝 ses:SendEmail 和 ses:SendRawEmail 或任何其他 Amazon SES 操作的语句。删除根据贵组织的安全策略显式拒绝 Amazon SES 操作的服务控制策略。
例如,以下策略拒绝对所有 Amazon SES 操作的访问:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": “ses:*”,
"Resource": "*"
}
]
}
检查 Amazon SES 中的发送授权策略是否向委托发件人授予权限
当您授权其他用户使用您拥有的身份发送电子邮件时,请检查授权策略是否具有正确的权限。此外,请检查是否存在任何显式拒绝语句。确保发件人在您验证身份所在的 AWS 区域中使用相同的 Amazon SES 端点。您必须将自己(身份所有者)和委托发件人从沙盒中移除,才能向未经验证的地址发送电子邮件。要查看、编辑或删除策略,请参阅管理您的发送授权策略。