kopexa-grc/kspec

GitHub: kopexa-grc/kspec

一款基于 Go 和 CEL 表达式的企业级策略即代码引擎,用于跨云平台和 SaaS 应用的安全合规扫描与报告生成。

Stars: 42 | Forks: 2

kspec banner # kspec **企业级策略即代码引擎。** [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/f52142236a001920.svg)](https://github.com/kopexa-grc/kspec/actions/workflows/ci.yml) [![CodeQL](https://github.com/kopexa-grc/kspec/actions/workflows/codeql.yml/badge.svg)](https://github.com/kopexa-grc/kspec/actions/workflows/codeql.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/kopexa-grc/kspec)](https://goreportcard.com/report/github.com/kopexa-grc/kspec) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/kopexa-grc/kspec/badge)](https://scorecard.dev/viewer/?uri=github.com/kopexa-grc/kspec) [![License](https://img.shields.io/badge/License-Elastic%202.0-blue.svg)](LICENSE)

验证。安全。合规。
一个现代化、可扩展的框架,用于定义和强制执行跨数字基础设施的安全策略。

kspec demo
## 概述 **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 ``` kspec HTML Report ### 非交互模式 (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 作为托管/管理服务 提供 - 删除或规避许可功能

Kopexa GRC 精心构建

标签:AWS, Azure, CEL, DevSecOps, DPI, EVTX分析, FTP漏洞扫描, Go, GRC, LNA, Microsoft 365, PaC, Ruby工具, SaaS安全, TLS, XML 请求, YAML, 上游代理, 企业级安全, 基礎設施安全, 安全合规, 安全库, 安全开发, 安全编排, 对称加密, 日志审计, 治理风险与合规, 策略即代码, 策略引擎, 网络代理, 网络安全挑战, 网络策略, 聊天机器人安全, 自动化审计, 配置验证, 防御工具