landerox/cloud-landerox-infra
GitHub: landerox/cloud-landerox-infra
基于Terraform的GCP基础设施安全基线模板,集成多环境CI/CD、纵深防御策略和即用型模块配方,帮助团队快速构建可复现的安全云基础设施。
Stars: 1 | Forks: 0
# cloud-landerox-infra
[](https://github.com/landerox/cloud-landerox-infra/actions/workflows/terraform.yml)
[](https://github.com/landerox/cloud-landerox-infra/actions/workflows/ci.yml)
[](https://github.com/landerox/cloud-landerox-infra/actions/workflows/drift-detection.yml)
[](https://scorecard.dev/viewer/?uri=github.com/landerox/cloud-landerox-infra)
[](LICENSE)
[](https://www.terraform.io/)
## 基础设施状态与环境
我们的基础设施围绕双环境模型进行设计,以平衡稳定性与实验性。
### 环境
- **`prd` (生产环境):** 我们的主要环境,始终处于活跃状态。
- **`dev` (开发环境):** 按需启用的沙箱环境。在配置所需的 `GCP_DEV_*` 变量和密钥之前,它将保持休眠状态。对其设计感到好奇?请查看 [ADR-0006](docs/adr/0006-two-environment-foundation.md)。
### 模块可用性
两个环境共享相同的基础配置。以下是可用模块及其默认状态的快速概览:
| 模块 | 默认状态 | 备注 |
| :--- | :--- | :--- |
| **State Bucket** | Always On | 通过 Terraform 使用 `prevent_destroy` 进行安全管理,以保护您的状态。 |
| **IAM** | Enabled | 核心身份和访问管理。 |
| **Storage** | Enabled | 基础存储原语。 |
| **BigQuery** | Disabled | 可供增量激活。 |
| **Secrets** | Disabled | 可供增量激活。 |
| **Scheduler** | Disabled | 可供增量激活。 |
| **Cloud Run** | Disabled | 可供增量激活。 |
| **Artifact Registry** | Disabled | 可供增量激活。 |
| **Observability** | Disabled | Cloud Monitoring 警报、仪表板、通知渠道——详见 [ADR-0009](docs/adr/0009-declarative-observability.md)。 |
## 持续集成与交付
我们的 CI/CD 流水线通过 GitHub Actions 完全自动化,以确保代码质量并防止基础设施配置漂移:
- **验证与检查 (`ci.yml`):** 在每次推送时运行格式化、代码检查 (TFLint, actionlint)、密钥扫描 (Checkov, gitleaks, detect-secrets)、文档检查,以及 **策略变更测试**(针对 `main_test.rego` 运行 `conftest verify`——断言拒绝规则在构造的错误输入上仍会触发)。
- **Terraform 操作 (`terraform.yml`):** 在 PR 和推送时自动为每个环境生成 Terraform plan 矩阵。包含模块 **冒烟 + 安全测试**(使用 `mock_provider` 的 `terraform test`)和 **Conftest 策略**(无原始角色、无公共 IAM、在 buckets 上强制执行 PAP、启用 UBLA)。每个 plan 都通过 GitHub OIDC + Sigstore (`actions/attest-build-provenance`) 进行签名;apply 任务在消耗构建产物之前会验证证明,从而消除 PR 审查与手动调度之间的 TOCTOU 窗口。应用该 plan 需要手动调度工作流以及环境审批。
- **漂移检测 (`drift-detection.yml`):** 每周运行(也可手动触发)并跨环境检测,以发现并警告任何在 Terraform 之外进行的手动更改。
- **OpenSSF Scorecard (`scorecard.yml`):** 每周运行,并在推送到 `main` 分支以及发生分支保护事件时触发。将结果发布到 scorecard.dev(上方的徽章)并将 SARIF 上传到 GitHub Security 标签页。
## 浏览文档
无论您是刚刚入门还是寻求深入的架构见解,我们的文档都能满足您的需求:
- **[入门指南](docs/development.md#getting-started):** 开启您旅程的最佳起点。
- **[教程 — 从零到在 `prd` 中创建第一个 Bucket](docs/tutorial-first-bucket.md):** 针对首次设置的引导式演练。在运行 `just bootstrap` 之前请先阅读一次。
- **[架构](docs/architecture.md):** 关于各部分如何协同工作的高层次概述。
- **[图表](docs/diagrams/):** 环境模型、CI/CD 流程以及 IAM/WIF 链的 Mermaid 图表。
- **[CI/CD](docs/cicd.md):** 有关我们自动化工作流的详细信息。
- **[治理](docs/governance.md):** 用于管理基础设施的策略和指南。
- **[实践方案](docs/recipes/):** 适用于每个模块的即用型 HCL 代码片段。只需复制、粘贴并根据需要调整!
- **[架构决策记录](docs/adr/):** 深入了解我们那些非显而易见的工程决策背后的*原因*。
- **[Terraform 参考](terraform/README.md):** 自动生成的模块输入与输出。
- **[贡献者 / AI 代理指南](AGENTS.md):** 关于项目约定和 AI 代理规则的唯一事实来源。
## 入门指南
### 1. 引导您的环境
首先,请确保您安装了正确版本的 Terraform。我们建议使用 [mise](https://mise.jdx.dev) 来无缝管理您的工具链:
```
# 从 repository 根目录,根据 .mise.toml 安装所需工具
mise install
# 验证你的 Terraform 版本是否与项目中 pinned 的版本相匹配
terraform version
```
接下来,导航到 `terraform/` 目录以设置您的初始配置:
```
cd terraform
cp terraform.tfvars.example terraform.tfvars
```
打开 `terraform.tfvars` 并填写您特定的必填字段:
- `project_id`
- `state_bucket`
- `repository_id`
- `workload_identity_pool_id`
- `workload_identity_pool_provider_id`
配置完成后,运行 bootstrap 脚本以配置您的基础资源:
```
just bootstrap
```
### 2. 日常工作流
在日常开发中,`just` 让您能够轻松地与您的基础设施进行交互。在 `terraform/` 目录下,您可以运行:
```
just doctor # Verify your local tooling setup and pinned Terraform version
just check # Full local gate: fmt + validate + lint + lint-shell + docs + tests + policy-test + pre-commit
just precommit # Run the pre-commit hooks alone (mirror CI)
just policy-test # Run the Conftest mutation tests for the Rego policies
just plan # See what changes Terraform will apply
```
## 许可证
本项目基于 [LICENSE](LICENSE) 文件中的条款进行许可。
标签:Conftest, DevSecOps, EC2, ECS, GCP, GitHub Actions, IaC, IAM, MIT协议, OPA, OpenSSF, Terraform, Workload Identity Federation, 上游代理, 云基础设施, 云架构, 多环境部署, 安全基线, 开源, 教学环境, 模块化设计, 状态管理, 策略即代码, 纵深防御, 聊天机器人安全, 自动化修复, 自动化运维, 自动笔记, 身份与访问管理, 配置漂移检测, 靶场