

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

# 授予 Amazon SES 电子邮件接收的权限
<a name="receiving-email-permissions"></a>

在 SES 中接收电子邮件时可以执行的某些任务，例如向亚马逊简单存储服务 (Amazon S3) Service 存储桶发送电子邮件或调用 AWS Lambda 函数，需要特殊权限。本节包含几个常用案例的示例策略。

**Topics**
+ [设置 IAM 角色权限以执行“交付到 S3 存储桶”操作](#receiving-email-permissions-s3-iam-role)
+ [授予 SES 写入 S3 存储桶的权限](#receiving-email-permissions-s3)
+ [授予 SES 使用您的 AWS KMS 密钥的权限](#receiving-email-permissions-kms)
+ [授予 SES 调用 AWS Lambda 函数的权限](#receiving-email-permissions-lambda)
+ [授予 SES 发布属于不同账户的 Amazon SNS 主题的权限 AWS](#receiving-email-permissions-sns)

## 设置 IAM 角色权限以执行“交付到 S3 存储桶”操作
<a name="receiving-email-permissions-s3-iam-role"></a>

以下几点适用于此 IAM 角色：
+ 它只能用于[交付到 S3 存储桶操作](receiving-email-action-s3.md)。
+ 如果要向 SES [电子邮件接收](regions.md#region-receive-email)不可用的区域中的 S3 存储桶写入数据，则必须使用该角色。

如果要写入到 S3 存储桶，您可以向 IAM 角色提供访问相关资源的权限，以便[交付到 S3 存储桶操作](receiving-email-action-s3.md)。您还需要授予 SES 权限才能代入该角色，以便通过 IAM 信任策略执行操作，如[下一节](#receiving-email-permissions-s3-iam-role-trust)所述。

必须将此权限策略粘贴到 IAM 角色的内联策略编辑器中，请参阅[交付到 S3 存储桶操作](receiving-email-action-s3.md)，并按照 **IAM 角色**项目中给出的步骤进行操作。（以下示例还包括可选权限，以防您想在 S3 操作中使用 SNS 主题通知或客户托管密钥。）

**注意**  
您可以选择设置 S3 操作而不指定 IAM 角色，只需在 S3 存储桶策略中允许 SES 服务，如 [授予 SES 写入 S3 存储桶的权限](#receiving-email-permissions-s3) 所示。这也适用于跨账户场景。
如果您为 S3 操作指定 IAM 角色，则 SES 将担任 “PutObject” 操作的角色，并且此处指定的 IAM 权限足以满足相同的账户使用需求。但是，对于跨账户使用，您需要一个额外的存储桶策略，允许 IAM 角色在存储桶中 PutObject “”。这由存储桶所有者授予跨账户存储桶权限来指定，如[存储桶所有者授予跨账户存储桶权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)中所述。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3Access",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::{{amzn-s3-demo-bucket}}/*"
        },
        {
            "Sid": "SNSAccess",
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:{{us-east-1}}:{{111122223333}}:{{my-topic}}"
        },
        {
            "Sid": "KMSAccess",
            "Effect": "Allow",
            "Action": "kms:GenerateDataKey*",
            "Resource": "arn:aws:kms:{{us-east-1}}::{{111122223333}}:key/{{key-id}}"
        }
    ]
}
```

------

对前面的策略示例进行以下更改：
+ {{amzn-s3-demo-bucket}}替换为您要写入的 S3 存储桶的名称。
+ {{region}}替换为您创建接收规则 AWS 区域 的位置。
+ 将 {{111122223333}} 替换为您的 AWS 账户 ID。
+ {{my-topic}}替换为要向其发布通知的 SNS 主题的名称。
+ {{key-id}}替换为您的 KMS 密钥的 ID。

### 适用于 S3 操作 IAM 角色的信任策略
<a name="receiving-email-permissions-s3-iam-role-trust"></a>

应将以下信任策略添加到 IAM 角色的*信任关系*中，以允许 SES 代入该角色。

**注意**  
仅当您未使用[交付到 S3 存储桶操作](receiving-email-action-s3.md)工作流程的 **IAM 角色**项目中给出的步骤，从 SES 控制台创建 IAM 角色时，才需要手动添加此信任策略。*当从控制台创建 IAM 角色时，系统会自动生成此信任策略并将其应用于该角色，因此您无需执行此步骤。*

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSESAssume",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                  "AWS:SourceAccount":"{{111122223333}}",
                  "AWS:SourceArn": "arn:aws:ses:{{region}}:{{111122223333}}:receipt-rule-set/{{rule_set_name}}:receipt-rule/{{receipt_rule_name}}"
                }
            }
        }
    ]
}
```

------

对前面的策略示例进行以下更改：
+ {{region}}替换为您创建接收规则 AWS 区域 的位置。
+ 将 {{111122223333}} 替换为您的 AWS 账户 ID。
+ {{rule\_set\_name}}替换为包含接收规则（包含传送到 Amazon S3 存储桶操作）的规则集的名称。
+ {{receipt\_rule\_name}}替换为包含传送到 Amazon S3 存储桶操作的接收规则的名称。

## 授予 SES 写入 S3 存储桶的权限
<a name="receiving-email-permissions-s3"></a>

当您将以下策略应用于 S3 存储桶时，只要该存储桶位于支持 SES [电子邮件接收](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_inbound_endpoints)的区域中，它就会授予 SES 写入该存储桶的权限；如果您想写入*电子邮件接收*区域之外的存储桶，请参阅[设置 IAM 角色权限以执行“交付到 S3 存储桶”操作](#receiving-email-permissions-s3-iam-role)。有关创建接收规则，向 Amazon S3 传输传入电子邮件的更多信息，请参阅[交付到 S3 存储桶操作](receiving-email-action-s3.md)。

有关将策略附加到 S3 的存储桶的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[使用存储桶策略和用户策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Sid":"AllowSESPuts",
      "Effect":"Allow",
      "Principal":{
        "Service":"ses.amazonaws.com"
      },
      "Action":"s3:PutObject",
      "Resource":"arn:aws:s3:::{{amzn-s3-demo-bucket}}/*",
      "Condition":{
        "StringEquals":{
          "AWS:SourceAccount":"{{111122223333}}",
          "AWS:SourceArn": "arn:aws:ses:{{region}}:{{111122223333}}:receipt-rule-set/{{rule_set_name}}:receipt-rule/{{receipt_rule_name}}"
        }
      }
    }
  ]
}
```

------

对前面的策略示例进行以下更改：
+ {{amzn-s3-demo-bucket}}替换为您要写入的 S3 存储桶的名称。
+ {{region}}替换为您创建接收规则的 AWS 区域。
+ 将 {{111122223333}} 替换为您的 AWS 账户 ID。
+ {{rule\_set\_name}}替换为包含接收规则（包含传送到 Amazon S3 存储桶操作）的规则集的名称。
+ {{receipt\_rule\_name}}替换为包含传送到 Amazon S3 存储桶操作的接收规则的名称。

## 授予 SES 使用您的 AWS KMS 密钥的权限
<a name="receiving-email-permissions-kms"></a>

为了让 SES 能够加密您的电子邮件，它必须具有使用 AWS KMS 密钥的权限，该密钥在设置接收规则时由您指定。您可以使用账户中的默认 KMS 密钥（**aws/ses**），也可以使用您创建的客户托管式密钥。如果您使用默认 KMS 密钥，不需要执行任何其他步骤来为 SES 提供使用权限。若要使用客户托管式密钥，您需要向 SES 提供该密钥的使用权限，方法是在密钥策略中添加一条语句。

使用以下策略语句作为密钥策略，以允许 SES 在您的域上接收电子邮件时使用您的客户托管式密钥。

```
{
  "Sid": "AllowSESToEncryptMessagesBelongingToThisAccount", 
  "Effect": "Allow",
  "Principal": {
    "Service":"ses.amazonaws.com"
  },
  "Action": [
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition":{
        "StringEquals":{
          "AWS:SourceAccount":"{{111122223333}}",
          "AWS:SourceArn": "arn:aws:ses:{{region}}:{{111122223333}}:receipt-rule-set/{{rule_set_name}}:receipt-rule/{{receipt_rule_name}}"
        }
      }
}
```

对前面的策略示例进行以下更改：
+ {{region}}替换为您创建接收规则的 AWS 区域。
+ 将 {{111122223333}} 替换为您的 AWS 账户 ID。
+ 替换为包含您{{rule\_set\_name}}与电子邮件接收关联的接收规则的规则集的名称。
+ 替换为您{{receipt\_rule\_name}}与电子邮件接收关联的接收规则的名称。

如果您使用 AWS KMS 向启用服务器端加密的 S3 存储桶发送加密消息，则需要添加策略操作。`"kms:Decrypt"`使用前面的示例，将此操作添加到策略中，如下所示：

```
{
  "Sid": "AllowSESToEncryptMessagesBelongingToThisAccount", 
  "Effect": "Allow",
  "Principal": {
    "Service":"ses.amazonaws.com"
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition":{
        "StringEquals":{
          "AWS:SourceAccount":"{{111122223333}}",
          "AWS:SourceArn": "arn:aws:ses:{{region}}:{{111122223333}}:receipt-rule-set/{{rule_set_name}}:receipt-rule/{{receipt_rule_name}}"
        }
      }
}
```

有关为 AWS KMS 密钥附加策略的更多信息，请参阅*《AWS Key Management Service 开发人员指南*》[AWS KMS中的使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

## 授予 SES 调用 AWS Lambda 函数的权限
<a name="receiving-email-permissions-lambda"></a>

要允许 SES 调用 AWS Lambda 函数，您可以在 SES 控制台中创建接收规则时选择该函数。当您执行此操作时，SES 会自动为此函数添加必要的权限。

此外，也可以使用 AWS Lambda API 中的 `AddPermission` 操作将策略附加到函数。以下 `AddPermission` API 调用可授予 SES 调用 Lambda 函数的权限。有关向 Lambda 函数附加策略的更多信息，请参阅《AWS Lambda 开发人员指南》**中的 [AWS Lambda 权限](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html)。

```
{
  "Action": "lambda:InvokeFunction",
  "Principal": "ses.amazonaws.com",
  "SourceAccount": "{{111122223333}}",
  "SourceArn": "arn:aws:ses:{{region}}:{{111122223333}}:receipt-rule-set/{{rule_set_name}}:receipt-rule/{{receipt_rule_name}}",
  "StatementId": "GiveSESPermissionToInvokeFunction"
}
```

对前面的策略示例进行以下更改：
+ {{region}}替换为您创建接收规则的 AWS 区域。
+ 将 {{111122223333}} 替换为您的 AWS 账户 ID。
+ {{rule\_set\_name}}替换为包含您在其中创建 Lambda 函数的接收规则的规则集的名称。
+ {{receipt\_rule\_name}}替换为包含您的 Lambda 函数的接收规则的名称。

## 授予 SES 发布属于不同账户的 Amazon SNS 主题的权限 AWS
<a name="receiving-email-permissions-sns"></a>

要在单独的 AWS 账户中发布针对某个主题的通知，您必须在 Amazon SNS 主题中附加政策。SNS 主题必须与域和接收规则集位于同一区域中。

以下政策授予 SES 使用单独 AWS 账户向 Amazon SNS 主题发布内容的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "SNS:Publish",
            "Resource": "arn:aws:sns:{{us-east-1}}:{{111122223333}}:{{topic_name}}",
            "Condition": {
                "StringEquals": {
                "AWS:SourceAccount": "{{444455556666}}",
                "AWS:SourceArn": "arn:aws:ses:{{us-east-1}}:{{777788889999}}:receipt-rule-set/{{rule_set_name}}:receipt-rule/{{rule_name}}"
                }
            }
        }
    ]
}
```

------

对前面的策略示例进行以下更改：
+ {{topic\_region}}替换为 AWS 区域 创建 Amazon SNS 主题时使用的。
+ {{sns\_topic\_account\_id}}替换为拥有 Amazon SNS 主题的 AWS 账户的 ID。
+ {{topic\_name}}替换为您要向其发布通知的 Amazon SNS 主题的名称。
+ {{aws\_account\_id}}替换为配置为接收电子邮件的 AWS 账户的 ID。
+ {{receipt\_region}}替换为您创建接收规则 AWS 区域 的位置。
+ {{rule\_set\_name}}替换为包含您在其中创建 “发布到 Amazon SNS” 主题操作的接收规则的规则集的名称。
+ {{receipt\_rule\_name}}替换为包含 “发布到 Amazon SNS” 主题操作的接收规则名称。

如果您的 Amazon SNS 主题 AWS KMS 用于服务器端加密，则必须向密钥策略添加权限。 AWS KMS 您可以通过将以下策略附加到 AWS KMS 密钥策略来添加权限：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSESToUseKMSKey",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}
```

------