授予 Amazon SES 电子邮件接收的权限 - Amazon Simple Email Service

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

授予 Amazon SES 电子邮件接收的权限

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

授予 Amazon SES 写入 S3 存储桶的权限

将以下策略应用于 S3 存储桶时,会向 Amazon SES 授予对该存储桶的写入权限。有关创建接收规则,向 Amazon S3 传输传入电子邮件的更多信息,请参阅交付到 S3 存储桶操作

有关将策略附加到 S3 的存储桶的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的使用存储桶策略和用户策略

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

对前面的策略示例进行以下更改:

  • myBucket 替换为要写入的 S3 存储桶的名称。

  • region 替换为您创建接收规则的 AWS 区域。

  • 111122223333 替换为您的 AWS 账户 ID。

  • 用包含向 Amazon S3 数据桶操作的交付规则的规则集名称替换 rule_set_name

  • receipt_rule_name 替换为包含发布到 Amazon S3 存储桶操作的接收规则的名称。

为 Amazon SES 提供使用您的 AWS KMS 密钥的权限

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

使用以下策略语句作为密钥策略,以允许 Amazon 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 中使用密钥策略

向 Amazon SES 提供调用 AWS Lambda 函数的权限

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

此外,也可以使用 AWS Lambda API 中的 AddPermission 操作将策略附加到函数。以下 AddPermission API 调用可向 Amazon SES 提供调用 Lambda 函数的权限。有关向 Lambda 函数附加策略的更多信息,请参阅《AWS Lambda 开发人员指南》中的 AWS Lambda 权限

{ "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 函数的接收规则的名称。

授予 Amazon SES 发布到属于不同 AWS 账户的 Amazon SNS 主题的权限

如果您希望将通知发布到单独 AWS 账户中的主题,则必须将策略附加到 Amazon SNS 主题。SNS 主题必须与域和接收规则集位于同一区域中。

以下策略为 Amazon SES 提供向单独 AWS 账户中的 Amazon SNS 主题发布内容的权限。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"ses.amazonaws.com" }, "Action":"SNS:Publish", "Resource":"arn:aws:sns:topic_region:sns_topic_account_id:topic_name", "Condition":{ "StringEquals":{ "AWS:SourceAccount":"aws_account_id", "AWS:SourceArn": "arn:aws:ses:receipt_region:aws_account_id:receipt-rule-set/rule_set_name:receipt-rule/receipt_rule_name" } } } ] }

对前面的策略示例进行以下更改:

  • topic_region 替换为创建 Amazon SNS 主题的 AWS 区域。

  • 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 密钥策略来添加权限:

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