我在 Amazon SES 中发送来自 IAM 用户的电子邮件时,如何解决 554 "Access denied" 错误?

1 分钟阅读
0

当我在 Amazon Simple Email Service (Amazon SES) 中发送来自我的 AWS 身份和访问管理 (IAM) 用户的电子邮件时,我收到 554 "Access denied" 错误。

简短描述

您在 Amazon SES 中发送了一封来自 IAM 用户的电子邮件,但收到以下错误:

554 Access denied: User arn:aws:iam::123456789012:user/iam-user-name' is not authorized to perform ses:SendRawEmail' on resource `arn:aws:ses:eu-west-1:123456789012:identity/example.com'

要解决来自 Amazon SES 的 554 "Access denied" 错误,请检查以下内容:

  • 用户拥有发送电子邮件的正确策略和权限。
  • 发送授权政策未附加到电子邮件地址或域名。
  • IAM policy 中的资源元素设置为电子邮件地址身份的 ARN。
  • AWS Organizations 服务控制策略 (SCP) 未附加到用户。

解决方法

1.    打开 IAM console(IAM 控制台)。

2.    在 Policy summary(策略摘要)下方,查看以下内容:

IAM 用户有权发送电子邮件。例如,要允许用户执行电子邮件发送 API,您必须包括相关操作 (ses:SendEmail, ses:SendRawEmail, ses:SendTemplatedEmail, ses:SendBulkTemplatedEmail)。

IAM 用户有权从该身份发送电子邮件。如果您将 IAM 用户策略的 Resource 元素设置为 *,那么用户可以从所有身份发送电子邮件。如果 Resource 元素受到限制,请检查用户是否有两个策略,或者一个策略中有两个语句。第一个策略或声明的 Action element 必须设置为一个或多个 non-email-sending API。资源元素必须设置为 *。第二个策略或声明的 Action 元素必须设置为一个或多个电子邮件发送 API。资源元素必须设置为身份的 ARN。

以下是包含两个语句的 IAM policy 示例。该策略允许用户使用 GetSendStatisticsGetSendQuota 类型的 non-email-sending API,限制 SendEmailSendRawEmail 类型的 email-sending API 只能从域发送。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ses:GetSendStatistics",
        "ses:GetSendQuota"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ses:SendEmail",
        "ses:SendRawEmail"
      ],
      "Resource": "arn:aws:ses:eu-west-1:123456789012:identity/example.com"
    }
  ]
}

3.    检查电子邮件地址或域名是否附加了阻止用户发送电子邮件的发送授权政策。

4.    如果您将电子邮件地址身份与域身份分开验证,则必须将Resource 元素设置为电子邮件地址身份的 ARN。有关更多信息,请参阅在 Amazon SES 中创建和验证身份

5.    检查用户是否继承了 Organizations SCP 政策。SCP 可以阻止用户发送电子邮件。例如,用户继承了一个 Deny 语句来使用 Amazon SES,或者用户只能访问某些 AWS 或 Amazon SES Regions。

注意:Amazon SES 简单邮件传输协议 (SMTP) 凭证对于每个 AWS 账户都是唯一的,并且特定于一个区域。


相关信息

Amazon SES 中的身份和权限管理

Amazon SES API 参考

AWS 官方
AWS 官方已更新 2 年前