Amazon SES 中的 Identity and Access Management - Amazon Simple Email Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon SES 中的 Identity and Access Management

您可以将 AWS Identity and Access Management(IAM)与 Amazon Simple Email Service(Amazon SES)结合使用,以指定用户、组或角色可以执行的 SES API 操作。(在本主题中,我们将这些实体统称为用户。) 您还可以控制用户可对电子邮件的“发件人”、收件人和“退回路径”地址使用的电子邮件地址。

例如,您可以创建一个 IAM 策略,允许组织中的用户发送电子邮件,但是不允许其执行管理操作(例如检查发送统计数据)。又例如,您可以编写一个策略,允许用户通过 SES 从您的账户发送电子邮件,但只在他们使用特定的“发件人”地址时才能这样做。

要使用 IAM,您可以定义一个 IAM 策略(一个用于显式定义权限的文档),然后将该策略附加到用户。要了解如何创建 IAM 策略,请参阅 IAM 用户指南。除了应用您在策略中设定的限制之外,用户与 SES 交互的方式或 SES 执行请求的方式没有变化。

注意
  • 如果您的账户在 SES 沙盒中,其限制可能会阻止实施其中一些策略 – 请参阅请求生产环境访问权限

  • 您还可以使用发送授权策略控制对 SES 的访问。不过,IAM 策略限制各个用户可执行的操作,发送授权策略限制可以使用各个经验证的身份的方式。此外,只有发送授权策略可以授予跨账户访问权限。有关发送授权的更多信息,请参阅使用 Amazon SES 的发送授权

如果您正在查找有关如何为现有用户生成 SES SMTP 凭证的信息,请参阅获取 Amazon SES SMTP 凭证

创建用于访问 SES 的 IAM 策略

本节介绍如何将 IAM 策略专门用于 SES。要了解创建 IAM 策略的常规方式,请参阅 IAM 用户指南

有三个理由可能让您将 IAM 与 SES 结合使用:

  • 限制电子邮件发送操作。

  • 限制用户发送的电子邮件的“发件人”、收件人和“退回路径”地址。

  • 控制 API 使用的常规方面,如用户被允许调用其获权使用的 API 的时间段。

限制操作

要控制用户可执行的 SES 操作,您可以使用 IAM 策略的 Action 元素。您可以通过使用小写字符串 Action 作为 API 名称的前缀来将 ses: 元素设置为任何 SES API 操作。例如,您可以将 Action 设置为 ses:SendEmailses:GetSendStatisticsses:*(适用于所有操作)。

然后,根据 Action 来指定 Resource 元素,如下所示:

如果 Action 元素仅允许对电子邮件发送 API (即 ses:SendEmail 和/或 ses:SendRawEmail) 的访问:

  • 要允许用户从您的 AWS 账户 中的任何身份进行发送,请将 Resource 设置为 *

  • 要限制允许用户发送邮件所用的身份,请将 Resource 设置为允许用户使用的身份的 ARN。

如果 Action 元素允许对所有 API 的访问:

  • 如果您不希望限制用户发送邮件所用的身份,请将 Resource 设置为 *

  • 如果您希望限制用户发送邮件时可用的身份,则需要创建两个策略(或位于一个策略中的两个语句):

    • 其中一个语句的 Action 设置为允许的非电子邮件发送 API 的显式列表,Resource 设置为 *

    • 另一个语句的 Action 设置为电子邮件发送 API (ses:SendEmail 和/或 ses:SendRawEmail) 之一,Resource 设置为您要允许用户使用的身份的 ARN。

有关可用的 SES 操作的列表,请参阅 Amazon Simple Email Service API 参考。如果该用户将使用 SMTP 接口,您必须至少允许对 ses:SendRawEmail 的访问。

限制电子邮件地址

如果您要将用户限制到特定电子邮件地址,则可以使用一个 Condition 数据块。在 Condition 数据块中,您将使用条件键来指定条件,如 IAM 用户指南中所述。通过使用条件键,您可以控制以下电子邮件地址:

注意

这些电子邮件地址条件键仅适用于下表中记录的 API。

条件键

描述

API

ses:Recipients

限制收件人地址,这包括“收件人”、“抄送”和“密件抄送”地址。

SendEmail, SendRawEmail

ses:FromAddress

限制“发件人”地址。

SendEmail, SendRawEmail, SendBounce

ses:FromDisplayName

限制用作显示名称的“发件人”地址。

SendEmail, SendRawEmail

ses:FeedbackAddress

限制“退回路径”地址,这是供退回邮件和投诉通过电子邮件反馈转发发送给您的地址。有关电子邮件反馈转发的信息,请参阅通过电子邮件接收 Amazon SES 通知

SendEmail, SendRawEmail

通过 SES API 版本进行限制

通过在条件中使用 ses:ApiVersion 键,您可以根据 SES API 的版本限制对 SES 的访问。

注意

SES SMTP 接口使用 SES API 版本 2 的 ses:SendRawEmail

限制常规 API 使用

通过在条件中使用 AWS 范围的键,您可以基于一些因素(例如允许用户访问 API 的日期和时间)来限制对 SES 的访问。SES 仅实施以下 AWS 范围的策略键:

  • aws:CurrentTime

  • aws:EpochTime

  • aws:SecureTransport

  • aws:SourceIp

  • aws:SourceVpc

  • aws:SourceVpce

  • aws:UserAgent

  • aws:VpcSourceIp

有关这些键的更多信息,请参阅 IAM 用户指南

SES 的 IAM 策略示例

本主题提供允许用户仅在特定条件下访问 SES 的策略的示例。

允许对所有 SES 操作的完全访问

以下策略允许用户调用任何 SES 操作。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ses:*" ], "Resource":"*" } ] }

允许仅访问 SES API 版本 2

以下策略允许用户只调用 API 版本 2 的 SES 操作。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ses:*" ], "Resource":"*", "Condition": { "StringEquals" : { "ses:ApiVersion" : "2" } } } ] }

仅允许对电子邮件发送操作的访问

以下策略允许用户使用 SES 发送电子邮件,但不允许用户执行管理操作(如访问 SES 发送统计数据)。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Resource":"*" } ] }

限制发送的时间段

以下策略允许用户仅在 2018 年 9 月期间调用 SES 电子邮件发送 API。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Resource":"*", "Condition":{ "DateGreaterThan":{ "aws:CurrentTime":"2018-08-31T12:00Z" }, "DateLessThan":{ "aws:CurrentTime":"2018-10-01T12:00Z" } } } ] }

限制收件人地址

以下策略允许用户调用 SES 电子邮件发送 API,但仅允许发送到 example.comStringLike 区分大小写)域中的收件人地址。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Resource":"*", "Condition":{ "ForAllValues:StringLike":{ "ses:Recipients":[ "*@example.com" ] } } } ] }

限制“发件人”地址

以下策略允许用户调用 SES 电子邮件发送 API,但仅当“发件人”地址为 marketing@example.com 时才如此。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Resource":"*", "Condition":{ "StringEquals":{ "ses:FromAddress":"marketing@example.com" } } } ] }

以下策略允许用户调用 SendBounce API,但仅当“发件人”地址为 bounce@example.com 时才如此。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ses:SendBounce" ], "Resource":"*", "Condition":{ "StringEquals":{ "ses:FromAddress":"bounce@example.com" } } } ] }

限制电子邮件发件人的显示名称

以下策略允许用户调用 SES 电子邮件发送 API,但仅当“发件人”地址的显示名称包含 MarketingStringLike 区分大小写)时才如此。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Resource":"*", "Condition":{ "StringLike":{ "ses:FromDisplayName":"Marketing" } } } ] }

限制退回邮件和投诉反馈的目标

以下策略允许用户调用 SES 电子邮件发送 API,但仅当电子邮件的“退回路径”设置为 feedback@example.com 时才如此。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Resource":"*", "Condition":{ "StringEquals":{ "ses:FeedbackAddress":"feedback@example.com" } } } ] }