Terraform护栏多云策略(MCP)(TerraGuard)

v5.0自治治理是最新版本。 Terraform护栏现在从 解释治理决策以操作治理循环:补救计划、PR就绪修复 指导、GitHub PR自动化、计划治理循环、趋势仪表板和健康信号 基于评估、证据和豁免而构建。
Terraform护栏多云策略(MCP)(TerraGuard)在Terraform外部运行并转向平台 将标准转化为可执行的CI/CD护栏。它为平台团队提供了策略生命周期管理, 开发人员快速反馈,审计员可追溯的证据,而不会减缓交付。
将其用作CLI、REST API、web UI、MCP服务器或CI门。从内置的TG001-TG023规则开始 编目、添加企业元数据和审批,然后在整个系统中推出通过/警告/阻止决策 GitHub、GitLab、Azure DevOps和AWS CodePipeline。
企业案例研究:https://github.com/Huzefaaa2/terraform-guardrail/wiki/Enterprise-Case-Studies
v1-v5全平台直播应用:https://terraform-guardrail-platform.streamlit.app/
Terraform Guardrail v5 Autonomous Governance feature map
Terraform Guardrail v4 Intelligent feature map
Terraform Guardrail v3 Ecosystem feature map
Terraform Guardrail v2 Enterprise feature map
Terraform Guardrail v1 Foundation feature map
- 发行说明:https://github.com/Huzefaaa2/terraform-guardrail/releases/tag/v5.0.0
- 企业维基:https://github.com/Huzefaaa2/terraform-guardrail/wiki/Release-v2.0.0
- v3生态系统发布:https://github.com/Huzefaaa2/terraform-guardrail/wiki/Release-v3.0.0
- v4智能版本:https://github.com/Huzefaaa2/terraform-guardrail/wiki/Release-v4.0.0
- v5自治治理版本:https://github.com/Huzefaaa2/terraform-guardrail/wiki/Release-v5.0.0
- 贡献:https://github.com/Huzefaaa2/terraform-guardrail/blob/main/CONTRIBUTING.md
- v1基金会实时应用程序:https://terraform-guardrail.streamlit.app/
- v2企业版实时应用程序:https://terraform-guardrail-enterprise.streamlit.app/
- v3-v5治理实时应用程序:https://terraform-guardrail-governance.streamlit.app/
- v1-v5全平台直播应用:https://terraform-guardrail-platform.streamlit.app/
- 企业案例研究:https://github.com/Huzefaaa2/terraform-guardrail/wiki/Enterprise-Case-Studies
- 作者:胡泽发·侯赛因https://www.linkedin.com/in/huzefaaa
使用v1和v2应用程序进行重点演示。使用v3-v5治理应用程序进行连接 企业之旅:政策包、智能评估、补救、PR自动化、计划 治理、证据时间表和健康报告。使用v1-v5全平台应用程序 希望在一个GUI中显示完整的产品故事。新的案例研究维基部分解释了七个 企业采用案例,包括安装步骤和功能演练。
Terraform护栏多云策略(MCP)(TerraGuard)
使基础设施治理可执行
我们正在解决的问题
尽管使用了Terraform和安全扫描程序,企业仍然面临:
- 各团队执行不一致
- 政策实施过晚
- 不可扩展的手动审查
- 对“标准”的不同解读
- 由偏差而非意图引起的审计结果
👉 问题不在于缺乏工具--\ 👉 问题在于缺乏治理分配机制。
什么是Terraform护栏多云策略(MCP)
Terraform Guardrail多云策略(MCP)是Terraform的企业级IaC治理和护栏平台 它直接在CI/CD中强制执行架构意图、合规性和平台标准。
它
- 建立不可谈判的安全底线
- 通过CI/CD一致地分配护栏
- 实现渐进式执行(咨询→ Warn → 严格)
- 使治理版本化、可审计和可重复
治理变成了代码,而不是文档。
适合的地方(生态系统视图)
| 层 | 角色 |
|---|---|
| Terraform护栏多云策略(MCP) | 治理和执行编排 |
| Checkov/tfsec/Terrascan | 深度静态安全与合规性扫描 |
| OPA/Sentinel | 高级和运行时策略执行 |
| CI/CD(GitLab/GitHub) | 执行与控制点 |
Terraform护栏不会取代现有的工具——它连接并操作它们。
它是如何工作的(一行)
每一个地形变化在到达云层之前都会穿过同样的护栏。
实施时间:
- 合并请求/拉取请求阶段
- GitLab组级CI实施
- 无回购谈判
企业采用模式
| 阶段 | 模式 | 业务成果 |
|---|---|---|
| 第1阶段 | 咨询 | 可见性,零中断 |
| 第2阶段 | 警告 | 无阻碍的问责制 |
| 第3阶段 | 严格 | 产品强制合规 |
✔ 没有“大爆炸”的推出\ ✔ 团队将自主性置于安全之上
企业为什么要采用地形护栏
没有它:
- 治理依赖于人员和流程
- 控制随时间漂移
- 审计补救措施很昂贵
有了它:
- 治理是自动和一致的
- 安全转移到CI
- 默认情况下生成审计证据
- 平台团队可扩展而不会成为瓶颈
底线(高管离职)
Terraform护栏多云策略(MCP)转向基础设施治理\ 从指导方针到保证。
它实现了速度和安全性,而无需以一个换取另一个。
设计原则
不可协商的安全地板,上面可以自由组合。护栏就住在Terraform外面 平台团队可以强制执行基线不变量,而产品团队则保持敏捷性。
用户视角(高级)
flowchart LR
USER[Platform + Product Teams] --> CHANNELS[CLI / UI / REST API / CI]
CHANNELS --> GUARDRAIL[TerraGuard Control Plane]
GUARDRAIL --> POLICIES[Baseline + Context Policies]
GUARDRAIL --> REPORTS[Guidance + Evidence]
GUARDRAIL --> TERRAFORM[Safer Terraform Applies]
classDef actor fill:#e3f2fd,stroke:#1565c0,stroke-width:1px,color:#0d47a1;
classDef channel fill:#f3e5f5,stroke:#6a1b9a,stroke-width:1px,color:#4a148c;
classDef core fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px,color:#1b5e20;
classDef output fill:#fff3e0,stroke:#ef6c00,stroke-width:1px,color:#e65100;
class USER actor;
class CHANNELS channel;
class GUARDRAIL,POLICIES core;
class REPORTS,TERRAFORM output;开发人员使用护栏的方式
flowchart TB
DEV[Developer] --> CLI[CLI]
DEV --> UI[Web UI]
DEV --> API[REST API]
DEV --> MCP["Multi-Cloud Policy (MCP)"]
DEV --> GHA[GitHub Action]
DEV --> GL[GitLab CI]
DEV --> ADO[Azure DevOps]
CLI --> GUARDRAIL[TerraGuard]
UI --> GUARDRAIL
API --> GUARDRAIL
MCP --> GUARDRAIL
GHA --> GUARDRAIL
GL --> GUARDRAIL
ADO --> GUARDRAIL
classDef actor fill:#e3f2fd,stroke:#1565c0,stroke-width:1px,color:#0d47a1;
classDef channel fill:#ede7f6,stroke:#5e35b1,stroke-width:1px,color:#311b92;
classDef core fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px,color:#1b5e20;
class DEV actor;
class CLI,UI,API,MCP,GHA,GL,ADO channel;
class GUARDRAIL core;当前能力
- 带摘要和CSV导出的多文件扫描
- 秘密卫生检查
.tf,.tfvars,以及.tfstate - 通过Terraform CLI集成进行模式感知验证
- 通过Terraform注册表查找提供程序元数据
- 用于扫描、元数据和代码段生成的多云策略(MCP)工具
- 用于即时报告的流线型和web UI
- 用于CI/CD采用的停靠REST API
- Docker Compose开发堆栈(API+UI+策略注册表,可选分析)
- 护栏包的OPA捆绑就绪策略注册表
- 通过带有可选签名验证的OPA包进行策略评估
- 最小策略注册表API(版本+审核历史记录)
支持的提供商
- 亚马逊云服务
- Azure
- 谷歌云平台
- Kubernetes
- 舵
- OCI
- 金库
- 阿利克劳德
- vSphere
☁️ AWS支持
Terraform护栏提供 对AWS环境的一流支持 并且被设计为 通过强制执行来补充AWS本机治理服务 预先部署的、具有国际航空安全意识的护栏.
与部署后或在帐户边界操作的AWS本机控件不同, Terraform Guardrail执行架构、安全和合规政策 在Terraform之前 应用,直接位于CI/CD管道内。
支持的AWS CI/CD集成
- GitHub操作 (主要AWS CI集成)
- GitLab 的 (广泛应用于受监管的AWS企业)
- AWS CodePipeline+CodeBuild (通过buildspec集成)
AWS特定功能
- 针对AWS的Terraform预应用护栏执法
- 具有账户和环境意识的政策评估
- OU对齐的护栏(旨在补充AWS组织)
- 在控制塔对齐的环境中执行左移
- 审计证据生成(SOC2、ISO、PCI)
Terraform Guardrail使平台团队能够定义 组织范围内的AWS标准 和 确保在基础设施之前,跨账户、管道和团队一致地执行这些标准 到达AWS。
特征矩阵
| 区域 | CLI | Web UI/Streamlit |
|---|---|---|
配置扫描(.tf, .tfvars, .hcl) | 是 | 是 |
状态泄漏扫描(.tfstate) | 是 | 是 |
| 架构感知验证 | 是 | 是 |
| CSV导出 | 否 | 是 |
| 提供程序元数据 | 是 | 是 |
| 代码段生成 | 是 | 否 |
| 多文件扫描 | 是(目录) | 是(最多上传10个) |
| 人类可读报告 | 是 | 是 |
| 策略包注册表 | 是 | 否 |
| 政策评估(OPA捆绑包) | 是 | 否 |
建筑(高级)
flowchart TB
subgraph Interfaces
CLI([CLI])
MCP(["Multi-Cloud Policy (MCP) Server"])
WEB([Web UI])
API([REST API])
STL([Streamlit App])
end
subgraph Core
SCAN((Compliance Engine))
GEN[[Snippet Generator]]
POLICY{Policy Layering}
end
subgraph Integrations
TF[/Terraform CLI/]
REG[(Terraform Registry)]
end
CLI --> SCAN
WEB --> SCAN
API --> SCAN
STL --> SCAN
MCP --> SCAN
MCP --> GEN
SCAN --> POLICY --> TF
GEN --> REG
classDef interface fill:#e3f2fd,stroke:#1e88e5,stroke-width:1px,color:#0d47a1;
classDef core fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px,color:#1b5e20;
classDef integration fill:#fff3e0,stroke:#ef6c00,stroke-width:1px,color:#e65100;
class CLI,MCP,WEB,API,STL interface;
class SCAN,GEN,POLICY core;
class TF,REG integration;架构(详细流程)
flowchart TB
INPUTS[Inputs: .tf, .tfvars, .tfstate] --> PARSE[Parse & Normalize]
PARSE --> SCHEMA[Provider Schema + Metadata]
SCHEMA --> RULES[Apply Guardrail Rules]
RULES --> REPORT[Findings + Summary]
REPORT --> OUTPUTS["CLI JSON / UI / Multi-Cloud Policy (MCP) / REST"]注意:Mermaid图在GitHub和Wiki上呈现。PyPI将显示原始块。
路线图(主要发布)
传说: ✅ 已送达 • 🚧 计划的
| 可交付成果 | v1.0基础 | v2.0企业 | v3.0生态系统 | v4.0智能 | 文档 | |
|---|---|---|---|---|---|---|
| 停靠式多云策略(MCP)+REST API | ✅ 已交付(0.2.x) | 文档 | ||||
| CLI首次安装 | ✅ 已交付(0.2.x) | 文档 | ||||
| Docker编写本地堆栈(API+UI+注册表) | ✅ 已交付(0.2.x) | 文档 | ||||
| GitHub行动预申请/PR检查 | ✅ 已交付(0.2.x) | 文档 | ||||
| 中央护栏登记簿 | ✅ 已交付(1.0.x) | 文档 | ||||
| 策略版本控制+审计跟踪 | ✅ 已交付(1.0.x) | 文档 | ||||
| 注册表服务映像(GHCR) | ✅ 已交付(1.0.x) | 文档 | ||||
| 自制软件包(macOS) | ✅ 已交付(1.0.x) | 文档 | ||||
| 通过PyPI安装Windows | ✅ 已交付(0.2.x) | 文档 | ||||
| Linux安装脚本(curl | bash) | ✅ 已交付(1.0.x) | 文档 | |||
| GitLab CI模板 | ✅ 已交付(1.0.x) | 文档 | ||||
| Azure DevOps/工作流扩展 | ✅ 已交付(1.0.x) | 文档 | ||||
| 策略分层模型(基础→ env → 应用程序) | ✅ 已交付(1.0.x) | 文档 | ||||
| 自定义规则(选项A/B+本地捆绑包) | ✅ 已交付(1.0.x) | 文档 | ||||
| AWS CodePipeline+CodeBuild集成 | ✅ 已交付(2.0.0) | 文档 | ||||
| 策略编写UI | ✅ 已交付(2.0.0) | 文档 | ||||
| 策略元数据+丰富的失败消息 | ✅ 已交付(2.0.0) | 文档 | ||||
| 应用前防漂移规则 | ✅ 已交付(2.0.0) | 文档 | ||||
| 全组织基线 | ✅ 已交付(2.0.0) | 文档 | ||||
| 集团级执行 | ✅ 已交付(2.0.0) | 文档 | ||||
| 证据导出(SOC2/ISO/PCI) | ✅ 已交付(2.0.0) | 文档 | ||||
| 贡献者治理+公共路线图 | ✅ 已交付(v3.0开发版) | 文档 | ||||
| 跨工具的参考实现 | ✅ 已交付(v3.0开发版) | 文档 | ||||
| 跨提供者不变强制 | ✅ 已交付(v3.0开发版) | 文档 | ||||
| 护栏——服务API | ✅ 已交付(v3.0开发版) | 文档 | ||||
| 企业策略包 | ✅ 已交付(v3.0开发版) | 文档 | ||||
| 上下文感知评估 | ✅ 已交付(v4.0开发) | 文档 | ||||
| 建议修复+建议 | ✅ 已交付(v4.0开发) | 文档 | ||||
| 可解释性报告+CI注释输出 | ✅ 已交付(v4.0开发) | 文档 | ||||
| 企业SARIF/JUnit网桥 | ✅ 已交付(v4.0开发) | 文档 | ||||
| 政策豁免和例外 | ✅ 已交付(v4.0开发) | 文档 |
与其他工具的比较
Terraform Guardrail多云策略(MCP)(TerraGuard)对IaC治理采取了与传统方法截然不同的方法 扫描或梳理工具。Guardrail作为多云策略(MCP)服务器交付,具有 CLI和web UI。它在Terraform之外运行,公开提供者元数据、扫描配置和状态 用于敏感值,并生成人类可读的报告。它的规则引擎专注于秘密 卫生和只写论点,让平台团队发布不可谈判的护栏,同时 产品团队组成上下文约束。
相比之下,现有的工具,如Checkov、TFLint和OPA/Conftest,主要作为静态代码运行 CI管道中嵌入的分析仪。他们扫描Terraform文件或计划以查找配置错误,但确实如此 不提供集中式控制平面或跨提供商上下文。下表总结了 主要区别:
| 类别 | 护栏多云策略(MCP) | Checkov | TFLint | OPA/Conftest |
|---|---|---|---|---|
| 主要目的 | 外部IaC治理控制平面 | 静态多IaC安全扫描器 | Terraform linter | 通用策略引擎(Rego) |
| IaC支持 | Terraform+多云提供商(AWS、Azure、GCP、Kubernetes、Helm、OCI、Vault、vSphere、Alicloud) | Terraform、CloudFormation、Kubernetes、Helm、ARM、无服务器 | Terraform(HCL) | 通过Rego策略的任何域 |
| 政策模型 | 中央护栏登记处;平台不变量+产品约束;版本化和可审计 | 内置规则(Python/Rego)+自定义策略 | 特定于提供商的规则插件;实验性Rego插件 | 仅限Rego规则 |
| 执行阶段 | 预申请;防止不良状态和漂移;使用提供者模式 | 模板和计划的预应用扫描 | 对错误和最佳实践偏差进行预应用linting | 预应用检查(通过Conftest)-结果取决于集成 |
| 治理与审计 | 组织级护栏注册表、所有权边界、审计跟踪 | 无策略生命周期管理 | 无策略注册表 | 无治理功能 |
| 开发人员经验 | CLI/Server/Web UI;人类可读的报告和修复建议 | 具有JSON/SARIF/JUnit输出和图形洞察的CLI | 具有JSON/SERIF/JUnit输出的CLI;可配置警告 | CLI库;陡峭的学习曲线 |
为什么护栏与扫描仪相辅相成
Checkov提供了一个庞大的策略库和基于图的资源分析来捕捉错误配置 早期,TFLint提供了可插拔的、支持提供者的linting规则来检测无效类型,现已弃用 语法和最佳实践会漂移。这些工具对于Terraform代码的静态分析仍然很有价值。 护栏多云策略(MCP)通过充当高阶控制平面来构建它们:它使用提供者元数据 验证模式使用情况,在Terraform改变状态之前防止秘密泄漏和漂移,以及 将平台拥有的安全层与产品级约束分开。在实践中,团队经常跑步 TFLint或Checkov在其CI中捕获编码错误,而Guardrail作为最后一行 防御,以加强组织护栏并提供情境指导。
Terraform护栏与AWS原生治理工具
| 功能 | 地形护栏 | AWS原生工具 |
|---|---|---|
| Terraform预应用强制执行 | ✅ 是 | ❌ 没有 |
| CI/CD策略门 | ✅ 是 | ❌ 没有 |
| IaC意识护栏 | ✅ 是 | ❌ 没有 |
| AWS组织意识 | ✅ 组织/集团/回购基线 | ⚠️ 仅限帐户级别 |
| 控制塔集成 | 🚧 陪伴模式 | ⚠️ 仅限平台 |
| 防漂移(预部署) | ✅ 是 | ❌ 仅部署后 |
| 策略版本控制和审计跟踪 | ✅ 是 | ❌ 有限 |
| 多云奇偶校验 | ✅ 是 | ❌ 仅AWS |
| 审计证据导出 | ✅ JSON/CSV/PDF | ⚠️ 支离破碎 |
摘要
AWS原生治理工具 部署后和以基础设施为中心.\ Terraform护栏提供 预部署、架构感知、IaC原生护栏 那 补充AWS治理,而不是取代它。
快速入门
python -m venv .venv
source .venv/bin/activate
pip install -e "[dev]"
# CLI scan
terraform-guardrail scan examples
# snippet generation
terraform-guardrail generate aws aws_s3_bucket --name demo
# list policy bundles
terraform-guardrail policy list
# registry API
terraform-guardrail registry-api
# Multi-Cloud Policy (MCP) server (stdio)
terraform-guardrail mcp
# Web UI
terraform-guardrail web从PyPI安装
pip install terraform-guardrailPyPI:https://pypi.org/project/terraform-guardrail/(最新版本:5.0.0)
例子
这 examples/ 文件夹提供实用的CI模拟:
examples/fixtures/包括好的和坏的地形输入(.tf,.tfvars,.hcl,.tfstate).examples/gitlab-ci/包含GitLab模板示例和示例输出。examples/github-actions/包含GitHub Actions工作流和示例输出。examples/aws-codepipeline/包含CodeBuild构建规范和示例企业证据输出。
每个示例文件夹都包含一个 README.md 具有步骤和预期的输出格式(JSON、SARIF、JSON等), JUnit、CSV)。
安装程序选项
包装工件在发布标签上生成。发布时启用Homebrew发布 配置了秘密。Windows用户使用Python从PyPI安装。
自制(macOS)
brew install Huzefaaa2/tap/terraform-guardrailWindows(PyPI)
py -m pip install terraform-guardrailLinux(curl | bash)
curl -sSL https://github.com/Huzefaaa2/terraform-guardrail/releases/latest/download/install.sh | bash包装细节: docs/packaging.md.
CLI示例
完整CLI命令参考: commands.md.
# scan a directory
terraform-guardrail scan ./examples --format json
# scan state files too
terraform-guardrail scan ./examples --state ./examples/sample.tfstate
# enable schema-aware validation (requires terraform CLI + initialized workspace)
terraform-guardrail scan ./examples --schema
# evaluate OPA policy bundle (requires opa CLI)
terraform-guardrail scan ./examples --policy-bundle baseline
# fail CI on medium+ findings
terraform-guardrail scan ./examples --fail-on medium合规规则(内置)
在wiki上查看完整列表:https://github.com/Huzefaaa2/terraform-guardrail/wiki/Compliance-Rules
| 规则ID | 描述 | 严重性 |
|---|---|---|
| TG001 | 敏感变量缺失 ephemeral = true | 中等 |
| TG002 | 配置或tfvars中的硬编码秘密 | 高 |
| TG003 | 状态中存储的敏感外观值 | 高 |
| TG004 | HCL解析错误 | 低 |
| TG005 | 在提供程序架构中找不到属性 | 中等 |
| TG006 | 检测到公共S3存储桶ACL | 高 |
| TG007 | 公共S3访问阻止已禁用 | 高 |
| TG008 | 安全组入口向全世界开放 | 高 |
| TG009 | IAM策略通配符权限 | 高 |
| TG010 | 在计算上启用公共IP关联 | 中等 |
| TG011 | S3存储桶缺少默认加密 | 中等 |
| TG012 | RDS存储未加密 | 中等 |
| TG013 | 负载均衡器侦听器使用HTTP | 中等 |
| TG014 | 实例缺少子网/VPC边界 | 低 |
| TG015 | RDS实例可公开访问 | 高 |
| TG016 | 缺少必需的资源标签 | 低 |
| TG017 | 资源区域/位置不在允许列表中 | 中等 |
| TG018 | 实例类型或SKU不在允许列表中 | 中等 |
| TG019 | 启用Azure存储帐户公共网络访问 | 中等 |
| TG020 | EBS卷未加密 | 中等 |
自定义规则(选项A/选项B)
选项A——环境旋钮(无代码):
export GUARDRAIL_REQUIRED_TAGS="owner,environment,cost_center"
export GUARDRAIL_ALLOWED_REGIONS="eastus,westus2"
export GUARDRAIL_ALLOWED_INSTANCE_TYPES="t3.medium,t3.large"
terraform-guardrail scan ./infra选项B——OPA政策包(推荐):
terraform-guardrail policy init --destination ./my-bundle --bundle-name guardrail
opa build --bundle ./my-bundle --output my-bundle.tar.gz
terraform-guardrail policy validate ./my-bundle.tar.gz
terraform-guardrail scan ./infra --policy-bundle-path ./my-bundle.tar.gz完整指南:https://github.com/Huzefaaa2/terraform-guardrail/wiki/Custom-Rules
Web 用户界面
访问 http://127.0.0.1:8000 并上传Terraform文件或文件夹以运行智能 企业评价。web UI显示匹配的风险状况、基于上下文的严重程度 调整,并在标准调查结果的基础上提出修复建议。
Streamlit应用程序
Terraform Guardrail保持专注的应用程序和一个完整的平台应用程序。v1和v2保持专注, v3-v5显示了连接的治理循环,v1-v5完整平台提供了一个单一的执行和 从业者工作空间。
| 应用程序 | 目的 | 主文件 | 实时URL |
|---|---|---|---|
| v1 Foundation | 扫描程序、状态泄漏检查、模式感知验证 | streamlit_app.py | https://terraform-guardrail.streamlit.app/ |
| v2企业+情报 | 政策制定、组织基线、漂移门、证据导出、风险简介、建议修复、豁免演示 | streamlit_app_v2.py | https://terraform-guardrail-enterprise.streamlit.app/ |
| v3-v5治理 | 策略包、可解释性、SARIF/JUnit、补救计划、PR模拟运行、计划扫描、证据计划、健康和趋势仪表板 | streamlit_app_v3_v5.py | https://terraform-guardrail-governance.streamlit.app/ |
| v1-v5全平台 | 扫描程序、策略目录、企业评估、策略包、漂移、证据、可解释性、补救、时间表、运行状况和案例研究剧本 | streamlit_app_full.py | https://terraform-guardrail-platform.streamlit.app/ |
运行v1 Foundation演示:
streamlit run streamlit_app.py运行v2 Enterprise演示:
streamlit run streamlit_app_v2.py运行v3-v5治理演示:
streamlit run streamlit_app_v3_v5.py运行v1-v5完整平台演示:
streamlit run streamlit_app_full.pyStreamlit云部署
- 将此仓库推送到GitHub。
- 使用主文件路径为v1创建一个Streamlit Cloud应用程序
streamlit_app.py. - 使用主文件路径为v2创建第二个Streamlit Cloud应用程序
streamlit_app_v2.py. - 使用主文件路径为v3-v5创建第三个Streamlit Cloud应用程序
streamlit_app_v3_v5.py. - 使用主文件路径为v1-v5创建第四个Streamlit Cloud应用程序
streamlit_app_full.py. - 部署(Streamlit将从安装
requirements.txt,使用Pythonruntime.txt,
并应用来自的共享主题 .streamlit/config.toml).
容器部署
运行v1 Foundation应用程序:
docker build -f Dockerfile.streamlit -t terraform-guardrail-streamlit:v1 .
docker run --rm -p 8501:8501 terraform-guardrail-streamlit:v1运行v2 Enterprise应用程序:
docker build -f Dockerfile.streamlit.v2 -t terraform-guardrail-streamlit:v2 .
docker run --rm -p 8502:8501 terraform-guardrail-streamlit:v2运行v3-v5治理应用程序:
docker build -f Dockerfile.streamlit.v3_v5 -t terraform-guardrail-streamlit:v3-v5 .
docker run --rm -p 8503:8501 terraform-guardrail-streamlit:v3-v5运行v1-v5完整平台应用程序:
docker build -f Dockerfile.streamlit.full -t terraform-guardrail-streamlit:full .
docker run --rm -p 8504:8501 terraform-guardrail-streamlit:fullREST API(Docker)
生成并运行API服务器:
docker build -t terraform-guardrail .
docker run --rm -p 8080:8080 terraform-guardrailAPI端点:
GET /healthGET /metricsPOST /scanPOST /provider-metadataGET /policy-bundlesGET /policy-bundles/{bundle_id}POST /generate-snippet
请求示例:
curl -X POST http://localhost:8080/scan \\
-H "Content-Type: application/json" \\
-d '{"path":"./examples","use_schema":false}'容器图像
拉取已发布的容器映像(基于发布标签构建):
docker pull ghcr.io/huzefaaa2/terraform-guardrail:latest运行它:
docker run --rm -p 8080:8080 ghcr.io/huzefaaa2/terraform-guardrail:latest注册表API映像:
docker pull ghcr.io/huzefaaa2/terraform-guardrail-registry:latest
docker run --rm -p 8090:8090 ghcr.io/huzefaaa2/terraform-guardrail-registry:latestDocker编写堆栈(本地开发)
调出API+Streamlit UI+策略注册表:
docker compose up --build启用可选分析(Prometheus+Grafana):
docker compose --profile analytics up --build服务URL:
- APIhttp://localhost:8080
- 流线型用户界面:http://localhost:8501
- 策略注册表(静态):http://localhost:8081
- 策略注册表API:http://localhost:8090
- Prometheus(分析配置文件):http://localhost:9090
- Grafana(分析简介):http://localhost:3000(管理员/护栏)
更多详情: docs/docker-compose-guide.md.
政策注册(OPA捆绑包)
本地策略注册表公开了护栏包的OPA包。使用CLI获取捆绑包:
terraform-guardrail policy list
terraform-guardrail policy fetch baseline --destination ./policies
terraform-guardrail policy fetch baseline-signed --destination ./policies策略评估仅在以下情况下运行 --policy-bundle 提供。如果捆绑包包括验证 设置(公钥+作用域),OPA CLI在评估之前验证捆绑包签名。
注册表API(撰写): GET /bundles, GET /bundles/{id}/versions, GET /audit.
签名包示例:
- 捆绑:
baseline-signed - 公钥:
http://localhost:8081/keys/guardrail.pub
flowchart LR
subgraph ComposeStack[Docker Compose Stack]
UI([Streamlit UI])
API([REST API])
REG[(Policy Registry)]
REGAPI([Registry API])
PROM[[Prometheus]]
GRAF[[Grafana]]
end
UI --> API
API -.-> REG
REGAPI -.-> REG
API --> PROM
PROM --> GRAF
classDef core fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px,color:#1b5e20;
classDef optional fill:#fff3e0,stroke:#ef6c00,stroke-width:1px,color:#e65100;
class UI,API,REG,REGAPI core;
class PROM,GRAF optional;策略分层(基础→ Env → App)
按可预测的顺序铺设分层护栏:
terraform-guardrail scan infra \
--policy-base baseline \
--policy-env prod \
--policy-app payments环境变量(备选):
GUARDRAIL_POLICY_BASEGUARDRAIL_POLICY_ENVGUARDRAIL_POLICY_APP
GitHub操作(预申请/PR检查)
使用内置操作扫描拉取请求中的Terraform更改:
name: Guardrail
on:
pull_request:
paths:
- "**/*.tf"
- "**/*.tfvars"
- "**/*.hcl"
- "**/*.tfstate"
jobs:
guardrail:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Start local policy registry
run: |
python -m http.server 8081 --directory ops/policy-registry &
- uses: ./.github/actions/guardrail
with:
path: .
fail_on: medium
install_source: repo
policy_bundle: baseline-signed
policy_registry: http://localhost:8081当 policy_bundle 设置后,该操作将自动安装OPA并验证签名(如果 已配置)。
GitLab CI模板
将共享模板包含在您的 .gitlab-ci.yml:
include:
- project: "Huzefaaa2/terraform-guardrail"
ref: "v2.0.0"
file: "/.gitlab/terraform-guardrail.yml"根据需要覆盖变量:
variables:
TERRAFORM_GUARDRAIL_SCAN_PATH: "infra"
TERRAFORM_GUARDRAIL_FAIL_ON: "high"
TERRAFORM_GUARDRAIL_FORMAT: "pretty"
TERRAFORM_GUARDRAIL_JSON_REPORT: "guardrail-report.json"
TERRAFORM_GUARDRAIL_WRITE_REPORT: "true"
TERRAFORM_GUARDRAIL_SARIF_REPORT: "guardrail-report.sarif"
TERRAFORM_GUARDRAIL_JUNIT_REPORT: "guardrail-report.junit.xml"
TERRAFORM_GUARDRAIL_WRITE_SARIF: "true"
TERRAFORM_GUARDRAIL_WRITE_JUNIT: "true"可选策略包评估:
guardrail_scan:
before_script:
- python -m http.server 8081 --directory ops/policy-registry &
variables:
TERRAFORM_GUARDRAIL_POLICY_BUNDLE: "baseline-signed"
TERRAFORM_GUARDRAIL_POLICY_REGISTRY: "http://localhost:8081"默认情况下,该模板会发出JSON、SARIF和JUnit报告工件。用以下命令禁用其中任何一个 TERRAFORM_GUARDRAIL_WRITE_REPORT, TERRAFORM_GUARDRAIL_WRITE_SARIF,或 TERRAFORM_GUARDRAIL_WRITE_JUNIT.
Azure DevOps管道
在中使用管道模板 /.azure/terraform-guardrail.yml.
trigger:
- main
pool:
vmImage: "ubuntu-latest"
steps:
- template: .azure/terraform-guardrail.yml
parameters:
path: "infra"
failOn: "high"
policyBundle: "baseline-signed"
policyRegistry: "http://localhost:8081"该模板发布JSON、SARIF和JUnit报告。禁用发布 publishReports: false.
Azure DevOps市场扩展
该回购还包括一个Marketplace扩展脚手架 azure-devops-extension/ 带着一个 Terraform Guardrail Scan 任务。使用构建它 tfx 并从您的ADO发布者帐户发布。
发布后管道使用示例:
steps:
- task: TerraformGuardrail@1
inputs:
path: "infra"
failOn: "high"
policyBundle: "baseline-signed"
policyRegistry: "http://localhost:8081"
jsonReport: "guardrail-report.json"
sarifReport: "guardrail-report.sarif"
junitReport: "guardrail-report.junit.xml"自动化: Azure DevOps Extension 当出现以下情况时,工作流会在标签推送时发布 设置了秘密:
ADO_PUBLISHERADO_EXT_PAT
发布链接
- PyPI:https://pypi.org/project/terraform-guardrail/
- GitHub发布:https://github.com/Huzefaaa2/terraform-guardrail/releases
- 容器图像:https://github.com/Huzefaaa2/terraform-guardrail/pkgs/container/terraform-guardrail
- 最新版本:v5.0.0
- 发布历史:
RELEASE.md - 企业特性:https://github.com/Huzefaaa2/terraform-guardrail/wiki/Enterprise-Features
许可
Terraform护栏在 商业来源许可证(BSL)1.1.
这意味着
✅ 免费用于:
- 企业内部平台
- CI/CD管道
- 评估、学习和实验
- 开源贡献
❌ 未经许可不得:
- 提供Terraform护栏作为付费产品或SaaS
- 将其嵌入到商业平台或服务中
- 直接转售或货币化软件
商业用途
商业用途需要 明确的书面许可 来自作者。
如果您希望:
- 提供Terraform护栏作为管理服务
- 将其嵌入商业平台
- 将其作为付费产品的一部分分发
请联系作者讨论许可选项。
许可常见问题
Q: 我可以在公司内部使用Terraform护栏吗?\ 对。未经许可,允许内部使用和CI/CD验证。
Q: 我可以将其作为付费SaaS或托管服务提供吗?\ 否。付费或货币化使用需要明确的书面许可。
Q: 什么时候成为Apache 2.0?\ 在许可证中定义的变更日期(自首次公开发布之日起4年)。
看 LICENSE 和 COMMERCIAL_USAGE.md 完整条款。
部署指导
看 docs/streamlit_cloud.md 了解Streamlit Cloud的详细演练。
发布检查表
- 更新版本
pyproject.toml. - 更新
RELEASE_NOTES.md和CHANGELOG.md. - 提交更改并推动
main. - 创建并推送标签:
git tag -a vX.Y.Z -m "vX.Y.Z"然后git push origin vX.Y.Z. - 确认GitHub Actions发布工作流已成功完成。
变更日志自动化
此仓库使用 git-cliff 生成 CHANGELOG.md.
git cliff -o CHANGELOG.md或运行:
make changelog释放助手
make release-dry VERSION=5.0.0
make version-bump VERSION=5.0.0多云策略(MCP)工具(当前)
scan_terraform:对路径和可选状态文件运行合规性检查。get_provider_metadata:从Terraform注册表获取提供程序元数据。generate_snippet:为公共资源生成Terraform代码段。
许可证
商业来源许可证(BSL)1.1。看 LICENSE.
