kopexa-grc/kspec
GitHub: kopexa-grc/kspec
一款基于 Go 和 CEL 表达式的企业级策略即代码引擎,用于跨云平台和 SaaS 应用的安全合规扫描与报告生成。
Stars: 42 | Forks: 2

# kspec
**企业级策略即代码引擎。**
[](https://github.com/kopexa-grc/kspec/actions/workflows/ci.yml)
[](https://github.com/kopexa-grc/kspec/actions/workflows/codeql.yml)
[](https://goreportcard.com/report/github.com/kopexa-grc/kspec)
[](https://scorecard.dev/viewer/?uri=github.com/kopexa-grc/kspec)
[](LICENSE)
验证。安全。合规。
一个现代化、可扩展的框架,用于定义和强制执行跨数字基础设施的安全策略。
## 概述
**kspec** 是一个强大的策略引擎,旨在弥合复杂安全要求与自动化验证之间的差距。专为云原生环境构建,它允许组织将安全态势定义为代码,确保跨云平台、SaaS 应用程序、网络和基础设施的一致执行。
无论您是审计云配置、验证 GitHub 仓库安全性、强制执行 Microsoft 365 合规性,还是验证 TLS 设置,**kspec** 都提供了大规模构建、测试和运行策略的原语。
## 主要特性
- **多云支持**:使用单一工具扫描 AWS 账户、Azure 订阅、Microsoft 365 租户和 GitHub 组织
- **策略即代码**:使用清晰的、版本控制的 YAML 和 CEL 表达式定义您的安全期望
- **可扩展的 Provider 架构**:模块化设计,包含 Azure、MS365、GitHub、Network 等 providers
- **资源发现**:使用 `kspec discover` 在不进行策略评估的情况下盘点各 provider 的资源
- **交互式 TUI**:美观的终端 UI,实时显示扫描进度和结果
- **高性能**:使用 Go 语言构建,速度快、可移植性强且开销极低
- **CI/CD 就绪**:支持结构化日志记录的非交互模式 (`--no-ui`) 和多种导出格式
- **导出报告**:生成 CSV、XLSX、JSON 或交互式 HTML 格式的合规报告
## 支持的 Provider
| Provider | 描述 | 文档 |
|----------|-------------|---------------|
| **AWS** | 扫描 AWS 账户的安全合规性(IAM, S3, EC2, RDS, Lambda, EKS 等 50 多项服务) | [Provider 指南](docs/providers/aws.md) |
| **Azure** | 扫描 Azure 订阅的安全合规性 | [Provider 指南](docs/providers/azure.md) |
| **Microsoft 365** | 扫描 M365 租户的身份和安全设置 | [Provider 指南](docs/providers/ms365.md) |
| **GitHub** | 扫描组织和仓库的安全最佳实践 | [Provider 指南](docs/providers/github.md) |
| **Hetzner Cloud** | 扫描 Hetzner Cloud 项目的基础设施安全 | [Provider 指南](docs/providers/hetzner.md) |
| **Cloudflare** | 扫描 DNS、WAF、Zero Trust 和安全设置 | [Provider 指南](docs/providers/cloudflare.md) |
| **Atlassian** | 扫描 Jira、Confluence 和管理员设置 | [Provider 指南](docs/providers/atlassian.md) |
| **Factorial HR** | 扫描 HR 数据的合规性(员工、合同、文档) | [Provider 指南](docs/providers/factorial.md) |
| **Network** | 验证 TLS、DNS 和 HTTP 安全配置 | [Provider 指南](docs/providers/network.md) |
| **OS** | 扫描本地系统服务、包和文件 | [Provider 指南](docs/providers/os.md) |
| **SBOM** | 扫描软件物料清单的漏洞和许可证 | [Provider 指南](docs/providers/sbom.md) |
## 安装
### 从源码安装
```
# 克隆仓库
git clone https://github.com/kopexa-grc/kspec.git
cd kspec
# 构建
go build -o kspec ./cmd/kspec
# 验证安装
./kspec --help
```
## 快速开始
### 扫描 AWS 账户
```
# 设置 AWS credentials
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_REGION="us-east-1"
# 扫描 AWS account
kspec scan aws account -f policies/aws-security.yml
```
### 扫描 GitHub 组织
```
# 设置 GitHub token
export GITHUB_TOKEN="ghp_xxxxxxxxxxxx"
# 扫描 organization
kspec scan github org
-f policies/github-security.yml
```
### 扫描 Azure 订阅
```
# 设置 Azure credentials (或使用 `az login` 进行 CLI auth)
export AZURE_TENANT_ID="your-tenant-id"
export AZURE_CLIENT_ID="your-client-id"
export AZURE_CLIENT_SECRET="your-client-secret"
# 扫描 subscription
kspec scan azure subscription -f policies/azure-security.yml
```
### 扫描 Microsoft 365 租户
```
# 扫描 M365 tenant
kspec scan ms365 tenant \
--client-id \
--client-secret \
-f policies/ms365-security.yml
```
### 扫描网络主机
```
# 扫描 TLS 和 HTTP security (两种变体均可)
kspec scan host example.com -f policies/tls-security.yml
# 或:kspec scan network host example.com -f policies/tls-security.yml
```
### 扫描 Hetzner Cloud 项目
```
# 设置 Hetzner Cloud API token
export HCLOUD_TOKEN="your-api-token"
# 扫描 project 中的所有资源
kspec scan hetzner project -f policies/hetzner-security.yml
```
### 发现资源(不进行策略评估)
使用 `discover` 命令盘点资源而无需运行策略检查:
```
# 发现 AWS resources
kspec discover aws account
# 发现 GitHub organization resources
kspec discover github org
# 输出为 JSON 以便与其他工具集成
kspec discover azure subscription -o json
# 输出为树状视图
kspec discover hetzner project -o tree
```
## 输出选项
### 导出结果
将扫描结果导出为 CSV、XLSX、JSON 或 HTML 以用于合规报告:
```
# 导出为 CSV
kspec scan aws account -f policies/aws-security.yml -o report.csv
# 导出为 Excel
kspec scan azure subscription -f policies/azure-security.yml -o report.xlsx
# 导出为 JSON
kspec scan github org -f policies/github-security.yml -o report.json
# 导出为 HTML (可视化报告)
kspec scan aws account -f policies/aws-security.yml -o report.html
# 显式指定格式
kspec scan aws account -f policies/aws-security.yml -o report --export-format xlsx
```
### HTML 报告
与没有 CLI 访问权限的利益相关者分享扫描结果。HTML 报告是独立的文件,可以通过电子邮件发送、上传到 Confluence 或附加到审计文档中。
```
kspec scan aws account -f policies/aws-security.yml -o compliance-report.html
```
### 非交互模式 (CI/CD)
使用 `--no-ui` 配合 zerolog 的结构化日志记录,适用于 CI/CD 流水线:
```
# 在无交互 UI 模式下运行
kspec scan aws account -f policies/aws-security.yml --no-ui
# 与导出结合使用
kspec scan azure subscription -f policies/azure-security.yml --no-ui -o results.csv
```
输出示例:
```
12:34:56 INF Scan initialized target=my-subscription
12:34:57 INF Discovery started
12:34:58 INF Discovery complete
12:34:58 INF Scan started
12:34:59 INF Storage encryption enabled id=azure-storage-encryption status=PASS
12:34:59 WRN Public blob access disabled id=azure-storage-public-access status=FAIL severity=high details="Public access is enabled"
12:35:00 INF Scan complete
12:35:00 INF Scan summary total=10 passed=8 failed=1 skipped=1
```
### 并发控制
kspec 使用自适应并发来并行化资源发现和扫描。默认情况下,它会根据您系统的 CPU 核心数自动扩展工作线程。
```
# 自动 concurrency (默认) - 基于可用 CPU 进行扩展
kspec scan aws account -f policies/aws-security.yml
# 限制最大并发 workers
kspec scan aws account -f policies/aws-security.yml --max-workers 10
# 禁用 concurrency (顺序运行以进行调试)
kspec scan aws account -f policies/aws-security.yml --sequential
```
扫描器会并行处理:
- **资源发现** - 同时发现多种资源类型
- **资源获取** - 在速率限制下并行获取实例
- **策略评估** - CPU 密集型检查并发运行
内置的速率限制可防止每个 provider(AWS、Azure、GitHub 等)出现 API 限流。
## 策略库
仓库包含预构建的安全策略:
| 策略 | Provider | 描述 |
|--------|----------|-------------|
| [Azure 安全](policies/azure-security.yml) | Azure | 存储加密、SQL 审计、Key Vault 保护、NSG 规则 |
| [MS365 安全](policies/ms365-security.yml) | MS365 | MFA 强制执行、条件访问、身份保护、Teams 安全 |
| [GitHub 安全](policies/github-security.yml) | GitHub | 分支保护、2FA、仓库安全设置 |
| [Hetzner 安全](policies/hetzner-security.yml) | Hetzner | 服务器保护、防火墙规则、SSH 密钥安全、网络隔离 |
| [TLS 安全](policies/tls_security.yaml) | Network | TLS 版本、密码套件、PFS、AEAD 密码 |
| [证书安全](policies/certificate_security.yaml) | Network | 过期时间、有效期、签名算法 |
| [HTTP 安全](policies/http_security.yaml) | Network | 安全头(HSTS, CSP, X-Frame-Options) |
| [DNS 安全](policies/dns_security.yaml) | Network | DNS 记录验证 |
| [电子邮件安全](policies/email-security.policy.yaml) | Network | SPF 记录、DMARC 强制执行 |
## 编写策略
策略通过 YAML 和 CEL(通用表达式语言)查询定义:
```
policies:
- uid: my-security-policy
name: My Security Policy
version: 1.0.0
require:
- provider: azure
groups:
- title: Storage Security
checks:
- uid: storage-https-required
queries:
- uid: storage-https-required
title: Ensure HTTPS is required for storage accounts
resource: azure_storage_account
impact: 90
query: |
has(resource.properties) &&
resource.properties.supportsHttpsTrafficOnly == true
docs:
desc: |
Storage accounts should require HTTPS to encrypt data in transit.
remediation: |
Enable "Secure transfer required" in the storage account settings.
```
## 架构
kspec 基于 **Provider-Resource-Policy** 模型运行:
1. **Providers**(AWS、Azure、MS365、GitHub、Network 等)连接到目标资产
2. **Resources** 暴露目标的结构化数据(存储账户、用户、仓库)
3. **Policies** 使用 CEL 表达式定义预期的安全状态
4. **Scanner** 编排发现、获取和策略评估
5. **TUI** 显示实时进度和结果
```
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Provider │────▶│ Resources │────▶│ Scanner │
│ (Azure) │ │ (Storage, │ │ (Evaluate │
│ │ │ SQL, etc) │ │ Policies) │
└─────────────┘ └──────────────┘ └──────┬──────┘
│
▼
┌─────────────┐
│ TUI │
│ (Results) │
└─────────────┘
```
## 文档
- **[文档索引](docs/README.md)** - 完整文档
- **[快速入门指南](docs/QUICKSTART.md)** - 5 分钟扫描一台主机
- **[安装说明](docs/installation.md)** - 安装指南
- **[编写策略](docs/policies.md)** - 创建自定义安全策略
- **[CLI 参考](docs/reference/cli.md)** - 命令行选项
- **[CEL 表达式](docs/concepts/cel-expressions.md)** - 编写策略查询
## CI/CD 集成
### GitHub Actions
```
name: Security Scan
on:
schedule:
- cron: '0 6 * * *'
workflow_dispatch:
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
- name: Build kspec
run: go build -o kspec ./cmd/kspec
- name: Run Security Scan
env:
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
run: |
./kspec scan azure subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} \
-f policies/azure-security.yml \
--no-ui \
-o scan-results.csv
- name: Upload Scan Results
uses: actions/upload-artifact@v4
if: always()
with:
name: security-scan-results
path: scan-results.csv
```
## 贡献
欢迎贡献!请在贡献前阅读许可条款。
## 许可证
本项目基于 **Elastic License 2.0 (ELv2)** 授权。
- **商业用途**:您可以自由地将本软件用于商业用途,包括审计、咨询和安全评估
- **托管服务**:您**不得**将本软件作为托管或管理服务提供给第三方
- **修改**:您可以在遵守许可条款的前提下修改和分发本软件
有关完整的许可文本,请参阅 [LICENSE](LICENSE)。
### 允许的范围
- 在公司内部使用 kspec
- 使用 kspec 审计或评估客户基础设施(顾问、审计员)
- 为自己的用途修改 kspec
- 分发带有您修改的 kspec(需包含许可声明)
### 禁止的范围
- 将 kspec 作为托管/管理服务 提供
- 删除或规避许可功能
标签:AWS, Azure, CEL, DevSecOps, DPI, EVTX分析, FTP漏洞扫描, Go, GRC, LNA, Microsoft 365, PaC, Ruby工具, SaaS安全, TLS, XML 请求, YAML, 上游代理, 企业级安全, 基礎設施安全, 安全合规, 安全库, 安全开发, 安全编排, 对称加密, 日志审计, 治理风险与合规, 策略即代码, 策略引擎, 网络代理, 网络安全挑战, 网络策略, 聊天机器人安全, 自动化审计, 配置验证, 防御工具