# 应用资源管理中心 + 系统资源管理中心(含堡垒集群) > 本文件涵盖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 应用注册模型 ```sql 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 核心权限表结构 ```sql -- 角色表 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 与应用系统的权限接口规范 参考亚信安全接口规范,提供以下核心接口供业务系统对接: ```yaml 授权查询接口: 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. 授权流程 ``` ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ 资源申请者 │ │ 审批人 │ │ 权限中心 │ │ 业务应用 │ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │ │ │ │ │ 提交权限申请 │ │ │ │────────────────>│ │ │ │ │ │ │ │ 审批通过/拒绝 │ │ │ │────────────────>│ │ │ │ │ 分配角色 │ │ │ │────────────────>│ │ │ │ (授权生效通知) │ │ 申请结果通知 │ │ │ │<───────────────────────────────────────────────────│ │ │ │ │ │ 使用授权 │ │ │ │───────────────────────────────────────────────────>│ │ │ │ 鉴权校验 │ │<───────────────────────────────────────────────────│ ``` **授权模式**支持: 1. **手动分配**:管理员为指定用户分配角色 2. **申请审批**:用户提交申请 → 上级/安全管理员审批 → 自动生效 3. **组织继承**:自动继承所属组织的默认角色集 4. **临时授权**:设定生效时间窗口,到期自动回收 --- ## 第二部分:系统资源管理中心(含堡垒集群) ## 5. 总体定位 系统资源管理中心负责**服务器、网络设备、数据库等基础设施资源的权限管理**,包含堡垒机集群集成。核心职责: - 管理系统资源的访问权限(SSH/RDP/数据库连接) - 提供堡垒机单点登录和会话录制 - 参考泰岳管理模型(反推库结构和接口) - 管理登录凭证、密钥、授权策略 --- ## 6. 参考泰岳管理模型 - 反推策略 ### 6.1 泰岳系统资源管理模型推断 基于现网泰岳版4A的运维经验和操作界面观察,反推其数据模型: ```sql -- 推断的泰岳资产表结构 -- 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 自研系统资源模型 ```sql -- 资产主表 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级 | 代理级更底层 | 高危命令漏报率对比 |