dannyota/secops
GitHub: dannyota/secops
一个用于以代码方式操作 Google SecOps(Chronicle SIEM + Siemplify SOAR)的 Go CLI 和非官方 SDK,通过 pull-diff-push 调和引擎将安全运营配置纳入版本控制。
Stars: 1 | Forks: 0

# secopsctl
**以代码方式操作 Google SecOps (Chronicle SIEM + Siemplify SOAR) —— 适用于*任何*租户。**
[文档](docs/README.md) · [功能特性](docs/design/catalog.md) · [网站](https://secops.danny.vn)
一个单一的 Go 二进制文件**以及**可导入的 Go SDK,像
Terraform 管理基础设施一样管理你的 SIEM/SOAR。其核心循环是**拉取实时状态 → 审查
`git diff` → 推送回去** —— 一个调和引擎,覆盖所有层面。实时
事件、警报和案例会被直接读取并执行操作 —— 永远不会从
文件中进行调和。它是**租户中立**的(没有硬编码内容;一切都来自一个
配置文件),并且专为人类和 LLM agent 设计:确定性的 flags,
可选的 `--json`,清晰的 `--help`。
## 它的功能
- **配置即代码** — 跨越 SIEM 和 SOAR
层面(规则、参考列表、feeds、parsers、dashboards、playbooks、
webhooks、environments 等)的 `pull` → `git diff` → `push`,由一个引擎调和。
- **处理队列** — 案例计数和服务器端过滤器,针对每个案例和
每个警报的 triage 动词,以及警报 ⇄ 案例 ⇄ 规则桥接;AI 辅助:
针对每个警报的 Gemini 调查 (`alerts investigate`)、结构化的案例
摘要、基于环境的 Gemini 聊天。请参阅
[triage 指南](docs/guides/triage.md)。
- **端到端 Playbooks** — 发现创作面板(每个 action、
flow function、trigger、block),离线或通过 API 创作,然后
运行、调试、回滚和提升。请参阅
[playbooks 指南](docs/guides/playbooks.md)。
- **专为 agent 打造** — 强制的只读模式 (`SECOPS_READONLY=1` /
`--read-only`)、`--non-interactive`、机器可读的命令目录
(`secopsctl commands --json`),以及本地修改审计日志
(`$SECOPSCTL_HOME/audit.jsonl`),此外在每个
修改动词上都有优先 dry-run 的防护。完整方案:
[LLM 驱动的自动化](docs/tips/10-llm-and-automation.md)。
## 安装
```
go install danny.vn/secops/cmd/secopsctl@latest
# 或者,从克隆中: go build -o secopsctl ./cmd/secopsctl
```
需要 Go ≥ 1.26 — 一个静态二进制文件,无需 runtime。预构建的、带有校验和的、
[cosign](https://github.com/sigstore/cosign)-签名的二进制文件 (linux/macOS/windows ·
amd64/arm64) 可在 [Releases](https://github.com/dannyota/secops/releases)
页面获取;构建验证和签名检查步骤请参阅
[安装指南](docs/guides/install.md)。
## 快速开始
**1. 配置你的租户。** `secopsctl config` (别名 `init`) 会打开一个单屏
表单 → `~/.secopsctl/instance.yaml` (`0600`,被 git 忽略)。或者将每个字段作为 flags 传递:
```
secopsctl config \
--project-id your-project-id \
--project-number 000000000000 \
--region us \
--customer-id 00000000-0000-0000-0000-000000000000 \
--soar-url https://
.siemplify-soar.com \
--non-interactive
```
这四个标识符来自 Cloud Console 和 SecOps **Settings → SIEM
Settings** (customer UUID);请同时设置 `project_id` 和 `project_number`。在哪里
找到它们:[configure.md](docs/guides/configure.md#find-your-secops-identifiers)。
**2. 两类凭据。** SIEM 使用 **Google ADC** (在进程内生成,磁盘上无存留);SOAR 使用长期有效的
**AppKey** (SOAR UI **Settings → Advanced → API
Keys**;存储在 config 中或 `$SECOPS_SOAR_APP_KEY`)。这两个平面是
独立的 —— 仅使用 SIEM 即可提供一个干净的 `doctor` 结果;当你需要时随时添加 SOAR:
```
gcloud auth application-default login
gcloud auth application-default set-quota-project your-project-id # skipping this is the classic first-run 403
```
**3. 找到你的 SOAR host** *(仅限 SOAR 用户)*。`soar_url` 是特定于租户的,
且不在公开文档中 —— 从一个实时的请求中读取它:
1. 登录到 **SecOps Web UI**。
2. 打开 **dev-tools → Network** 并点击任意案例。
3. 请求会发送到 `https://.siemplify-soar.com` —— 这就是你的 `soar_url`。
**4. 验证。** 一个针对配置和两个平面的只读冒烟测试 —— 结果干净意味着你已经
连接成功:
```
secopsctl doctor
```
然后运行循环 (`pull` → 审查 `git diff` → `push`);请参阅
[命令参考](docs/guides/usage.md) 和
[配置指南](docs/guides/configure.md)。
## 作为 Go SDK 使用
三个可导入的客户端(纯 API,无文件 I/O),按平面 + 凭据划分;
构造一个客户端永远不会触发网络请求(认证是延迟解析的):
| Package | 平面 | Auth |
|---|---|---|
| `danny.vn/secops/chronicle` | Chronicle **SIEM** (现代 REST,每个平面版本固定) | OAuth / ADC |
| `danny.vn/secops/soar` | 现代 **SOAR** v1alpha | AppKey |
| `danny.vn/secops/soar/legacy` | Siemplify 外部 API —— 广泛且可靠的路径 | AppKey |
```
c, _ := chronicle.NewClient(chronicle.Settings{
ProjectID: "your-project-id", ProjectNumber: "000000000000",
Region: "us", CustomerID: "00000000-0000-0000-0000-000000000000",
}, auth.OAuth()) // ADC; credentials resolved lazily on first call
rules, err := c.ListRules(context.Background())
```
完整的 SDK 指南 —— 包含所有三个客户端、auth、错误、分页:[docs/guides/sdk.md](docs/guides/sdk.md)。
## 文档
[文档站点](https://secops.danny.vn) 由三个文件夹组成:
| 文件夹 | 用途 | 从这里开始 |
|---|---|---|
| [guides/](docs/guides/) | **使用** secopsctl | [安装](docs/guides/install.md) → [配置](docs/guides/configure.md) → [循环](docs/guides/the-loop.md) · 然后 [Triage](docs/guides/triage.md) · [Playbooks](docs/guides/playbooks.md) · [Rules](docs/guides/rules.md) · [Query](docs/guides/query.md) · [SOAR cases](docs/guides/soar-cases.md) · [Reconcile](docs/guides/reconcile.md) · [Go SDK](docs/guides/sdk.md) · [命令参考](docs/guides/usage.md) |
| [design/](docs/design/) | **构建** secopsctl | [架构](docs/design/architecture.md) · [平面](docs/design/surfaces.md) · [目录 (状态)](docs/design/catalog.md) · [路线图](docs/design/roadmap.md) |
| [tips/](docs/tips/) | SecOps **手艺** | [SecOps 即代码](docs/tips/01-secops-as-code.md) · [YARA-L](docs/tips/03-yara-l-rules.md) · [SOAR 运维](docs/tips/09-soar-operations.md) |
UDF 过滤器示例位于 [`examples/queries/`](examples/queries/);遇到不熟悉的
术语?请参阅[术语表](docs/GLOSSARY.md)。
## License
采用 [Apache License 2.0](LICENSE) 授权。标签:EVTX分析, Go, Ruby工具, SOAR, 安全运营, 安全运营中心, 扫描框架, 日志审计, 网络映射, 自动化运维