

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

# 使用 Amazon AWS 账户 SES 使用一个电子邮件地址注册多个邮箱
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses"></a>

*Joe Wozniak 和 Shubhangi Vishwakarma，Amazon Web Services*

## Summary
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-summary"></a>

此模式描述了如何将真实的电子邮件地址与与之关联的电子邮件地址分开。 AWS 账户 AWS 账户 要求在创建账户时提供唯一的电子邮件地址。在某些组织中，管理团队 AWS 账户 必须承担与其邮件团队一起管理许多唯一电子邮件地址的负担。对于管理许多企业的大型组织来说，这可能很困难 AWS 账户。此外，如果您的电子邮件系统不允许 [Sieve 电子邮件筛选：子地址扩展（RFC 5233）](https://datatracker.ietf.org/doc/html/rfc5233)中定义的*加号寻址*或*子寻址*，则通过在电子邮件地址本地部分的末尾添加加号（\+）和标识符（例如 `admin+123456789123@example.com`），此模式可以帮助克服此限制。

这种模式提供了一种独特的电子邮件地址自动售货解决方案，使 AWS 账户 所有者能够将一个电子邮件地址与多个电子邮件地址相关联 AWS 账户。然后， AWS 账户 所有者的真实电子邮件地址与表格中生成的这些电子邮件地址相关联。该解决方案处理唯一电子邮件账户的所有传入电子邮件，查找每个账户的拥有者，然后将收到的所有邮件转发给拥有者。 

## 先决条件和限制
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-prereqs"></a>

**先决条件**
+ 对的管理访问权限 AWS 账户。
+ 可以进入开发环境。
+ （可选）熟悉 AWS Cloud Development Kit (AWS CDK) 工作流程和 Python 编程语言将帮助您解决任何问题或进行修改。

**限制**
+ 出售的电子邮件地址的总长度为 64 个字符。有关详细信息，请参阅 *AWS Organizations API 参考[CreateAccount](https://docs.aws.amazon.com/organizations/latest/APIReference/API_CreateAccount.html)*中的。

**产品版本**
+ Node.js 版本 22.x 或更高版本
+ Python 3.13 或更高版本
+ Python 软件包 **pip** 和 **virtualenv**
+ AWS CDK CLI 版本 2.1019.2 或更高版本
+ Docker 20.10.x 或更高版本

## 架构
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-architecture"></a>

**目标技术堆栈**
+ CloudFormation 堆栈
+ AWS Lambda 函数
+ Amazon Simple Email Service（Amazon SES）规则和规则集
+ AWS Identity and Access Management (IAM) 角色和策略
+ Amazon Simple Storage Service (Amazon S3) 存储桶和存储桶策略
+ AWS Key Management Service (AWS KMS) 密钥和密钥策略
+ Amazon Simple Notification Service(Amazon SNS) 主题和主题策略
+ Amazon DynamoDB 表 

**目标架构 **

![使用单个电子邮件地址注册多个 Amazon Web Services account 目标架构](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/1be85b92-69e5-43b2-aeed-27b9509e145e/images/c7ae9d7a-d4e0-412e-97cb-0f3073e012e7.png)


此图显示了两个流程：
+ **电子邮件地址自动售货流程：**在图中，电子邮件地址自动售货流程（下部分）通常从账户自动售货解决方案或外部自动化开始，或者手动调用。在请求中，使用包含所需元数据的负载调用 Lambda 函数。该函数使用此信息生成唯一的账户名和电子邮件地址，将其存储在 DynamoDB 数据库，然后将值返回给调用方。然后，可以使用这些值来创建新值 AWS 账户 （通常通过使用 AWS Organizations）。
+ **电子邮件转发流程：**此流程如上图的上半部分所示。使用电子邮件 AWS 账户 地址自动售货流程生成的账户电子邮件创建时， AWS 会向该电子邮件地址发送各种电子邮件，例如账户注册确认和定期通知。按照此模式中的步骤操作，您可以将 with Amazon SES 配置为接收整个域的电子邮件。 AWS 账户 此解决方案配置了转发规则，允许 Lambda 处理所有传入的电子邮件，检查该 `TO` 地址是否在 DynamoDB 表中，然后将邮件转发到账户拥有者的电子邮件地址。使用此流程，账户拥有者可以将多个账户与一个电子邮件地址相关联。

**自动化和扩展**

此模式使用 AWS CDK 来完全自动化部署。该解决方案使用 AWS 托管服务，这些服务将（或可以配置为）自动扩展以满足您的需求。Lambda 函数可能需要额外配置才能满足您的扩缩需求。有关更多信息，请参阅 Lambda 文档中的[了解 Lambda 函数扩缩](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html)。

## 工具
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-tools"></a>

**AWS 服务**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置资源，并在资源的整个生命周期中跨地区对其 AWS 账户 进行管理。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您通过命令行外壳中的命令与 AWS 服务进行交互。
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) 是一项完全托管式 NoSQL 数据库服务，可提供快速、可预测、可扩展的性能。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 可帮助您创建和控制加密密钥以帮助保护您的数据。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。它只在需要时运行您的代码，并自动进行扩展，因此您只需为使用的计算时间付费。
+ [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html) 帮助您通过使用您自己的电子邮件地址和域发送和接收电子邮件。
+ [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 可帮助您协调和管理发布者与客户端（包括 Web 服务器和电子邮件地址）之间的消息交换。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**部署所需工具**
+ 具有 AWS CLI 和 IAM 访问权限的开发环境 AWS 账户。 有关详细信息，请参阅 “[相关资源](#register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-resources)” 部分中的链接。 
+ 在您的开发系统上，安装以下项：
  + Git 命令行工具，可通过 [Git 下载网站](https://git-scm.com/downloads)获取。
  + 用于 AWS CLI 为配置访问凭证 AWS CDK。有关详情，请参阅 [AWS CLI 文档](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。
  + Python 版本 3.13 或更高版本，可通过 [Python 下载网站](https://www.python.org/downloads/)获取。
  + 用于 Python 包管理的 UV。有关安装说明，请参阅 [UV 安装指南](https://docs.astral.sh/uv/getting-started/installation/)。
  + Node.js 版本 22.x 或更高版本。有关安装说明，请参阅 [Node.js 文档](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs)。
  + AWS CDK CLI 版本 2.1019.2 或更高版本。有关安装说明，请参阅 [AWS CDK 文档](https://docs.aws.amazon.com/cdk/v2/guide/getting-started.html#getting-started-install)。
  + Docker 版本 20.10.x 或更高版本。有关安装说明，请参阅 [Docker 文档](https://docs.docker.com/engine/install/)。

**代码**

此模式的代码可在 GitHub [AWS 账户 工厂电子邮件](https://github.com/aws-samples/aws-account-factory-email)存储库中找到。

## 操作说明
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-epics"></a>

### 分配目标部署环境
<a name="allocate-a-target-deployment-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 识别或创建 AWS 账户. | 确定您拥有完全管理权限 AWS 账户 的现有或新的电子邮件解决方案，以部署电子邮件解决方案。 | AWS 管理员、云管理员 | 
| 设置部署环境。 | 按照以下步骤配置易于使用的部署环境并设置依赖项：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | AWS DevOps，应用程序开发者 | 

### 设置验证的域
<a name="set-up-a-verified-domain"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 识别和分配域。 | 电子邮件转发功能需要专用域。识别并分配您可以使用 Amazon SES 验证的域或子域。此域应可用于在部署电子邮件转发解决方案 AWS 账户 的地方接收传入的电子邮件。<br />域要求：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | 云管理员、网络管理员、DNS 管理员 | 
| 验证域。 | 验证所识别的域是否可用于接受传入电子邮件。<br />完成 Amazon SES 文档中的[验证您的域以接收 Amazon SES 电子邮件](https://docs.aws.amazon.com/ses/latest/dg/receiving-email-verification.html)中的说明。这需要与负责域的 DNS 记录人员或团队进行协调。 | AWS 应用程序开发人员 DevOps | 
| 设置 MX 记录。 | 使用指向您和地区的 Amazon SES 终端节点的 MX 记录来设置您的 AWS 账户 域名。有关更多信息，请参阅 Amazon SES 文档中的[发布 Amazon SES 电子邮件接收的 MX 记录](https://docs.aws.amazon.com/ses/latest/dg/receiving-email-mx-record.html)。 | 云管理员、网络管理员、DNS 管理员 | 

### 部署电子邮件自动售卖和转发解决方案
<a name="deploy-the-email-vending-and-forwarding-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 修改 `cdk.json` 中的默认值。 | 编辑 `cdk.json` 文件中的一些默认值（位于存储库的根目录），以便解决方案在部署后能够正常运行。[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | AWS 应用程序开发人员 DevOps | 
| 部署电子邮件自动售卖与转发解决方案。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | AWS 应用程序开发人员 DevOps | 
| 验证解决方案是否已部署。 | 开始测试之前，验证解决方案是否成功部署：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | AWS 应用程序开发人员 DevOps | 

### 验证电子邮件自动售卖和转发是否按预期运行
<a name="verify-that-email-vending-and-forwarding-operate-as-expected"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证该 API 是否正常运行。 | 在此步骤中，您将测试数据提交到解决方案的 API，并确认解决方案产生预期输出并且后端操作已按预期执行。<br />使用测试输入，手动运行 **Vend Email** Lambda 函数。(有关示例，请参阅 [sample\_vend\_request.json 文件](https://github.com/aws-samples/aws-account-factory-email/blob/main/src/events/sample_vend_request.json)。) 对于 `OwnerAddress`，请使用有效的电子邮件地址。API 应返回账户名和账户电子邮件以及预期的值。 | AWS 应用程序开发人员 DevOps | 
| 确认电子邮件已转发。 | 在此步骤中，您通过系统发送测试电子邮件并验证电子邮件是否转发给预期收件人。[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | AWS 应用程序开发人员 DevOps | 

## 问题排查
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 系统无法按预期转发电子邮件。 | 验证您的设置是否正确：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html)<br />验证域设置后，请按下列步骤操作：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | 
| 当你尝试部署 AWS CDK 堆栈时，你会收到类似于以下内容的错误：<br />“模板格式错误：无法识别的资源类型”  | 在大多数情况下，此错误消息意味着您所定位的区域没有所有可用的 Amazon Web Services。如果您使用 Amazon EC2 实例来部署解决方案，则您的目标区域可能与实例运行的区域不同。默认情况下，会 AWS CDK 部署到您在中配置的区域和账户。 AWS CLI<br />可能的解决方案：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | 
| 部署此解决方案时，您会收到错误消息：<br />“部署失败：错误: AwsMailFwdStack: SSM 参数 /cdk-bootstrap/hnb659fds/version 未找到。是否已引导环境？ 请运行 'cdk bootstrap'” | 如果您从未将任何 AWS CDK 资源部署到目标 AWS 账户 和区域，则必须先按照错误指示运行该`cdk bootstrap`命令。如果在运行引导命令后继续收到此错误，则您可能正在尝试将解决方案部署到与运行开发环境的区域不同的区域。<br />要解决此问题，请在部署解决方案 AWS CLI 之前设置`AWS_DEFAULT_REGION`环境变量或使用设置区域。或者，您可按照 [AWS CDK 环境文档](https://docs.aws.amazon.com/cdk/v2/guide/environments.html)中的说明修改存储库根目录中的 `app.py` 文件，使其包含硬编码的账户 ID 和区域。 | 

## 相关资源
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-resources"></a>
+ 有关安装的帮助 AWS CLI，请参阅[安装或更新到最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
+ 有关 AWS CLI 使用 IAM 访问凭证设置的帮助，请参阅[配置设置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
+ 有关方面的帮助 AWS CDK，请参阅《[入门》 AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_install)。

## 附加信息
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-additional"></a>

**成本**

部署此解决方案时， AWS 账户 持有者可能会产生与使用以下服务相关的费用。 对您来说，了解这些服务的计费方式非常重要，这样您就可以了解任何潜在的费用。有关定价信息，请参阅以下页面：
+ [Amazon SES 定价](https://aws.amazon.com/ses/pricing/)
+ [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)
+ [AWS KMS 定价](https://aws.amazon.com/kms/pricing/)
+ [AWS Lambda 定价](https://aws.amazon.com/lambda/pricing/)
+ [Amazon DynamoDB 定价](https://aws.amazon.com/dynamodb/pricing/)