

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

# 使用 AWS Organizations 自动标记中转网关连接
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations"></a>

*Richard Milner-Watts、Haris Bin Ayub 和 John Capps，Amazon Web Services*

## Summary
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-summary"></a>

在 Amazon Web Services (AWS) 上 [AWS Resource Access Manager](https://aws.amazon.com/ram/)，您可以使用[AWS Transit Gateway](https://aws.amazon.com/transit-gateway/)跨 AWS 账户 界共享。然而，当您跨账户边界创建中转网关连接时，创建的连接将没有“名称”标签。这样可能会使识别这些连接变得耗时。 

该解决方案提供了一种自动机制，用于为 [AWS Organizations](https://aws.amazon.com/organizations/) 管理的组织内的账户收集有关每个中转网关连接的信息。此过程包括从中转网关路由表中查找[无类别域间路由](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)（CIDR）范围。随后，该解决方案会将 `<CIDR-range>-<AccountName>` 形式的“名称”标签应用于含有中转网关的那个账户内的连接。

该解决方案可以与解决方案库中的[无服务器公交网络 Orchestrator](https://aws.amazon.com/solutions/implementations/serverless-transit-network-orchestrator/) 等解决方案一起使用。 AWS 无服务器中转网络编排工具支持大规模自动创建中转网关连接。

## 先决条件和限制
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 包含所有相关账户的 AWS Organizations 组织
+ 访问组织根目录下的组织管理账户以创建必需 AWS Identity and Access Management (IAM) 角色
+ 一个共享网络成员账户，其中包含一个或多个与组织共享并具有连接的中转网关

## 架构
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-architecture"></a>

以下屏幕截图 AWS 管理控制台 显示了此解决方案生成的没有关联名称标签的 Transit Gateway 附件和两个带有名称标签的 Transit Gateway 附件的示例。生成的“名称”标签的结构为 `<CIDR-range>-<AccountName>`。

![\[控制台中显示了一些没有“名称”标签的连接和两个具有“名称”标签的连接。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/4b10dfec-43be-4337-9945-c64df921934a/images/7e7d4a47-f07a-4708-8022-a1d22855bb5d.png)


 

此解决方案用于[AWS CloudFormation](https://aws.amazon.com/cloudformation/)部署一个[AWS Step Functions](https://aws.amazon.com/step-functions/)工作流，用于管理所有配置的 Transit Gateway Name 标签的创建 AWS 区域。此工作流将调用 [AWS Lambda](https://aws.amazon.com/lambda/) 函数，这些函数将执行底层任务。

解决方案从中获取账户名后，Step Function AWS Organizations s 状态机将获取所有 Transit Gateway 附件 IDs。系统将按区域来并行处理这些连接。这一处理包含查找每个连接的 CIDR 范围。CIDR 范围是通过在区域内的中转网关路由表中搜索匹配的中转网关连接 ID 来获取的。如果所有必需的信息均可用，该解决方案会将名称标签应用于附件。该解决方案不会覆盖任何现有名称标签。

该解决方案按照 [Amazon EventBridge](https://aws.amazon.com/eventbridge/) 事件控制的时间表运行。该事件每天早上 6:00 UTC 启动解决方案。

**目标技术堆栈**
+ Amazon EventBridge
+ AWS Lambda
+ AWS Organizations
+ AWS Transit Gateway
+ Amazon Virtual Private Cloud（Amazon VPC）
+ AWS X-Ray

**目标架构**

下图显示了该解决方案的架构和工作流。

![\[跨共享网络和组织管理账户的九步流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/4b10dfec-43be-4337-9945-c64df921934a/images/873cc89f-c6e3-43cd-94ed-59b6ea2b8d49.png)


1. 计划的事件将启动此规则。

1. 该 EventBridge 规则启动 Step Functions 状态机。

1. 状态机调用 Lambda 函数 `tgw-tagger-organizations-account-query`。

1. `tgw-tagger-organizations-account-query` Lambda 函数将在组织管理账户中担任此角色。

1. `tgw-tagger-organizations-account-query`Lambda 函数调用 Organizations API 来返回元数据 AWS 账户 。

1. 状态机将调用 `tgw-tagger-attachment-query` Lambda 函数。

1. 对于每个区域，状态机并行调用 `tgw-tagger-rtb-query` Lambda 函数来读取每个连接的 CIDR 范围。

1. 对于每个区域，状态机并行调用 `tgw-tagger-attachment-tagger`** **Lambda 函数。

1. 名称标签是在共享网络账户中为中转网关连接创建的。

**自动化和扩缩**

该解决方案并行处理每个区域以减少运行的总持续时间。

## 工具
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-tools"></a>

**AWS 服务**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)通过将基础架构视为代码，提供了一种对相关资源 AWS 和第三方资源集合进行建模、快速一致地配置这些资源并在其整个生命周期中对其进行管理的方法。
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 可帮助您实时监控您的 AWS 资源和您运行 AWS 的应用程序的指标。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 是一项无服务器事件总线服务，可用于将应用程序与来自各种来源的数据连接起来。 EventBridge 接收事件（环境变化的指示器），并应用规则将事件路由到目标。规则根据事件的结构（称为事件模式）或计划，将事件与目标相匹配。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，无需预调配或管理服务器即可运行代码。Lambda 只在需要时运行您的代码，并自动进行扩展，从每天几个请求扩展到每秒数千个请求。您只需按使用的计算时间付费。代码不运行时不会产生任何费用。
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)随着 AWS 资源的增长和扩展，可以帮助你集中管理和治理环境。使用 Organizations，您可以通过编程方式创建新资源 AWS 账户 和分配资源，对账户进行分组以组织工作流程，将策略应用于账户或群组进行治理，并通过对所有账户使用单一付款方式来简化计费。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)是一种低代码的可视化工作流服务，用于编排 AWS 服务、自动化业务流程和构建无服务器应用程序。工作流负责管理故障、重试、并行化、服务集成和可观测性，这样，您的开发人员就可以专注于更有价值的业务逻辑。
+ [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/)通过中央集线器连接 VPCs 和本地网络。这样就简化了您的网络，并消除了复杂的对等关系。它充当一个云路由器，这样，每个新连接只需建立一次。
+ [Amazon Virtual Private Cloud（亚马逊 VPC）](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)是一项用于在您定义的逻辑隔离的虚拟网络中启动 AWS 资源的服务。
+ [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) 会收集您的应用程序所服务的请求的相关数据，并提供了一些工具，供您查看、筛选和了解这些数据，以便发现问题和优化机会。

**代码**

该解决方案的源代码可在 Tr [ansit Gateway Attachment Tagger](https://github.com/aws-samples/tgw-attachment-tagger) GitHub 存储库中找到。存储库包含以下文件：
+ `tgw-attachment-tagger-main-stack.yaml` 在共享网络账户中创建支持此解决方案的所有资源。
+ `tgw-attachment-tagger-organizations-stack.yaml`**** 在组织的管理账户中创建角色。

## 操作说明
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-epics"></a>

### 部署主解决方案堆栈
<a name="deploy-the-main-solution-stack"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 收集必要的先决条件信息。 | 要配置从 Lambda 函数对 API AWS Organizations 的跨账户访问权限，您需要组织管理账户的账户 ID。****这两个 CloudFormation 堆栈的创建顺序很重要。您必须首先将资源部署到共享网络账户中。在将资源部署到组织的管理账户之前，共享网络账户中的角色必须已经存在。有关详情，请参阅 [AWS 文档](https://docs.amazonaws.cn/en_us/IAM/latest/UserGuide/id_roles_create_for-user.html)。 | DevOps 工程师 | 
| 启动主解决方案堆栈的 CloudFormation 模板。 | 主解决方案堆栈的模板将部署 IAM 角色、Step Functions 工作流程、Lambda 函数和亚马逊 CloudWatch 事件。打开共享网络账户 AWS 管理控制台 的，然后打开:&CFN 控制台。 使用 `tgw-attachment-tagger-main-stack.yaml` 模板和下面这些值来创建堆栈： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/tag-transit-gateway-attachments-automatically-using-aws-organizations.html)有关启动 CloudFormation 堆栈的更多信息，请参阅[AWS 文档](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)。 | DevOps 工程师 | 
| 确认已成功启动解决方案。 | 等待 CloudFormation 堆栈达到 CRE **ATE\$1** COMPLETE 状态。此过程花费的时间应当不到 1 分钟。打开 Step Functions 控制台，验证是否创建了一台名为 **tgw-attachment-tagger-state-machine 的新状态机**。 | DevOps 工程师 | 

### 部署 AWS Organizations 堆栈
<a name="deploy-the-aws-organizations-stack"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 收集必要的先决条件信息。 | 要配置从 Lambda 函数到 AWS Organizations API 的跨账户访问，您需要共享联网账户的账户 ID。 | DevOps 工程师 | 
| 启动 Organizations 堆栈的 CloudFormation 模板 | AWS Organizations 堆栈模板将在组织管理账户中部署 IAM 角色。 访问组织管理账户的 AWS 控制台。然后打开 CloudFormation 控制台。 使用 `tgw-attachment-tagger-organizations-stack.yaml` 模板和下面这些值来创建堆栈：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/tag-transit-gateway-attachments-automatically-using-aws-organizations.html)对于其他堆栈创建选项，请用默认值。 | DevOps 工程师 | 
| 确认已成功启动解决方案。 | 等待 CloudFormation 堆栈达到 CRE **ATE\$1** COMPLETE 状态。此过程花费的时间应当不到 1 分钟。打开 AWS Identity and Access Management (IAM) 控制台，确认已创建名为 **tgw-attachment-tagger-organization-query-** role 的新角色。 | DevOps 工程师 | 

### 验证解决方案
<a name="verify-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 运行状态机。 | 打开共享网络账户的 Step Functions 控制台，然后在导航窗格选择**状态机**。选择状态机 **tgw-attachment-tagger-state-机器**，然后选择**开始执行**。 由于解决方案不使用此状态机输入，因此您可使用默认值。<pre>{<br />    "Comment": "Insert your JSON here"<br />}</pre>选择**开始执行**。 | DevOps 工程师 | 
| 观察状态机直至完成。 | 在打开的新页面，您可观看状态机的运行。持续时间将取决于待处理中转网关连接的数量。在此页面，您可检查状态机的每个步骤。您可以查看状态机中的各种任务，并点击指向 Lambda 函数的 CloudWatch 日志链接。对于在地图中并行运行的任务，您可使用**索引**下拉列表来查看每个区域的具体实现。 | DevOps 工程师 | 
| 验证中转网关连接标签。 | 打开共享网络账户的 VPC 控制台，然后选择**中转网关连接**。 在控制台上，为满足标准的连接提供名称标签（连接将传播到中转网关路由表，并且资源所有者是组织的成员）。 | DevOps 工程师 | 
| 验证 CloudWatch 事件是否已启动。 | 等待 CloudWatch 事件启动。预定时间为 UTC 时间 06:00。 然后打开共享网络账户的 Step Functions 控制台，然后在导航窗格选择**状态机**。选择状态机 **tgw-attachment-tagger-state-机器**。验证解决方案是否在 06:00 UTC 运行。 | DevOps 工程师 | 

## 相关资源
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-resources"></a>
+ [AWS Organizations](https://aws.amazon.com/organizations/)
+ [AWS Resource Access Manager](https://aws.amazon.com/ram/)
+ [无服务器中转网络编排工具](https://aws.amazon.com/solutions/implementations/serverless-transit-network-orchestrator/)
+ [创建 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [在 AWS CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)