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

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

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

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

设置 IAM 角色权限以执行“交付到 S3 存储桶”操作

以下几点适用于此 IAM 角色:

如果要写入到 S3 存储桶,您可以向 IAM 角色提供访问相关资源的权限,以便交付到 S3 存储桶操作。您还需要授予 SES 权限才能代入该角色,以便通过 IAM 信任策略执行操作,如下一节所述。

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

{ "Version": "2012-10-17", "Statement": [ // Required: allows SES to write in the bucket { "Sid": "S3Access", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" }, // Optional: use if an SNS topic is used in the S3 action { "Sid": "SNSAccess", "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:region:111122223333:my-topic" }, // Optional: use if a customer managed key is used in the S3 action { "Sid": "KMSAccess", "Effect": "Allow", "Action": "kms:GenerateDataKey*", "Resource": "arn:aws:kms:region::111122223333:key/key-id" } ] }

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

  • amzn-s3-demo-bucket替换为您要写入的 S3 存储桶的名称。

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

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

  • my-topic替换为要向其发布通知的 SNS 主题的名称。

  • key-id替换为您的 KMS 密钥的 ID。

适用于 S3 操作 IAM 角色的信任策略

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

注意

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

{ "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 存储桶的权限

当您将以下策略应用于 S3 存储桶时,只要该存储桶位于支持 SES 电子邮件接收的区域中,它就会授予 SES 写入该存储桶的权限;如果您想写入电子邮件接收区域之外的存储桶,请参阅设置 IAM 角色权限以执行“交付到 S3 存储桶”操作。有关创建接收规则,向 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:::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 密钥的权限

为了让 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中的使用密钥策略

授予 SES 调用 AWS Lambda 函数的权限

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

此外,也可以使用 AWS Lambda API 中的 AddPermission 操作将策略附加到函数。以下 AddPermission API 调用可授予 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 函数的接收规则的名称。

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

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

以下政策授予 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替换为 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 密钥策略来添加权限:

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