Scanopy 企业级部署:多用户管理与权限控制完整指南
【免费下载链接】scanopyNetwork diagrams that update themselves项目地址: https://gitcode.com/gh_mirrors/ne/scanopy
Scanopy 是一款能自动绘制并持续更新网络拓扑图的开源平台,它取代手工绘制的静态网络架构图,让企业基础设施模型始终反映真实运行状态。本文面向需要企业级部署的团队,讲解如何完成多用户接入、四级角色权限控制、网络级访问隔离与对外安全分享,帮助你快速建立一套可控、可审计的网络文档体系。
Scanopy 企业级部署概览
Scanopy 由服务端 + 分布式扫描代理(Daemon)+ Web UI三部分组成:
- 服务端:存储拓扑数据、管理组织与权限,Docker Compose 一键拉起,UI 默认运行在
http://<服务器IP>:60072; - 扫描代理:部署在各个网段,负责 SNMP/LLDP/ARP 扫描与容器发现,多站点、多 VLAN 环境可部署多个代理,实现分布式扫描;
- Web UI:提供 L2(物理)、L3(逻辑)、工作负载、应用依赖四种视图,支持导出 SVG、Mermaid 与 Confluence 格式。
💡 企业部署的最小起点:使用 docker-compose.yml 拉起服务端,按站点部署扫描代理即可。商业部署可用 docker-compose.commercial.yml。
一键部署:从 Docker Compose 到多站点扫描
第一步:部署服务端
# 拉取仓库后 docker compose up -d第二步:创建组织与账号
访问 UI 创建账号,第一个账号将成为组织Owner。团队成员通过邀请邮件加入同一组织。
第三步:部署扫描代理覆盖全网点
跨站点或跨 VLAN 环境时,在每个网段部署一个 Daemon,由服务端统一调度扫描。代理支持 Linux/FreeBSD/macOS/Windows 多平台安装脚本,安装逻辑见 backend/src/daemon/install/。
一次扫描即可生成四种视图,这是 Scanopy 权限管理的"数据底座":
| 视图 | 内容 |
|---|---|
| L2 物理视图 | 交换机、端口、链路 |
| L3 逻辑视图 | 子网与跨子网主机连接 |
| 工作负载视图 | 裸机、虚拟机、容器 |
| 应用视图 | 服务与应用依赖关系 |
Scanopy 四级角色权限详解(RBAC)
Scanopy 内置组织级 RBAC,共 4 个角色,定义在 backend/src/server/users/impl/permissions.rs:
| 角色 | 能做什么 | 典型用户 |
|---|---|---|
| Owner | 全部权限,唯一能任命 Admin 的角色 | 平台负责人 |
| Admin | 管理成员、网络、扫描配置;可创建 Member/Viewer | 运维主管 |
| Member | 创建与维护拓扑内容 | 网络工程师 |
| Viewer | 只读浏览,默认角色 | 管理层、外部协作 |
🔐 权限继承规则很关键:用户只能授予不高于自己角色的权限(grantable_user_permissions),只有 Owner 能创建 Admin,Admin 只能创建 Member 和 Viewer。这套"最小授权"设计天然防止权限膨胀。
后端通过 backend/src/server/auth/middleware/permissions.rs 的PermissionRequirement中间件对每个 API 路由强制校验角色,Viewer 请求写操作会被直接拦截,无需前端兜底。
如何为不同团队分配角色
推荐做法:
- Owner 只留 1~2 人,避免权限集中;
- 每个网段/团队指定 1 名 Admin 做日常运维;
- 网络、安全、开发团队按职责给 Member 或 Viewer;
- 离职时直接移除成员,其创建的内容保留在组织中。
网络级访问控制:按网段隔离数据
企业最常见的需求是"网络团队看核心网,云团队只看云网"。Scanopy 支持组织内的网络级隔离:用户的network_ids字段记录其可访问的网络范围,见 backend/migrations/20251123232748_network-permissions.sql。
配置方法(最佳实践):
- 按物理站点或业务域划分 Network(如
HQ-Core、Branch-East、Cloud); - 在每个 Network 下分别部署 Daemon 扫描;
- 将用户只绑定到其负责的网络,Viewer 角色 + 限定网络 = 最安全的对外可见方案。
API 密钥与最小权限原则
自动化场景(CI 巡检、脚本接入)请使用API 密钥而非个人账号,密钥同样绑定角色等级(见 backend/migrations/20251228010000_user_api_keys.sql):
- 用户只能签发不高于自身角色的密钥(
grantable_api_key_permissions); - 给 CI 机器人签发 Viewer 只读密钥,泄露时爆炸半径最小;
- Daemon 使用独立的 API Key 通道,与服务端通信链路分离(见 backend/src/server/daemon_api_keys/)。
安全分享:把活的网络地图给外部干系人
需要向客户、供应商展示网络而不开放账号?Scanopy 的Share(分享)功能专为这个场景设计,字段定义见 backend/src/server/shares/impl/base.rs:
| 控制项 | 说明 |
|---|---|
| 过期时间 | expires_at,到期链接自动失效 |
| 访问密码 | 密码以哈希存储,接口永不下发明文 |
| 嵌入域名白名单 | allowed_domains,限制只能内嵌到指定网站 |
| 界面裁剪 | 可隐藏检查面板、缩放控件、导出按钮、小地图 |
| 视图限定 | enabled_views只开放指定视图,如仅展示 L3 逻辑图 |
| 一键禁用 | 关闭后链接直接返回 404 |
外部分享最佳实践:Viewer 视角 + 只开放 L3 视图 + 7 天过期 + 密码保护 + 嵌入白名单,即可安全地把"活地图"放进 Confluence 或客户门户。
开启 SSO 单点登录(OIDC)
企业统一身份接入:Scanopy 支持OIDC 单点登录(迁移脚本见 backend/migrations/20251107222650_oidc-auth.sql,参考配置 oidc.toml.example):
- 在 IdP(如 Keycloak、Entra ID)创建应用回调指向 Scanopy;
- 服务端配置 OIDC 参数后,成员可用企业账号直接登录;
- 登录态由会话纪元(session epoch)机制管理,异常时可批量下线全部会话(见 backend/migrations/20260705120000_add_user_session_epoch.sql)。
配合邮箱验证与邀请流程(backend/src/server/auth/handlers/verification.rs),可杜绝未经验证的邮箱进入组织。
企业部署权限控制清单 ✅
| 场景 | 推荐配置 |
|---|---|
| 组织治理 | 1 个 Owner + 若干 Admin,角色授予走最小权限 |
| 跨团队 | Network 级隔离,用户只绑定所属网络 |
| 自动化 | 只读 API Key,不用个人账号跑脚本 |
| 外部协作 | Share 链接:密码 + 过期 + 视图限定 + 域名白名单 |
| 身份 | OIDC SSO + 邮箱验证 |
| 多站点 | 每站点一个 Daemon,服务端统一调度 |
总结
Scanopy 的企业级部署核心是三件事:用四级角色管好"人",用网络级隔离管好"数据",用受限分享管好"出口"。从 Docker Compose 一键部署,到 OIDC 单点登录与最小权限 API 密钥,整套机制都内置在服务端,无需二次开发。团队规模再大,网络文档也能始终"自己更新、权限分明"。
【免费下载链接】scanopyNetwork diagrams that update themselves项目地址: https://gitcode.com/gh_mirrors/ne/scanopy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考