27 KiB
27 KiB
应用资源管理中心 + 系统资源管理中心(含堡垒集群)
本文件涵盖2个中心的设计,考虑到它们共享权限模型和SSO机制,合并在同一份文档中。
第一部分:应用资源管理中心
1. 总体定位
应用资源管理中心负责企业内业务应用的单点登录接入和权限管理。核心职责:
- 提供统一SSO网关,对接各类业务系统(B/S架构为主)
- 管理应用注册、元数据、接入配置
- 提供权限模型和授权规则引擎
- 参考亚信安全接口规范(IAM/SSO相关)
2. SSO网关设计
2.1 支持的协议
| 协议 | 成熟度 | 适用场景 | 优先级 |
|---|---|---|---|
| OAuth2.0 + OIDC | 高 | 现代应用(RESTful API) | P0 |
| SAML 2.0 | 高 | 传统企业应用、ERP系统 | P0 |
| CAS | 中 | 部分遗留Java应用 | P1 |
| 自定义Token透传 | 低 | 老系统改造过渡 | P2 |
2.2 SSO流程(OIDC Authorization Code)
┌──────┐ ┌──────────┐ ┌──────────────┐ ┌──────────┐
│ 用户 │ │ 业务应用 │ │ 认证身份中心 │ │SSO网关 │
│ │ │ (Client) │ │ (Auth Server) │ │ │
└──┬───┘ └─────┬────┘ └──────┬───────┘ └─────┬────┘
│ │ │ │
│ 访问应用 │ │ │
│───────────────>│ │ │
│ │ 未登录,跳转SSO │ │
│<───────────────│ │ │
│ 302重定向 │ │ │
│──────────────────────────────────>│ │
│ │ │ SSO网关代收 │
│ │ │ 认证请求,返回 │
│ 登录页 │ │ 授权码 │
│<──────────────────────────────────│ │
│ │ │ │
│ 提交凭证 │ │ │
│──────────────────────────────────>│ │
│ │ │ 验证通过 │
│ │ │ 返回授权码 │
│<──────────────────────────────────│ │
│ │ │ │
│ 携带授权码回调 │ │ │
│──────────────────────────────────────────────> │
│ │ │ SSO网关 │
│ │ │ 校验+与身份中心 │
│ │ │ 交换AccessToken │
│ │ <───────────────────────────────────│
│ │ │ │
│ 登录成功 │ │ │
│<───────────────│ │ │
2.3 应用注册模型
CREATE TABLE T_APP (
app_id BIGINT PRIMARY KEY AUTO_INCREMENT,
app_name VARCHAR(128) NOT NULL COMMENT '应用名称',
app_key VARCHAR(64) NOT NULL UNIQUE COMMENT '应用唯一标识',
app_secret VARCHAR(256) NOT NULL COMMENT '应用密钥(加密存储)',
app_type TINYINT NOT NULL DEFAULT 1 COMMENT '应用类型:1-B/S 2-C/S 3-API 4-移动端',
-- SSO配置
sso_protocol VARCHAR(16) NOT NULL DEFAULT 'oidc' COMMENT 'SSO协议:oidc/saml/cas',
callback_urls JSON NOT NULL COMMENT '允许的回调URL列表',
logout_url VARCHAR(512) COMMENT '登出回调URL',
token_endpoint_auth_method VARCHAR(32) DEFAULT 'client_secret_basic',
-- 应用访问控制
access_level TINYINT NOT NULL DEFAULT 1 COMMENT '访问等级:1-普通 2-敏感 3-高敏感',
require_mfa TINYINT NOT NULL DEFAULT 0 COMMENT '是否需要MFA',
allowed_ips JSON COMMENT 'IP白名单',
allowed_domains JSON COMMENT '域名白名单',
-- 权限模型
permission_mode VARCHAR(16) DEFAULT 'rbac' COMMENT '权限模式:rbac/abac/hybrid',
-- 状态
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-停用 1-启用',
-- 审计
created_by VARCHAR(64) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT NOT NULL DEFAULT 0,
INDEX idx_app_key (app_key),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用注册表';
3. 权限模型(参考亚信接口规范)
3.1 RBAC + ABAC 混合模型
┌──────────┐
│ 用户 │
│ (User) │
└────┬─────┘
│
┌─────────┼─────────┐
│ │ │
┌─────▼──┐ ┌────▼───┐ ┌────▼───┐
│ 组织(Org)│ │ 角色 │ │ 属性 │
│ (ABAC) │ │ (Role) │ │(Attr) │
└────┬───┘ └────┬───┘ └────┬───┘
│ │ │
│ ┌─────▼──────┐ │
│ │ 权限集 │ │
└────┤ (Permission)├──┘
│ +策略规则 │
└─────┬──────┘
│
┌─────▼──────┐
│ 资源实例 │
│ (Resource) │
└────────────┘
权限判定引擎流程:
输入: 用户U, 应用A, 操作OP, 资源R, 上下文C
1. 检查U是否在A的应用白名单中(组织级) → 否→拒绝
2. 获取U在A中的角色列表 → 获取角色对应的权限集
3. 检查权限集是否包含 (OP, R) → 是→允许
4. ABAC规则评估:检查上下文C(时间/IP/设备/MFA等级)
→ ABAC规则不满足 → 降级/拒绝
5. 返回判定结果
3.2 核心权限表结构
-- 角色表
CREATE TABLE T_ROLE (
role_id BIGINT PRIMARY KEY AUTO_INCREMENT,
app_id BIGINT NOT NULL COMMENT '所属应用',
role_name VARCHAR(64) NOT NULL COMMENT '角色名',
role_code VARCHAR(64) NOT NULL COMMENT '角色编码(应用内唯一)',
description VARCHAR(256),
is_system TINYINT NOT NULL DEFAULT 0 COMMENT '系统预置角色',
status TINYINT NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_app_role (app_id, role_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
-- 权限资源表
CREATE TABLE T_PERMISSION (
perm_id BIGINT PRIMARY KEY AUTO_INCREMENT,
app_id BIGINT NOT NULL COMMENT '所属应用',
resource VARCHAR(128) NOT NULL COMMENT '资源标识: menu:/user/list',
action VARCHAR(32) NOT NULL COMMENT '操作: read/write/delete/admin',
description VARCHAR(256),
status TINYINT NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_app_resource_action (app_id, resource, action)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限资源表';
-- 角色-权限关联
CREATE TABLE T_ROLE_PERMISSION (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
role_id BIGINT NOT NULL,
perm_id BIGINT NOT NULL,
effect TINYINT NOT NULL DEFAULT 1 COMMENT '1-允许 0-拒绝',
UNIQUE KEY uk_role_perm (role_id, perm_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';
-- 用户-应用角色分配
CREATE TABLE T_USER_APP_ROLE (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
account_id BIGINT NOT NULL COMMENT '用户账号ID',
app_id BIGINT NOT NULL COMMENT '应用ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
grant_type VARCHAR(16) DEFAULT 'direct' COMMENT 'direct-直接分配 org-继承',
start_date DATETIME,
end_date DATETIME COMMENT '有效期',
granted_by VARCHAR(64),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_account_app_role (account_id, app_id, role_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户应用角色分配表';
-- ABAC策略规则表
CREATE TABLE T_ABAC_POLICY (
policy_id BIGINT PRIMARY KEY AUTO_INCREMENT,
app_id BIGINT NOT NULL,
policy_name VARCHAR(128) NOT NULL,
policy_type VARCHAR(16) NOT NULL COMMENT 'allow/deny',
subject_attr JSON COMMENT '主体属性条件',
resource_attr JSON COMMENT '资源属性条件',
action_cond JSON COMMENT '操作条件',
context_cond JSON COMMENT '上下文条件(时间/IP/设备等)',
priority INT NOT NULL DEFAULT 0 COMMENT '优先级(数字越大越优先)',
status TINYINT NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ABAC策略规则表';
3.3 与应用系统的权限接口规范
参考亚信安全接口规范,提供以下核心接口供业务系统对接:
授权查询接口:
GET /api/v1/authorization/check
参数:
- app_key: 应用标识
- uid: 用户ID
- resource: 资源路径
- action: 操作
- context: 上下文(可选JSON)
返回: { allowed: true/false, reason: "xxx" }
用户角色列表:
GET /api/v1/apps/{app_key}/users/{uid}/roles
返回: [{role_id, role_code, role_name, grant_type, valid_until}]
用户权限列表:
GET /api/v1/apps/{app_key}/users/{uid}/permissions
返回: [{resource, action, effect}]
权限批量校验:
POST /api/v1/authorization/batch-check
请求体: [{app_key, uid, resource, action, context}, ...]
返回: [{allowed, reason}, ...]
权限同步通知(服务端推送):
POST /webhook/app/{app_key}/permission-sync
请求体: {event_type: "role_assign"|"role_revoke"|"perm_change",
uid, changed_roles, timestamp}
4. 授权流程
┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ 资源申请者 │ │ 审批人 │ │ 权限中心 │ │ 业务应用 │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │ │
│ 提交权限申请 │ │ │
│────────────────>│ │ │
│ │ │ │
│ 审批通过/拒绝 │ │
│ │────────────────>│ │
│ │ │ 分配角色 │
│ │ │────────────────>│
│ │ │ (授权生效通知) │
│ 申请结果通知 │ │ │
│<───────────────────────────────────────────────────│
│ │ │ │
│ 使用授权 │ │ │
│───────────────────────────────────────────────────>│
│ │ │ 鉴权校验 │
│<───────────────────────────────────────────────────│
授权模式支持:
- 手动分配:管理员为指定用户分配角色
- 申请审批:用户提交申请 → 上级/安全管理员审批 → 自动生效
- 组织继承:自动继承所属组织的默认角色集
- 临时授权:设定生效时间窗口,到期自动回收
第二部分:系统资源管理中心(含堡垒集群)
5. 总体定位
系统资源管理中心负责服务器、网络设备、数据库等基础设施资源的权限管理,包含堡垒机集群集成。核心职责:
- 管理系统资源的访问权限(SSH/RDP/数据库连接)
- 提供堡垒机单点登录和会话录制
- 参考泰岳管理模型(反推库结构和接口)
- 管理登录凭证、密钥、授权策略
6. 参考泰岳管理模型 - 反推策略
6.1 泰岳系统资源管理模型推断
基于现网泰岳版4A的运维经验和操作界面观察,反推其数据模型:
-- 推断的泰岳资产表结构
-- T_ASSET
-- asset_id BIGINT PK
-- asset_name VARCHAR(128) 资产名称
-- asset_ip VARCHAR(64) 管理IP
-- asset_type TINYINT 资产类型:1-Linux 2-Windows 3-网络设备 4-数据库
-- asset_group VARCHAR(128) 所属资产组
-- protocol VARCHAR(16) 管理协议:ssh/rdp/telnet
-- port INT 端口
-- account_auto TINYINT 1-纳管账号 0-手动密码
-- auth_mode TINYINT 1-密码 2-密钥 3-双因子
-- status TINYINT
-- 推断的泰岳授权表
-- T_ASSET_AUTH
-- auth_id BIGINT PK
-- asset_id BIGINT FK -> T_ASSET
-- account_id BIGINT FK (泰岳内部账号)
-- system_account VARCHAR(64) 目标系统账号(root/oracle/...)
-- access_level TINYINT 权限等级:1-普通 2-运维 3-管理员
-- start_time DATETIME 授权开始
-- end_time DATETIME 授权结束
-- approver VARCHAR(64)
反推方法论:
┌──────────────────────────────────────────────────────────────────┐
│ 反推方法 │
│ │
│ 1. 界面观察法 │
│ - 录屏泰岳操作界面,记录所有字段名和排列顺序 │
│ - 观察搜索/筛选条件字段(通常映射到DB索引字段) │
│ - 导出功能里的列名(CSV/xls导出列名常等于DB列名) │
│ │
│ 2. API嗅探法 │
│ - 浏览器开发者工具抓取泰岳管理的API请求/响应JSON │
│ - 关注字段名映射(下划线命名 vs 驼峰命名规律) │
│ - 分页参数(limit/offset习惯暗示底层DB) │
│ │
│ 3. 日志分析法 │
│ - 查看泰岳版的操作日志/审计日志字段定义 │
│ - 从报错信息中提取表名和字段名(典型:Constraint violation) │
│ │
│ 4. 行为验证法 │
│ - 设置特定值 → 观察界面呈现 → 推断字段类型/约束 │
│ - 创建/修改/删除操作 → 推断关联关系和约束条件 │
└──────────────────────────────────────────────────────────────────┘
6.2 自研系统资源模型
-- 资产主表
CREATE TABLE T_SYSTEM_ASSET (
asset_id BIGINT PRIMARY KEY AUTO_INCREMENT,
asset_name VARCHAR(128) NOT NULL COMMENT '资产名称',
asset_ip VARCHAR(64) NOT NULL COMMENT '管理IP',
asset_type TINYINT NOT NULL COMMENT '1-Linux 2-Windows 3-网络设备 4-数据库 5-中间件',
asset_group_id BIGINT COMMENT '所属资产组',
-- 连接信息
protocol VARCHAR(16) NOT NULL DEFAULT 'ssh' COMMENT '管理协议:ssh/rdp/telnet/mysql/oracle',
port INT NOT NULL DEFAULT 22,
-- 凭据管理
credential_mode TINYINT NOT NULL DEFAULT 1 COMMENT '1-纳管密码 2-纳管密钥 3-手动输入 4-动态令牌',
-- 纳管账号(系统层面的账号,非4A用户账号)
managed_account VARCHAR(64) COMMENT '纳管系统账号(root/oracle等)',
managed_password_enc VARCHAR(512) COMMENT '纳管密码(AES-256加密)',
managed_key_enc TEXT COMMENT '纳管私钥(AES-256加密)',
-- 访问控制
access_level TINYINT NOT NULL DEFAULT 2 COMMENT '访问等级:1-低 2-中 3-高',
allowed_users JSON COMMENT '允许操作的白名单用户列表',
-- 堡垒机集成
bastion_enabled TINYINT NOT NULL DEFAULT 1 COMMENT '是否通过堡垒机接入',
-- 状态
status TINYINT NOT NULL DEFAULT 1 COMMENT '0-停用 1-启用 2-维护',
-- 元数据
department VARCHAR(128) COMMENT '所属部门',
location VARCHAR(128) COMMENT '物理位置',
vendor VARCHAR(64) COMMENT '厂商',
model VARCHAR(64) COMMENT '型号',
os_version VARCHAR(64) COMMENT '操作系统版本',
remark TEXT,
-- 审计
created_by VARCHAR(64),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT NOT NULL DEFAULT 0,
INDEX idx_asset_ip (asset_ip),
INDEX idx_asset_type (asset_type),
INDEX idx_group (asset_group_id),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统资产表';
-- 资产授权表
CREATE TABLE T_ASSET_AUTHORIZATION (
auth_id BIGINT PRIMARY KEY AUTO_INCREMENT,
asset_id BIGINT NOT NULL,
account_id BIGINT NOT NULL COMMENT '4A用户ID',
-- 目标系统身份
target_username VARCHAR(64) NOT NULL COMMENT '目标系统账号(root/appuser)',
-- 授权信息
access_level TINYINT NOT NULL DEFAULT 1 COMMENT '1-只读查看 2-普通操作 3-管理员操作',
-- 时间窗口
grant_type VARCHAR(16) NOT NULL DEFAULT 'permanent' COMMENT 'permanent-永久 temporary-临时',
valid_from DATETIME NOT NULL,
valid_until DATETIME,
-- 审批信息
approval_status TINYINT NOT NULL DEFAULT 0 COMMENT '0-待审批 1-已批准 2-已拒绝 3-已回收',
approver_id BIGINT,
approved_at DATETIME,
-- 行为约束
command_filter TEXT COMMENT '允许执行的命令白名单(正则)',
file_transfer TINYINT NOT NULL DEFAULT 0 COMMENT '0-禁止 1-允许上传 2-允许下载 3-双向',
-- 审计
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
revoked_at DATETIME,
revoked_by BIGINT,
INDEX idx_asset (asset_id),
INDEX idx_account (account_id),
INDEX idx_valid (valid_from, valid_until),
INDEX idx_status (approval_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='资产授权表';
-- 资产组表
CREATE TABLE T_ASSET_GROUP (
group_id BIGINT PRIMARY KEY AUTO_INCREMENT,
group_name VARCHAR(128) NOT NULL,
parent_id BIGINT,
org_code VARCHAR(64) COMMENT '所属组织',
description VARCHAR(256),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='资产组表';
-- 账号密码自动轮换配置
CREATE TABLE T_CREDENTIAL_ROTATION (
rotation_id BIGINT PRIMARY KEY AUTO_INCREMENT,
asset_id BIGINT NOT NULL,
target_account VARCHAR(64) NOT NULL COMMENT '目标系统账号',
rotation_schedule VARCHAR(32) NOT NULL DEFAULT '30d' COMMENT '轮换周期:7d/14d/30d/90d',
password_rule JSON COMMENT '密码生成规则',
last_rotation DATETIME,
next_rotation DATETIME,
auto_execute TINYINT NOT NULL DEFAULT 1 COMMENT '是否自动执行',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_asset_account (asset_id, target_account)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='密码轮换配置表';
7. 堡垒集群集成方案
7.1 架构选择
采用代理模式(非网关代理,而是独立部署堡垒机节点转发流量):
┌──────────────┐
│ 4A管控平台 │
│ (认证+授权) │
└──────┬───────┘
│ API
┌──────────────┼──────────────┐
│ │ │
┌────────▼───┐ ┌──────▼──────┐ ┌────▼────────┐
│ 堡垒节点1 │ │ 堡垒节点2 │ │ 堡垒节点3 │
│ (区域A) │ │ (区域B) │ │ (区域C) │
│ ┌────────┐ │ │ ┌────────┐ │ │ ┌────────┐ │
│ │SSH/RDP │ │ │ │SSH/RDP │ │ │ │SSH/RDP │ │
│ │代理 │ │ │ │代理 │ │ │ │代理 │ │
│ └────────┘ │ │ └────────┘ │ │ └────────┘ │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
│ (网络隔离,策略控制) │
│ │ │
┌──────▼──────┐ ┌─────▼───────┐ ┌────▼──────┐
│ 目标服务器1 │ │ 目标服务器2 │ │ 目标服务器3 │
│ 10.0.1.10 │ │ 10.0.2.20 │ │ 10.0.3.30 │
└─────────────┘ └─────────────┘ └───────────┘
7.2 堡垒机核心功能
| 功能 | 说明 | 实现方案 |
|---|---|---|
| SSO登录 | 用户从4A平台认证后直接跳转堡垒机,无需再次认证 | JWT令牌 → 堡垒节点验证 → 建立会话 |
| 会话录制 | 记录所有操作步骤(键盘输入 + 屏幕输出) | ttyrec/cast 格式录制,定期归档至对象存储 |
| 命令审计 | 记录执行命令,匹配高危命令规则 | 实时监控bash/windows shell日志 |
| 文件传输审计 | 追踪SCP/SFTP传输的文件名、大小、路径 | 代理层拦截审计 |
| 命令拦截 | 高危命令(rm -rf /, shutdown等)实时阻断 | 自定义shell profile + 命令过滤器 |
| 会话同步 | 多人同时监控同一会话 | WebSocket实时同步 |
| 事后回放 | 回放录制的会话 | 基于录制文件+时间轴播放器 |
7.3 堡垒节点技术选型
| 组件 | 推荐 | 备选 |
|---|---|---|
| 代理核心 | Apache Guacamole(已支持SSH/RDP/VNC) | teleport/ssh-proxy 自研 |
| 会话录制 | asciinema (ttyrec格式) | script + scriptreplay |
| 命令拦截 | 自定义shell profile (bash_prompt wrapper) | pam_exec模块钩子 |
| 文件传输审计 | SFTP proxy (在openssh中集成ForceCommand) | rssh/scponly |
| 会话存储 | 本地文件 → 定时上传至MinIO | Ceph RGW |
| 会话回放 | asciinema player 前端组件 | 自研播放器组件 |
7.4 堡垒机SSO流程
1. 用户从4A平台认证 → 获取JWT (payload含allowed_assets)
2. 用户选择目标资产 → 4A平台验证授权
3. 4A平台生成一次性堡垒令牌(有效期60秒,含用户+资产+目标账号)
4. 用户浏览器跳转至堡垒节点URL(带令牌)
5. 堡垒节点验证令牌 → 获取目标账号的真实密码/密钥(加密传输)
6. 堡垒节点建立SSH/RDP连接目标资产
7. 代理层开始录制和审计
8. 会话结束后录制上传至对象存储
8. 与泰岳版比对关注点
| 项 | 自研方案 | 泰岳方案(推测) | 验证方法 |
|---|---|---|---|
| 资产模型 | 通用资产表+扩展属性 | 可能按类型分多表 | 创建各类型资产对比信息完整度 |
| 授权粒度 | 命令级黑白名单+时间窗口+文件传输控制 | 类似 | 设置复杂授权策略对比生效情况 |
| 堡垒节点 | 基于开源组件(Guacamole) | 自研代理 | 并发连接数对比 |
| 密码轮换 | 定时间隔+自动执行 | 类似 | 轮换成功率+时间对比 |
| 会话录制 | asciinema格式 | 未知格式 | 存储空间占用+回放体验对比 |
| 命令拦截 | shell profile级 | 代理级更底层 | 高危命令漏报率对比 |