3、IDP自助门户蓝图概述

3.1 什么是IDP(内部开发者平台)

内部开发者平台(Internal Developer Platform,IDP)是一套由平台工程团队构建的自服务基础设施层,它抽象了底层云资源的复杂性,为应用开发者提供标准化的部署路径。IDP 的核心目标是通过“黄金路径”(Golden Path)降低认知负荷,让开发者无需理解 VPC 子网、Kubernetes 控制平面或数据库副本等底层细节,即可安全、快速地交付业务功能。

IDP 与传统 IaaS/PaaS 的关键区别:
  • 面向角色:IDP 专为内部应用开发者设计,而非云管理员。
  • 抽象层次:提供“环境”和“服务”等业务概念,而非“实例”和“安全组”。
  • 治理内嵌:合规策略(如 Terraform 准入控制)在平台层强制实施,开发者无法绕过。
  • 自助体验:通过 Web 门户或 CLI 触发,无需提交工单或等待运维排期。

在 IDP 架构中,Terraform 是基础设施声明式引擎,而自助门户是前端交互层。开发者通过门户选择蓝图、填写参数,门户调用 Terraform 工作流(如 Terraform Cloud 或 Atlantis)执行资源编排。准入策略(如 OPA/Sentinel 策略)在 Terraform 计划阶段拦截高风险变更,确保每个自助请求都符合组织安全基线。

IDP 核心架构与交互流程 应用开发者 自助门户 (蓝图选择 + 参数输入) Terraform 工作流 (计划 → 准入 → 应用) 选择蓝图 触发部署 准入策略引擎(OPA / Sentinel) 拦截高风险变更:公开子网、特权容器、弱密码等 计划输出 通过/拒绝 目标云资源(VPC / K8s / 数据库) 由 Terraform 声明式管理 应用通过

3.2 自助门户蓝图的作用

蓝图(Blueprint)是 IDP 中预定义的基础设施模板,它将 Terraform 模块、变量、策略和默认值打包为一个可重复使用的“服务目录项”。蓝图的作用可归纳为以下四个维度:

维度 说明 对高风险变更的影响
标准化 强制使用经过审核的 Terraform 模块版本,禁止自定义裸资源 从源头消除配置漂移和未授权资源类型
参数化 仅暴露必要的输入变量(如实例规格、存储大小),隐藏内部细节 限制高风险参数(如安全组规则、IAM 权限)的修改范围
策略绑定 每个蓝图关联一组准入策略,在 Terraform plan 阶段执行 确保高风险变更(如公开暴露端口)在部署前被拦截
可观测性 自动记录每次部署的蓝图版本、参数和审批人 提供高风险变更的完整审计追踪
最佳实践:每个蓝图应包含一个 policy/ 目录,存放与该蓝图绑定的 OPA Rego 或 Sentinel 策略文件。例如,VPC 蓝图应包含“禁止创建非隔离子网”策略,K8s 蓝图应包含“禁止特权容器”策略。

3.3 常见蓝图类型

根据组织的基础设施需求,IDP 通常提供以下三类核心蓝图。每类蓝图都对应一组特定的高风险变更场景,需要准入策略重点覆盖。

3.3.1 VPC 蓝图

VPC 蓝图用于创建隔离的网络环境,包括子网、路由表、NAT 网关、安全组和网络 ACL。开发者只需选择“环境类型”(开发/测试/生产)和“CIDR 范围”,平台自动生成符合网络分段策略的完整拓扑。

  • 高风险变更示例:将子网设置为 map_public_ip_on_launch = true、开放 0.0.0.0/0 入站规则、删除 VPC 流日志。
  • 准入策略要点:强制所有生产子网为私有子网;禁止安全组规则中源 IP 为 0.0.0.0/0 且端口为 22/3389;要求 VPC 流日志必须启用。

3.3.2 K8s 集群蓝图

K8s 集群蓝图封装了托管 Kubernetes 集群(如 EKS、AKS、GKE)的创建,包括节点组、IAM 角色、网络插件和附加组件。开发者可指定节点实例类型、最小/最大节点数,以及是否启用集群自动缩放。

  • 高风险变更示例:节点组使用 t2.micro 等过小实例导致性能瓶颈、允许匿名 API 访问、禁用审计日志。
  • 准入策略要点:强制节点实例类型至少为 4 vCPU/16 GB;要求集群端点私有访问;禁止 --anonymous-auth=true 标志。

3.3.3 数据库蓝图

数据库蓝图提供关系型(RDS、Cloud SQL)和 NoSQL(DynamoDB、Cosmos DB)数据库的标准化部署。开发者选择引擎类型、存储容量和备份窗口,平台自动配置多可用区、加密和自动备份。

  • 高风险变更示例:禁用存储加密、备份保留期设为 0 天、公开数据库端点、使用 db.t2.micro 等突发性能实例。
  • 准入策略要点:强制所有数据库启用静态加密(KMS);要求备份保留期 ≥ 7 天;禁止数据库安全组开放 0.0.0.0/0。
三类蓝图与高风险变更映射 VPC 蓝图 网络隔离 + 安全组 高风险变更 • 公开子网 (map_public_ip) • 0.0.0.0/0 入站规则 • 禁用 VPC 流日志 K8s 集群蓝图 托管集群 + 节点组 高风险变更 • 过小实例类型 • 匿名 API 访问 • 禁用审计日志 数据库蓝图 RDS / NoSQL 高风险变更 • 禁用存储加密 • 备份保留期 = 0 • 公开数据库端点 Terraform 准入策略:在 plan 阶段拦截所有高风险变更 OPA/Sentinel 策略 → 拒绝 → 返回错误信息给自助门户

3.4 蓝图与 Terraform 模块的关系

蓝图并非简单的 Terraform 模块引用,而是模块 + 策略 + 默认值 + 审批流程的组合体。以下对比表清晰展示了两者的区别:

维度 Terraform 模块 IDP 蓝图
使用者 基础设施工程师 应用开发者
输入 所有变量(可能包含敏感参数) 仅暴露业务相关参数(环境、大小、名称)
策略 无内置策略,依赖外部 CI/CD 蓝图内嵌准入策略,部署时自动执行
版本管理 SemVer 标签 蓝图版本 + 模块版本双轨控制
审批 通常无,或通过 PR 流程 根据变更风险等级自动触发审批(如高风险需架构师批准)
常见误区:不要将 Terraform 模块直接暴露为蓝图。模块通常包含过多灵活性(如 variable "ingress_rules" 接受任意列表),这会绕过准入策略。正确的做法是:蓝图封装模块,并在蓝图层固定或限制高风险参数。

3.5 蓝图版本化与生命周期

每个蓝图应遵循语义化版本管理,并定义清晰的生命周期阶段:

  1. 草稿(Draft):蓝图正在开发中,仅平台工程师可见。
  2. 候选(Candidate):蓝图通过内部测试,允许少量开发团队试用。
  3. 稳定(Stable):蓝图经过安全审计和策略验证,对所有开发者开放。
  4. 弃用(Deprecated):蓝图即将被替代,仍可使用但显示警告。
  5. 退役(Retired):蓝图不可再用于新部署,现有部署需迁移。

在 Terraform 准入策略上下文中,蓝图版本是策略评估的输入参数之一。例如,策略可以规定:仅允许使用 v2.x 及以上版本的 VPC 蓝图,因为早期版本缺少强制流日志功能。

# 示例:蓝图版本约束的 OPA 策略片段
package terraform.admission.blueprint

# 仅允许 VPC 蓝图 v2.0.0 及以上版本
deny[msg] {
  input.blueprint.type == "vpc"
  semver.compare(input.blueprint.version, "2.0.0") == -1
  msg = sprintf("VPC 蓝图版本 %v 已弃用,请使用 v2.0.0 或更高版本", [input.blueprint.version])
}

通过将蓝图版本纳入准入策略,平台团队可以实现渐进式策略增强:旧版本蓝图允许一定程度的宽松策略,而新版本蓝图强制更严格的安全基线,从而在不中断现有业务的前提下推动基础设施现代化。