3、IDP自助门户蓝图概述
3.1 什么是IDP(内部开发者平台)
内部开发者平台(Internal Developer Platform,IDP)是一套由平台工程团队构建的自服务基础设施层,它抽象了底层云资源的复杂性,为应用开发者提供标准化的部署路径。IDP 的核心目标是通过“黄金路径”(Golden Path)降低认知负荷,让开发者无需理解 VPC 子网、Kubernetes 控制平面或数据库副本等底层细节,即可安全、快速地交付业务功能。
- 面向角色:IDP 专为内部应用开发者设计,而非云管理员。
- 抽象层次:提供“环境”和“服务”等业务概念,而非“实例”和“安全组”。
- 治理内嵌:合规策略(如 Terraform 准入控制)在平台层强制实施,开发者无法绕过。
- 自助体验:通过 Web 门户或 CLI 触发,无需提交工单或等待运维排期。
在 IDP 架构中,Terraform 是基础设施声明式引擎,而自助门户是前端交互层。开发者通过门户选择蓝图、填写参数,门户调用 Terraform 工作流(如 Terraform Cloud 或 Atlantis)执行资源编排。准入策略(如 OPA/Sentinel 策略)在 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。
3.4 蓝图与 Terraform 模块的关系
蓝图并非简单的 Terraform 模块引用,而是模块 + 策略 + 默认值 + 审批流程的组合体。以下对比表清晰展示了两者的区别:
| 维度 | Terraform 模块 | IDP 蓝图 |
|---|---|---|
| 使用者 | 基础设施工程师 | 应用开发者 |
| 输入 | 所有变量(可能包含敏感参数) | 仅暴露业务相关参数(环境、大小、名称) |
| 策略 | 无内置策略,依赖外部 CI/CD | 蓝图内嵌准入策略,部署时自动执行 |
| 版本管理 | SemVer 标签 | 蓝图版本 + 模块版本双轨控制 |
| 审批 | 通常无,或通过 PR 流程 | 根据变更风险等级自动触发审批(如高风险需架构师批准) |
variable "ingress_rules" 接受任意列表),这会绕过准入策略。正确的做法是:蓝图封装模块,并在蓝图层固定或限制高风险参数。
3.5 蓝图版本化与生命周期
每个蓝图应遵循语义化版本管理,并定义清晰的生命周期阶段:
- 草稿(Draft):蓝图正在开发中,仅平台工程师可见。
- 候选(Candidate):蓝图通过内部测试,允许少量开发团队试用。
- 稳定(Stable):蓝图经过安全审计和策略验证,对所有开发者开放。
- 弃用(Deprecated):蓝图即将被替代,仍可使用但显示警告。
- 退役(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])
}
通过将蓝图版本纳入准入策略,平台团队可以实现渐进式策略增强:旧版本蓝图允许一定程度的宽松策略,而新版本蓝图强制更严格的安全基线,从而在不中断现有业务的前提下推动基础设施现代化。