本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Terraform 在上 AWS 面创建分层的多区域 IPAM 架构
Donny Schreiber,Amazon Web Services
Summary
IP 地址管理(IPAM)是网络管理的重要组成部分,随着组织不断扩大云基础设施规模,其复杂性也日益增加。若缺乏完善的 IP 地址管理(IPAM),组织将面临 IP 地址冲突、地址空间浪费、问题排查难度大等风险,进而导致系统中断和应用程序停机。此模式演示了如何使用 HashiCorp Terraform 为 AWS 企业环境实施全面的 IPAM 解决方案。它可以帮助组织创建分层、多区域 IPAM 架构,从而促进组织 AWS 账户 内所有部门的 IP 地址集中管理。AWS
此模式可帮助您使用复杂的四层池层次结构实施 Amazon VPC IP 地址管理器:顶层池、区域池、业务部门池和环境特定池。此结构在支持规范的 IP 地址治理的同时,允许将 IP 管理权限委派给组织内部相应的团队。该解决方案使用 AWS Resource Access Manager (AWS RAM) 在整个组织中无缝共享 IP 地址管理器池。 AWS RAM 集中和标准化 IPAM 规范,团队可以在所有托管账户中建立这些规范。
此模式可助您实现以下目标:
自动跨 AWS 区域业务部门和环境分配 IP 地址。
通过程序化验证强制实施组织网络策略。
随着业务需求的演变高效扩展网络基础设施。
通过集中管理 IP 地址空间来减少运营开销。
通过自助式 CIDR 范围分配,加快云原生工作负载部署。
通过基于策略的控制和验证,防止地址冲突。
先决条件和限制
先决条件
一个或多个 AWS 账户,作为一个组织在中进行管理 AWS Organizations。
一个网络中心或网络管理账户,将充当 IP 地址管理器委派管理员。
已安装
Terraform 版本 1.5.0 或更高版本。 管理 IP 地址管理器和虚拟私有云 (VPCs) 的权限,在 AWS Identity and Access Management (IAM) 中配置。AWS RAM
限制
IP 地址管理器受服务配额限制。池的默认服务配额为每个范围 50 个。在 6 个区域、2 个业务部门和 4 个环境中运行此部署将创建 67 个池。因此,可能需要增加配额。
分配资源后修改或删除 IP 地址管理器池可能导致依赖性问题。必须先释放分配,然后才能删除池。
在 IP 地址管理器中,资源监控可能存在轻微延迟,无法即时反映资源变更。此延迟约为 20 分钟。
IP 地址管理器无法在不同范围自动强制执行 IP 地址唯一性。
自定义标签必须遵循 AWS 标记最佳实践。例如,每个键必须唯一,并且不能以
aws:开头。将 IP 地址管理器与组织外部的账户集成时,有一些要留意的注意事项和限制
架构
目标架构
IP 地址管理器配置和池层次结构
下图显示了目标架构的逻辑构造。范围是 IP 地址管理器中最高级别的容器。每个范围代表单个网络的 IP 地址空间。池是范围内连续 IP 地址范围(或 CIDR 范围)的集合。通过池,您可以根据路由和安全需求分类管理 IP 地址。此图展示了四个层级的池:顶层池、区域池、业务部门池和环境池。

此解决方案建立了 IP 地址管理器池的清晰层次结构:
顶层池涵盖整个组织的 IP 地址空间,例如
10.176.0.0/12。区域池用于特定区域的分配,例如
10.176.0.0/15对应us-east-1。业务部门池是每个业务部门池中特定域的分配。 AWS 区域例如,
us-east-1区域的金融业务部门可能有10.176.0.0/16。环境池是针对特定用途为不同环境分配的资源。例如,位于
us-east-1区域的金融业务部门可能有用于生产环境的10.176.0.0/18。
此部署拓扑按地理位置分配 IP 地址管理器资源,同时保持集中控制。以下是其特性:
IP 地址管理器部署在单个主服务器中 AWS 区域。
其他区域注册为运营区域,IP 地址管理器可以在其中管理资源。
每个运营区域都会从顶层池获得一个专用的地址池。
所有运营区域的资源均通过主区域的 IP 地址管理器集中管理。
每个区域池都与所属区域关联一个区域设置属性,旨在帮助您正确分配资源。
高级 CIDR 范围验证
此解决方案旨在防止部署无效的配置。当您通过 Terraform 部署池时,将在 Terraform 规划阶段验证以下事项:
验证所有环境 CIDR 范围是否包含在其上级业务部门 CIDR 范围内
验证所有业务部门 CIDR 范围是否包含在其上级区域 CIDR 范围内
验证所有区域 CIDR 范围是否包含在顶层 CIDR 范围内
检查同一层次结构级别中是否有重叠的 CIDR 范围
验证环境与其对应业务部门的映射是否正确
CIDR 范围分配
下图显示了开发人员或管理员如何从池级别创建新的 IP 地址 VPCs 和分配 IP 地址的示例。

下图显示了如下工作流:
通过 AWS 管理控制台 AWS CLI、或通过基础设施即代码 (IaC),开发人员或管理员请求
AY3环境池中下一个可用的 CIDR 范围。IP 地址管理器将该池中的下一个可用 CIDR 范围分配给
AY3-4VPC。此 CIDR 范围已无法再使用。
自动化和扩展
此解决方案专为提升可扩展性而设计,如下所示:
区域扩展 – 通过使用其他区域池条目扩展 Terraform 配置,从而添加新区域。
业务部门增长 – 通过将新业务部门添加至业务部门配置图来支持其发展。
环境灵活性 – 根据组织需求配置不同的环境类型,例如开发或生产。
多账户支持 — 通过 AWS RAM共享组织内所有账户的资源池。
自动 VPC 预调配 – 与 VPC 预调配工作流集成,自动分配 CIDR 范围。
分层结构还允许不同的授权和控制等级,例如:
网络管理员可以管理顶层池和区域池。
业务部门 IT 团队可能已下放对各自池的控制权。
应用程序团队可能使用其指定环境池中的 IP 地址。
注意
您还可以将此解决方案与 AWS Control Tower Account Factory for Terraform(AFT)集成。有关更多信息,请参阅此模式其他信息部分的与 AFT 集成。
工具
AWS 服务
Amazon CloudWatch 可帮助您实时监控您的 AWS 资源和运行的应用程序 AWS 的指标。
AWS Command Line Interface (AWS CLI) 是一个开源工具,可帮助您 AWS 服务 通过命令行外壳中的命令进行交互。
AWS Organizations是一项账户管理服务,可帮助您将多个账户整合 AWS 账户 到一个由您创建和集中管理的组织中。
AWS Resource Access Manager (AWS RAM) 可帮助您安全地共享资源, AWS 账户 从而减少运营开销并提供可见性和可审计性。
Amazon Virtual Private Cloud(亚马逊 VPC)可帮助您将 AWS 资源启动到您定义的虚拟网络中。该虚拟网络类似于您在数据中心中运行的传统网络,并具有使用 AWS的可扩展基础设施的优势。IP 地址管理器是 Amazon VPC 的一项功能,它可以帮助您规划、跟踪和监控 AWS 工作负载的 IP 地址。
其他工具
HashiCorp Terraform
是一款基础设施即代码(IaC)工具,可帮助您使用代码来预调配和管理云基础设施和资源。
代码存储库
此模式的代码可在存储库上的 “分层 IPAM 的 Terraform 实现示例
根模块 – 部署编排和输入变量。
IPAM 模块 – 此模式中描述的架构的核心实现。
标签模块 – 所有资源的标准化标记。
最佳实践
考虑下面有关网络规划的最佳实践:
先计划 – 在部署之前,先彻底规划 IP 地址空间。有关更多信息,请参阅计划 IP 地址预调配。
避免重叠的 CIDR 范围 – 确保每个层级的 CIDR 范围不重叠。
预留缓冲空间 – 始终分配比当前需求更大的 CIDR 范围,以适应未来增长。
记录 IP 地址分配 – 保留您的 IP 地址分配策略文档。
考虑采用下面的部署最佳实践:
从非生产环境开始 – 先在非生产环境中部署。
使用 Terraform 状态管理 – 实施远程状态存储和锁定。有关更多信息,请参阅 Terraform 文档中的状态存储和锁定
。 实施版本控制 – 对所有 Terraform 代码进行版本控制。
实施 CI/CD 集成-使用持续集成和持续交付 (CI/CD) 管道进行可重复部署。
考虑采用下面的操作最佳实践:
启用自动导入 – 将 IP 地址管理器池配置为自动发现和导入现有资源。按照编辑 IPAM 池中的说明打开自动导入。
监控 IP 地址利用率 – 为 IP 地址利用率阈值设置警报。有关更多信息,请参阅使用 A mazon 监控 IPAM。 CloudWatch
定期审计 – 定期审计 IP 地址的使用情况及合规性。有关更多信息,请参阅在 IPAM 中跟踪 IP 地址使用情况。
清理未使用的分配 – 在资源停用时释放 IP 地址分配。有关更多信息,请参阅 CIDRs 从池中取消置备。
考虑采用下面的安全最佳实践:
实施最低权限 – 使用具备最低所需权限的 IAM 角色。有关更多信息,请参阅 IAM 中的安全最佳实践和 IPAM 中的身份与访问管理。
使用服务控制策略-实施服务控制策略 (SCPs) 以强制在组织中使用 IP 地址管理器。有关更多信息,请参阅使用强制使用 IPAM 创建 VPC。 SCPs
控制资源共享 — 谨慎管理 IP 地址管理器资源共享的范围 AWS RAM。有关更多信息,请参阅使用共享 IPAM 池。 AWS RAM
强制标记 – 对与 IP 地址管理器相关的所有资源实施强制性标记。有关更多信息,请参阅其他信息部分中的标记策略。
操作说明
| Task | 说明 | 所需技能 |
|---|---|---|
启用 AWS Organizations 功能。 | 确保 AWS Organizations 已启用所有功能。有关说明,请参阅 AWS Organizations 文档 AWS Organizations中的为组织启用所有功能。 | AWS 管理员 |
在中启用资源共享 AWS RAM。 | 使用输入以下命令为您的组织启用 AWS RAM 资源共享: AWS CLI
有关更多信息,请参阅 AWS RAM 文档AWS Organizations中的启用资源共享。 | AWS 管理员 |
指定 IP 地址管理器的管理员。 | 在组织的管理帐户中 AWS CLI,使用输入以下命令,其中
注意通常,网络或网络中心账户将充当 IP 地址管理器的委派管理员。 有关更多信息,请参阅 IP 地址管理器文档中的将 IPAM 与 AWS 组织中的账户集成。 | AWS 管理员 |
| Task | 说明 | 所需技能 |
|---|---|---|
定义网络架构。 | 定义并记录您的网络架构,包括区域、业务部门和环境的 CIDR 范围。有关更多信息,请参阅 IP 地址管理器文档中的计划 IP 地址预调配。 | 网络工程师 |
克隆存储库。 |
| DevOps 工程师 |
配置变量。 |
| 网络工程师,Terraform |
部署 IP 地址管理器资源。 |
| Terraform |
验证部署。 |
| AWS 总负责人,网络工程师 |
| Task | 说明 | 所需技能 |
|---|---|---|
创建 VPC。 | 按照 Amazon VPC 文档创建 VPC 中的步骤操作。在选择 VPC 的 CIDR 范围时,请从您的区域、业务单元和环境资源池中分配下一个可用范围。 | AWS 总负责人、网络管理员、网络工程师 |
验证 CIDR 范围分配。 |
| AWS 总负责人、网络管理员、网络工程师 |
监控 IP 地址管理器。 | 配置与 IP 地址管理器资源分配相关的监控和警报。有关更多信息和说明,请参阅 IP 地址管理器文档中的使用 Amazon 监控 IPAM CloudWatch 和按资源监控 CIDR 使用情况。 | 常规 AWS |
强制使用 IP 地址管理器。 | 在中创建服务控制策略 (SCP) AWS Organizations ,要求组织中的成员在创建 VPC 时使用 IP 地址管理器。有关说明,请参阅 IP 地址管理器文档 SCPs中的强制使用 IPAM 创建 VPC。 | 常规 AWS、AWS 管理员 |
问题排查
| 问题 | 解决方案 |
|---|---|
Terraform 因找不到 IP 地址管理器资源而失败 | 确保 IP 地址管理器管理员帐户已正确授权,并且您的 AWS 提供商已通过该帐户的身份验证。 |
CIDR 范围分配失败 | 检查请求的 CIDR 范围是否在 IP 地址管理器池的可用范围内,并且未与现有分配重叠。 |
AWS RAM 共享问题 | 确认您的 AWS 组织已启用资源共享。确认共享中使用了正确的委托人,即组织 Amazon 资源名称 (ARN)。 AWS RAM |
池层次结构验证错误 | 确保子池 CIDR 范围正确包含在其父池 CIDR 范围内,并且未与兄弟池重叠。 |
超过 IP 地址管理器配额限制 | 请求增加 IP 地址管理器池的配额。有关更多信息,请参阅《服务配额用户指南》中的 Requesting a quota increase。 |
相关资源
AWS 服务 文档
AWS 博客文章
视频和教程
附加信息
与 AFT 集成
您可以将此解决方案与 AWS Control Tower Account Factory for Terraform (AFT) 集成,以确保新配置的账户自动接收正确的网络配置。通过在您的网络中心帐户中部署此 IPAM 解决方案,通过 AFT 创建的新帐户可以在创建时引用共享的 IP 地址管理器池。 VPCs
以下代码示例演示了使用 P AWS Systems Manager arameter Store 在账户自定义中集成 AFT:
# Get the IP Address Manager pool ID from Parameter Store data "aws_ssm_parameter" "dev_ipam_pool_id" { name = "/org/network/ipam/finance/dev/pool-id" } # Create a VPC using the IP Address Manager pool resource "aws_vpc" "this" { ipv4_ipam_pool_id = data.aws_ssm_parameter.dev_ipam_pool_id.value ipv4_netmask_length = 24 tags = { Name = "aft-account-vpc" } }
标记策略
此解决方案实施了全面的标记策略,可促进资源管理。以下代码示例演示了如何使用此策略:
# Example tag configuration module "tags" { source = "./modules/tags" # Required tags product_name = "enterprise-network" feature_name = "ipam" org_id = "finance" business_unit = "network-operations" owner = "network-team" environment = "prod" repo = "https://github.com/myorg/ipam-terraform" branch = "main" cost_center = "123456" dr_tier = "tier1" # Optional tags optional_tags = { "project" = "network-modernization" "stack_role" = "infrastructure" } }
这些标签会自动应用于所有 IP 地址管理器资源。这有助于实现一致的治理、成本分摊和资源管理。