dplense/dplense-cli
GitHub: dplense/dplense-cli
多云安全审计命令行工具,用于扫描和处置 Google Drive、Microsoft 365 及 Slack 中的外部共享权限风险。
Stars: 0 | Forks: 0
# DPlense CLI
**dplense** 是一个多云安全审计 CLI 工具。它用于扫描云存储中的外部文件共享、公开链接以及跨 Google Drive、Microsoft 365 和 Slack 的权限风险。
## 功能
- **多云服务商支持**:Google Drive、Microsoft 365 (SharePoint + OneDrive)、Slack
- **扫描**:扫描共享 Drive、活跃/已停用用户或特定账户
- **过滤**:按电子邮件模式(通配符)、公开链接、风险等级进行过滤
- **多种输出格式**:表格、JSON、CSV、Excel 报告
- **交互式 TUI**:终端 UI,用于浏览问题、查看详细信息和撤销权限
- **权限撤销**:默认通过 dry-run 安全地撤销外部权限
- **可配置**:基于 YAML 的配置,支持域白名单/黑名单
- **进度跟踪**:带有预计剩余时间 (ETA) 和每个 Drive 统计数据的实时进度
## 安装说明
### 前置条件
- Go 1.25 或更高版本
- 特定服务商的凭据(参见下文的快速入门)
### 使用 Go 安装
```
go install github.com/dplense/dplense-cli/cmd/dplense@latest
```
### 从源码构建
```
git clone https://github.com/dplense/dplense-cli.git
cd dplense-cli
go build -o dplense ./cmd/dplense
```
## 快速入门
### 1. 初始化配置
运行交互式设置向导:
```
dplense init
```
此操作将:
- 创建配置目录 (`~/.dplense/`)
- 引导您完成凭据设置
- 创建默认配置文件
### 2. 配置 Google Workspace
1. **创建服务账号**:
- 前往 [Google Cloud Console](https://console.cloud.google.com/)
- 创建一个新项目或选择现有项目
- 启用 Google Drive API 和 Admin SDK API
- 创建服务账号并下载 JSON 凭据
2. **配置全域委派**:
- 前往 [Google Admin Console](https://admin.google.com)
- 导航到 安全性 > API 控制 > 全域委派
- 使用以下权限范围添加您的服务账号:
- `https://www.googleapis.com/auth/drive.readonly`
- `https://www.googleapis.com/auth/drive.metadata.readonly`
- `https://www.googleapis.com/auth/admin.directory.user.readonly` (用于用户枚举)
3. **放置凭据**:
cp /path/to/credentials.json ~/.dplense/credentials.json
### 3. 运行您的首次扫描
```
# 扫描共享驱动器
dplense scan --scope shared-drives
# 使用模拟进行扫描(域范围委派所需)
dplense scan --scope shared-drives --impersonate admin@yourdomain.com
```
## 配置
配置文件位于 `~/.dplense/config.yaml`。示例:
```
# 内部域(不被视为外部)
internal_domains:
- yourdomain.com
- subsidiary.com
# 受信任的域(风险较低)
trusted_domains:
- partner.com
# Google 特定设置
google:
credentials_path: ~/.dplense/credentials.json
impersonate_user: admin@yourdomain.com
included_drives: [] # Empty = all drives
excluded_drives:
- "Archive Drive"
# 默认设置
default_scope: shared-drives
dry_run: true # Safety default for revoke operations
```
### 环境变量
| 变量 | 描述 |
|----------|-------------|
| `DPLENSE_CREDENTIALS` | Google 凭据文件的路径 |
| `DPLENSE_IMPERSONATE` | 用于全域委派的用户电子邮件 |
| `DPLENSE_DEBUG` | 启用调试日志 (`1` 或 `true`) |
| `DPLENSE_MS_TENANT_ID` | Microsoft 365 租户 ID |
| `DPLENSE_MS_CLIENT_ID` | Microsoft 365 客户端 ID |
| `DPLENSE_MS_CLIENT_SECRET` | Microsoft 365 客户端密钥 |
| `DPLENSE_SLACK_BOT_TOKEN` | Slack 机器人 token |
## 使用说明
### scan 命令
扫描云存储以发现安全问题。
```
dplense scan [flags]
```
#### 服务商
- `google` (默认) — Google Drive
- `microsoft` — SharePoint + OneDrive
- `slack` — Slack 文件和频道
#### 范围
- `shared-drives` — 扫描所有共享 Drive (Google)
- `active` — 扫描所有活跃用户
- `suspended` — 扫描所有已停用用户
- `user:` — 扫描特定用户
- `sharepoint` — 扫描 SharePoint 站点 (Microsoft)
- `onedrive` — 扫描 OneDrive (Microsoft)
- `all` — 扫描所有内容
#### 标志
| 标志 | 描述 | 示例 |
|------|-------------|---------|
| `--provider` | 云服务商 | `--provider microsoft` |
| `--scope` | 扫描范围 | `--scope shared-drives` |
| `--filter` | 过滤结果 (可重复使用) | `--filter shared-with:*@gmail.com` |
| `--interactive`, `-i` | 启动交互式 TUI | `-i` |
| `--format` | 输出格式: `table`, `json`, `csv` | `--format json` |
| `--output` | 将结果写入文件 | `--output results.json` |
| `--list-drives` | 列出所有 Drive 而不进行扫描 | `--list-drives` |
| `--credentials` | 凭据文件的路径 | `--credentials ./creds.json` |
| `--impersonate` | 用于委派的用户电子邮件 | `--impersonate admin@domain.com` |
#### 过滤语法
可以通过多个 `--filter` 标志组合过滤器:
- `--filter shared-with:*@gmail.com` — 与电子邮件/模式共享的文件
- `--filter public` — 仅显示具有“任何人均可通过链接访问”权限的文件
- `--filter risk:critical,high` — 仅显示给定风险等级的问题
#### 示例
```
# 共享驱动器基础扫描
dplense scan
# 扫描 Microsoft 365 SharePoint
dplense scan --provider microsoft --scope sharepoint
# 扫描 Slack
dplense scan --provider slack --scope all
# 输出到 JSON 文件
dplense scan --output results.json
# 查找与特定域共享的文件
dplense scan --filter shared-with:*@competitor.com
# 查找具有严重风险的公开文件
dplense scan --filter public --filter risk:critical
# 交互式 TUI 模式
dplense scan -i
# 列出驱动器而不进行扫描
dplense scan --list-drives
# 扫描特定用户
dplense scan --scope user:john@example.com
```
### revoke 命令
撤销文件的外部权限。
```
# 撤销特定文件的权限
dplense revoke file [flags]
# 撤销用户对所有文件的访问权限
dplense revoke user [flags]
```
#### 标志
| 标志 | 描述 |
|------|-------------|
| `--confirm` | 实际应用更改 (默认为 dry-run/预览) |
| `--user` | 仅撤销此特定用户 (用于 `revoke file`) |
| `--input` | 来自 `dplense scan --output` 的 JSON 文件路径 (用于 `revoke user`) |
#### 示例
```
# 预览撤销文件的所有外部权限
dplense revoke file 1BxiMVs0Xzy5dD1KZzJz
# 实际撤销(需要 --confirm)
dplense revoke file 1BxiMVs0Xzy5dD1KZzJz --confirm
# 从扫描结果中的所有文件中撤销用户
dplense revoke user external@competitor.com --input results.json --confirm
```
### report 命令
从扫描结果生成 Excel 报告。
```
dplense report --input results.json
dplense report --input results.json --strategy by-owner --output report.xlsx
```
### init 命令
用于设置配置和凭据的交互式向导。
```
dplense init
```
## 交互式 TUI
使用 `dplense scan -i` 启动:
- 浏览具有外部权限的文件
- 查看详细的文件信息、内部用户和外部共享
- 直接从 TUI 撤销权限
- 按文件/Drive 名称过滤
- 键盘快捷键:`↑↓` 导航,`Enter` 打开,`/` 搜索,`r` 撤销,`o` 在浏览器中打开,`q` 退出
## 风险等级
| 等级 | 颜色 | 描述 |
|-------|-------|-------------|
| **严重** | 红色 | 公开的“任何人均可通过链接访问”权限 |
| **高** | 橙色 | 具有写入/组织者访问权限的外部用户 |
| **中** | 黄色 | 具有读取/评论访问权限的外部用户 |
| **低** | 绿色 | 内部用户 |
## 故障排除
### 认证错误
**错误**:`unauthorized_client` 或 `401`
1. 验证是否已在 Google Admin Console 中配置全域委派
2. 确保服务账号已获得正确的权限范围授权
3. 检查 `--impersonate` 标志是否设置为有效的管理员用户
4. 配置委派后等待几分钟,以使更改生效
### 未找到文件
1. 扫描范围与任何目标都不匹配 (请使用 `--list-drives` 检查)
2. 所有文件都被内部/受信任的域设置过滤掉
3. Drive 访问限制 (检查服务账号权限)
### 权限被拒绝错误
**错误**:`403: The attempted action requires shared drive membership`
确保服务账号有权访问共享 Drive。这可能需要将服务账号添加为共享 Drive 的成员。
## 开源许可证
本项目基于 MIT 许可证授权 - 详见 [LICENSE](LICENSE) 文件。
## 支持
- [GitHub Issues](https://github.com/dplense/dplense-cli/issues)
- [GitHub Repository](https://github.com/dplense/dplense-cli)
标签:CLI, CSPM, DLP, DPlense, EVTX分析, Excel报告, Google Drive, Go语言, Microsoft 365, OneDrive, SaaS安全, SharePoint, Slack, TinkerPop, TUI, WiFi技术, 云存储安全, 云安全态势管理, 交互式终端界面, 公共链接检测, 前端应用, 域控白名单, 外部共享扫描, 子域名变形, 安全基线扫描, 开源安全工具, 报表导出, 文件权限管理, 日志审计, 权限回收, 权限风险分析, 程序破解, 网络安全, 网络安全审计, 网络扫描, 逆向工程平台, 隐私保护