发送策略示例 - Amazon Simple Email Service

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

发送策略示例

您可以使用发送授权指定允许委托发件人代表您发送电子邮件的精细条件。

发送授权的特定条件

条件是语句中有关权限的任何限制。语句中指定条件的部分可能为各部分中最为详尽的部分。密钥是作为访问限制基础的具体特征,例如,请求的日期和时间。

您需使用条件和密钥一起明确说明限制。例如,如果需要限制委托发件人,使其不能在 2019 年 7 月 30 日后代表您对 Amazon SES 发出请求,则可以使用名为 DateLessThan 的条件。您使用的密钥名为 aws:CurrentTime,并将其值设置为 2019-07-30T00:00:00Z

您可以使用《IAM 用户指南》中的可用键部分列出的任何 AWS 适用键,也可以使用在发送授权策略中有用的以下任一特定于 SES 的键:

条件键

描述

ses:Recipients

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

ses:FromAddress

限制“发件人”地址。

ses:FromDisplayName

限制用作“发件人”显示名称的字符串的内容 (有时称为“易记发件人”)。例如,“John Doe <johndoe@example.com>”的显示名称为 John Doe。

ses:FeedbackAddress

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

您可以将 StringEqualsStringLike 条件与 Amazon SES 密钥一起使用。这些条件用于区分大小写的字符串匹配。对于 StringLike,值可以在字符串中的任何位置包括多字符匹配的通配符 (*) 或单字符匹配的通配符 (?)。例如,下列条件指定委托发件人只能从以 invoicing 开头并以 @example.com 结尾的“发件人”地址发送电子邮件:

"Condition": { "StringLike": { "ses:FromAddress": "invoicing*@example.com" } }

您还可以使用 StringNotLike 条件来防止委托发件人从某些电子邮件地址发送电子邮件。例如,您可以通过在您的策略语句中包含以下条件,禁止从 admin@example.com 以及类似地址(例如 "admin"@example.comadmin+1@example.comsender@admin.example.com)发送邮件:

"Condition": { "StringNotLike": { "ses:FromAddress": "*admin*example.com" } }

有关如何指定条件的更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:条件

指定委托发件人

主体(即要授予权限的实体)可以是 AWS 账户、AWS Identity and Access Management (IAM) 用户或 AWS 服务。

下面的示例介绍一个简单策略,它允许 AWS ID 123456789012 从已验证的身份 example.com(归 AWS 账户 888888888888 所有)发送电子邮件。此策略中的 Condition 语句仅允许委托人(即 AWS ID 123456789012)从地址 marketing+.*@example.com(其中 * 为发件人想要在 marketing+. 后添加的任意字符串)发送电子邮件。

{ "Id":"SampleAuthorizationPolicy", "Version":"2012-10-17", "Statement":[ { "Sid":"AuthorizeMarketer", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:888888888888:identity/example.com", "Principal":{ "AWS":[ "123456789012" ] }, "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Condition":{ "StringLike":{ "ses:FromAddress":"marketing+.*@example.com" } } } ] }

以下示例策略向两个 IAM 用户授予从身份 example.com 发送电子邮件的权限。IAM 用户通过其 Amazon 资源名称(ARN)来指定。

{ "Id":"ExampleAuthorizationPolicy", "Version":"2012-10-17", "Statement":[ { "Sid":"AuthorizeIAMUser", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:888888888888:identity/example.com", "Principal":{ "AWS":[ "arn:aws:iam::111122223333:user/John", "arn:aws:iam::444455556666:user/Jane" ] }, "Action":[ "ses:SendEmail", "ses:SendRawEmail" ] } ] }

以下示例策略向 Amazon Cognito 授予从身份 example.com 发送电子邮件的权限。

{ "Id":"ExampleAuthorizationPolicy", "Version":"2012-10-17", "Statement":[ { "Sid":"AuthorizeService", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:888888888888:identity/example.com", "Principal":{ "Service":[ "cognito-idp.amazonaws.com" ] }, "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Condition": { "StringEquals": { "aws:SourceAccount": "888888888888", "aws:SourceArn": "arn:aws:cognito-idp:us-east-1:888888888888:userpool/your-user-pool-id-goes-here" } } } ] }

以下示例策略向 AWS 组织中的所有账户授予从身份 example.com 发送电子邮件的权限。AWS 组织使用 PrincipalOrgID 全局条件键来指定。

{ "Id":"ExampleAuthorizationPolicy", "Version":"2012-10-17", "Statement":[ { "Sid":"AuthorizeOrg", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:888888888888:identity/example.com", "Principal":"*", "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Condition":{ "StringEquals":{ "aws:PrincipalOrgID":"o-xxxxxxxxxxx" } } } ] }

限制“发件人”地址

如果您使用的是已验证的域,则可能需要创建一个策略,以便只允许委托发件人从指定电子邮件地址发送电子邮件。要限制“发件人”地址,您可设置 ses:FromAddress 条件的键。以下策略允许 AWS 账户 ID 123456789012 从身份 example.com 发送电子邮件,但只能从电子邮件地址 sender@example.com 发送。

{ "Id":"ExamplePolicy", "Version":"2012-10-17", "Statement":[ { "Sid":"AuthorizeFromAddress", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:888888888888:identity/example.com", "Principal":{ "AWS":[ "123456789012" ] }, "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Condition":{ "StringEquals":{ "ses:FromAddress":"sender@example.com" } } } ] }

限制主体发送电子邮件的时间

您还可以配置发件人授权策略,限制委托发件人只能在一天的特定时间范围或在特定的日期范围内发送电子邮件。例如,如果您计划在 2021 年 9 月发送电子邮件广告,则可以使用以下策略限制主体只能在此月发送电子邮件。

{ "Id":"ExamplePolicy", "Version":"2012-10-17", "Statement":[ { "Sid":"ControlTimePeriod", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:888888888888:identity/example.com", "Principal":{ "AWS":[ "123456789012" ] }, "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Condition":{ "DateGreaterThan":{ "aws:CurrentTime":"2021-08-31T12:00Z" }, "DateLessThan":{ "aws:CurrentTime":"2021-10-01T12:00Z" } } } ] }

限制电子邮件发送操作

发件人可使用两种操作通过 Amazon SES 发送电子邮件:SendEmailSendRawEmail,具体取决于发件人想要对电子邮件格式的控制程度。通过发送授权策略,您可以限制委托发件人使用两种操作中的一种。但是,许多身份所有者都会将电子邮件发送调用的具体方式交给委托发件人决定,也就是在策略中同时启用这两种操作。

注意

如果您允许委托发件人经由 SMTP 接口访问 Amazon SES,则必须至少选择 SendRawEmail

如果您的使用案例中需要限制操作,则可在发送授权策略中仅包括一种操作。以下示例向您说明如何限制仅使用 SendRawEmail 操作。

{ "Id":"ExamplePolicy", "Version":"2012-10-17", "Statement":[ { "Sid":"ControlAction", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:888888888888:identity/example.com", "Principal":{ "AWS":[ "123456789012" ] }, "Action":[ "ses:SendRawEmail" ] } ] }

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

某些电子邮件客户端显示邮件发送者的易记名称 (如果电子邮件标头中提供) 而不是实际的“发件人”地址。例如,“John Doe <johndoe@example.com>”的显示名称为 John Doe。例如,您可能是从 user@example.com 发送电子邮件,但您希望收件人看到该电子邮件来自 Marketing 而不是来自 user@example.com。以下策略允许 AWS 账户 ID 123456789012 从身份 example.com 发送电子邮件,但条件是“From”地址的显示名称必须包含 Marketing

{ "Id":"ExamplePolicy", "Version":"2012-10-17", "Statement":[ { "Sid":"AuthorizeFromAddress", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:888888888888:identity/example.com", "Principal":{ "AWS":[ "123456789012" ] }, "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Condition":{ "StringLike":{ "ses:FromDisplayName":"Marketing" } } } ] }

使用多个语句

发送授权策略可以包含多个语句。以下示例策略包含两个语句。第一条语句授权两个 AWS 账户 从 sender@example.com 发送电子邮件,条件是“From”地址和反馈地址都必须使用 example.com 域。第二条语句授权 IAM 用户从 sender@example.com 发送电子邮件,条件是收件人的电子邮件地址使用 example.com 域。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AuthorizeAWS", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:999999999999:identity/sender@example.com", "Principal":{ "AWS":[ "111111111111", "222222222222" ] }, "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Condition":{ "StringLike":{ "ses:FromAddress":"*@example.com", "ses:FeedbackAddress":"*@example.com" } } }, { "Sid":"AuthorizeInternal", "Effect":"Allow", "Resource":"arn:aws:ses:us-east-1:999999999999:identity/sender@example.com", "Principal":{ "AWS":"arn:aws:iam::333333333333:user/Jane" }, "Action":[ "ses:SendEmail", "ses:SendRawEmail" ], "Condition":{ "ForAllValues:StringLike":{ "ses:Recipients":"*@example.com" } } } ] }