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/
- 发行说明: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.
