本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
发送策略示例
您可以使用发送授权指定允许委托发件人代表您发送电子邮件的精细条件。
以下条件和示例介绍如何编写策略来控制发送的不同方面:
发送授权的特定条件
条件是语句中有关权限的任何限制。语句中指定条件的部分可能为各部分中最为详尽的部分。密钥是作为访问限制基础的具体特征,例如,请求的日期和时间。
您需使用条件和密钥一起明确说明限制。例如,如果需要限制委托发件人,使其不能在 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 通知。
|
您可以将 StringEquals
和 StringLike
条件与 Amazon SES 密钥一起使用。这些条件用于区分大小写的字符串匹配。对于 StringLike
,值可以在字符串中的任何位置包括多字符匹配的通配符 (*) 或单字符匹配的通配符 (?)。例如,下列条件指定委托发件人只能从以 invoicing 开头并以 @example.com 结尾的“发件人”地址发送电子邮件:
"Condition": {
"StringLike": {
"ses:FromAddress": "invoicing*@example.com"
}
}
您还可以使用 StringNotLike
条件来防止委托发件人从某些电子邮件地址发送电子邮件。例如,您可以通过在您的策略语句中包含以下条件,禁止从 admin@example.com 以及类似地址(例如 "admin"@example.com、admin+1@example.com 或 sender@admin.example.com)发送邮件:
"Condition": {
"StringNotLike": {
"ses:FromAddress": "*admin*example.com"
}
}
有关如何指定条件的更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:条件。
指定委托发件人
委托人(即您向其授予权限的实体)可以是 AWS 账户、 AWS Identity and Access Management (IAM) 用户或 AWS 服务。
以下示例显示了一个简单的策略,该策略允许 AWS ID 123456789012 从经过验证的身份 e xample.com(归88888888888888所有)发送电子邮件。 AWS 账户
本政策中的Condition
声明仅允许委托人(即 AWS ID 123456789012)从地址营销+发送电子邮件。 * @example .com,其中 * 是发件人想要在 m arketing + 之后添加的任何字符串。 。
- JSON
-
-
{
"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)来指定。
- JSON
-
-
{
"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 发送电子邮件的权限。
- JSON
-
-
{
"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 全局条件键指定的。
- JSON
-
-
{
"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。以下政策允许从身份 e xample.com 发送 AWS 账户 ID 123456789012,但只能从电子邮件地址 sender@example.com 发送。
- JSON
-
-
{
"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 月发送电子邮件广告,则可以使用以下策略限制主体只能在此月发送电子邮件。
- JSON
-
-
{
"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 发送电子邮件:SendEmail
和 SendRawEmail
,具体取决于发件人想要对电子邮件格式的控制程度。通过发送授权策略,您可以限制委托发件人使用两种操作中的一种。但是,许多身份所有者都会将电子邮件发送调用的具体方式交给委托发件人决定,也就是在策略中同时启用这两种操作。
如果您允许委托发件人经由 SMTP 接口访问 Amazon SES,则必须至少选择 SendRawEmail
。
如果您的使用案例中需要限制操作,则可在发送授权策略中仅包括一种操作。以下示例向您说明如何限制仅使用 SendRawEmail
操作。
- JSON
-
-
{
"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。以下政策允许从 identity e xample.com 发送 AWS 账户 ID 123456789012,但前提是 “发件人” 地址的显示名称包含营销信息。
- JSON
-
-
{
"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 发送,只要 “发件人” 地址和反馈地址都使用域名 e xam ple.com 即可。第二条语句授权 IAM 用户从 sender@example.com 发送电子邮件,条件是收件人的电子邮件地址使用 example.com 域。
- JSON
-
-
{
"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"
}
}
}
]
}