ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SAP RAL中Purpose定义与配置实战:让敏感数据访问有据可查

SAP RAL中Purpose定义与配置实战:让敏感数据访问有据可查 审计组把一份用户访问清单拍到我桌上过去三个月有账号在凌晨批量读取了几百名在职员工的薪酬主数据银行账号、基本工资、手机号全都被拉了一遍。权限复查结果没有任何问题——那个账号本来就有读取人力资源数据的人口可整个事件完全没有解释是谁在什么业务背景下读的读这些数据是为了完成什么任务系统里根本没有答案。这个场景就是 SAP Read Access LoggingRAL存在的全部意义。很多团队理解 RAL 时只记住了记录谁读了什么却忽略了标题里后半句——Purpose 定义。Purpose 这个词在 RAL 配置里不是可填可不填的备注字段它是整条日志的业务解释权。本文我会从一次真实审计事故讲起拆解 RAL 的日志构成重点讲清楚 Purpose 怎么从业务目的推导出来、怎么落到配置里、上线后怎么靠它做日志分析。适合正在做 S/4 数据保护、等保合规、敏感数据访问审计的安全顾问、BASIS 和 SAP 权限顾问参考也适合刚接手 RAL 项目的朋友避免一上来就掉进纯技术配置的坑。1. 一次审计差点翻车的场景RAL 到底在解决什么问题1.1 为什么有权限不等于访问可解释传统 SAP 权限体系回答的问题是能不能读。一个用户拥有某个权限对象、某个角色他就能执行对应的事务代码读取对应的表数据。这个机制在防越权上很有效但它根本不回答为什么读。你想象一下审计人员拿到一份数据访问清单时的连环提问这个账号凌晨三点读薪酬数据是什么任务需要这个用户读客户银行账号是为了处理收款还是纯粹好奇后台作业批量读取所有供应商主数据对应的业务凭证是什么外部接口通过 RFC 调用读取了产品价格这个调用来自哪个系统、哪个模块、哪个操作如果系统里只记录了某账号在某时刻执行了某事务代码上面所有问题都答不上来。权限没有越界、技术上没有报错但你无法证明这次访问是合规业务的一部分。这在数据保护审计里就是缺陷。RAL 的核心思路是在谁在什么时间执行了什么的基础上再追问一层为什么。它记录的不只是系统层面的访问行为而是带有业务语义的读取证据。Purpose 就是那一层业务语义的标签。1.2 RAL 到底记录了什么一条日志的完整构成我配置过不少 RAL 项目刚开始也以为它就是一个大号审计日志把所有读取操作无差别记录下来。实际用过之后才发现RAL 的日志结构比想象中精细得多。一条完整的 RAL 日志通常包含以下信息访问者用户 ID、用户的组、用户类型对话用户、后台用户、接口用户。访问路径通过哪个通道触发——SAP GUI 界面、Fiori 界面、RFC 调用、Web Service、BW 查询。数据对象读的是哪张表、哪个程序产生的读取事件比如 HR 主数据、物料主数据、客户主数据。操作类型显示、导出、批量读取是成功读取还是尝试读取。关键字段值记录范围内涉及的敏感字段以及读到的值。时间戳精确到秒的访问时间。Purpose这条读取绑定的业务目的标签。我为什么强调 Purpose 是最后那一笔因为前几项都是系统自动抓取的客观事实只有 Purpose 是你主动配置进去的业务解释。审计人员拿到日志后最关心的恰恰是最后这一项。另外要注意RAL 支持字段级日志。你可以指定某几个字段单独记录比如基本工资、银行账号、身份证号也可以对字段值做掩码处理比如银行账号只显示后四位。这个能力是后面控制日志风险的关键但我见过不少项目把它用反了后面第四章会细说。1.3 RAL 和 SAP 系统日志、Security Audit Log 的边界很多刚接触的朋友会把 RAL 和另外两类日志搞混这里先划清楚边界。Security Audit Log事务代码 SM19/SM20记录的是系统层的审计相关事件比如用户登录、事务启动、权限检查失败、RFC 连接建立。它关注的是系统里发生了什么操作粒度相对粗适合排查登录异常、权限失败但它不会告诉你这次读取背后是什么业务任务。系统日志事务代码 SM21记录的是 ABAP 运行时错误、数据库锁超时、程序异常这类技术事件主要用于排障和业务访问审计完全是两条线。RAL 补充的正是前两者的空白聚焦读取敏感数据这个动作本身并且带上 Purpose 标签。如果打个比方Security Audit Log 是门口的监控摄像头看到有人进了门RAL 是档案室的借阅登记本记下谁查了哪份档案、以什么理由查的。在一个完整的合规体系里它们各管一段互相不能替代。2. 动手配置前先把业务目的这张清单写出来2.1 为什么业务目的必须先于技术配置存在在我经手的 RAL 项目里最让我头疼的从来不是配置本身而是业务方根本说不清楚为什么要记这条日志。技术顾问一头扎进 SPRO 里把条件、策略、事件全配好最后审计检查时被问一句你记这笔日志的合规依据是什么、对应哪个业务目的现场直接卡壳。Purpose 机制的设计初衷就是逼你在配置前想清楚这个问题。数据保护的基本原则之一是目的限制——收集、记录个人数据或敏感数据必须限定在明确、合法、具体的目的范围内不能无差别地全量收集。RAL 记录的是访问行为本质上也是一种数据处理活动。如果没有 Purpose那日志就变成了为了记录而记录既浪费存储资源又埋下合规隐患。我建议做配置之前先列一份业务目的清单。这个动作不需要懂任何 SAP 技术需要的是法务、审计、业务关键用户和安全团队坐在一起把话说透。清单上每个目的要能回答四件事哪些数据属于这个目的范围谁会出于这个目的访问这些数据触发访问的具体业务场景是什么这批日志证据要保留多久2.2 先做数据分类再做 Purpose 分类Purpose 不能凭空定义它的上游是数据分类。你得先知道系统里哪些数据敏感、敏感在哪才能给它们安排对应的日志目的。我做数据分类时一般分成三个等级。高敏感数据包括薪酬字段、个人身份证号、银行账号、绩效评估、健康信息这类一旦泄露对个人影响极大、监管要求明确的数据中敏感数据包括客户联系人信息、采购价格、产品成本、供应商账期这类有商业价值但不直接涉及个人隐私的数据低敏感数据包括物料描述、工厂日历、一般主数据描述这类即使被大量读取也不构成实际风险的。分类完成之后再按数据域梳理访问场景。SAP 系统里常见的数据域包括 HR 薪酬与人事、财务银行与总账、客户主数据、供应商主数据、采购价格与询比价、销售订单与定价、生产 BOM 与工艺路线。每个数据域下对应哪些业务组在访问、访问的频率和通道是什么这张矩阵就是 Purpose 清单的原料。我还见过一种比较省事的做法从权限角色清单反向推导。把系统里拥有敏感数据读取权限的角色列出来按角色归属的业务组归类归完类之后自然就能得出这批人平时读取数据的目的是什么。这个方法在已经上线多年的系统里特别有效因为角色往往和业务岗位一一对应比从零梳理主数据快得多。2.3 一份可以直接抄的 Purpose 清单模板下面这张表格是我在项目里常用的一种目的清单模板你也可以直接拿去做业务方评审时的讨论底稿。注意 Purpose 的数量控制非常关键太少会导致审计无法区分场景太多会导致维护成本失控。经验值在一个中型 S/4 系统里控制在 1030 个比较合适。Purpose ID目的名称业务触发场景典型访问者核心敏感字段建议保留期ZHR_PAYROLL工资核算数据读取月结工资核算期间读取薪酬主数据HR 薪酬组、Payroll 后台作业基本工资、银行账号、津贴项3 年ZHR_RECRUIT招聘流程候选人数据审核招聘环节查看候选人履历与背调信息招聘专员、用人部门接口人候选人身份证号、联系方式、薪资期望1 年ZFI_BANK银行对账数据读取财务人员核对未达账项与银行流水财务应付组、资金管理组银行账号、供应商银行明细2 年ZMM_PRICE采购询比价历史数据读取采购员查看历史价格用于比价谈判采购组、供应商管理组历史采购价格、最近订单价2 年ZSD_CREDIT客户信用审查数据读取信用专员审核客户授信额度信用管理组、销售财务接口人客户信用额度、逾期明细、银行账号2 年ZGSO_TAX税务检查数据配合读取配合税务检查导出发票与成本数据税务会计、内审人员发票明细、销售订单、成本中心5 年命名规则也建议统一我这里用的是Z业务域缩写业务场景Z 开头保证不与未来的 SAP 标准 Purpose 冲突。每个 Purpose 必须能对应到一个真实的业务管理流程如果某个 Purpose 写出来之后没人说得清这个目的具体在哪个流程里触发那它就是多余的直接删掉。2.4 把业务目的翻译成技术筛选条件Purpose 清单是业务语言系统不认接下来要做的是翻译工作。这是整个 RAL 设计里最考验顾问功力的一步。所谓翻译就是为每个 Purpose 定义一组技术条件让系统知道符合这些条件的读取路径要归类到那个 Purpose 下。常用的条件维度包括用户组把业务组对应的 SAP 用户组作为筛选条件。角色按权限角色筛选比如包含 SAP_HR_PAYROLL 的角色。程序名或事务代码锁定具体的报表程序、后台作业程序。客户端隔离出生产客户端和测试客户端。RFC 目的地针对外部系统调用的接口账号单独设条件。URL 或 OData 服务Fiori 或 Web Service 通道下按服务路径筛选。拿上表的 ZHR_PAYROLL 举例它在系统里的条件组合可能是这样条件组类型示例值说明条件 A用户组US_HR_PAYROLL锁定薪酬组的对话用户条件 B程序名RPCALC*、RPUCMP* 等 Payroll 程序锁定后台工资核算程序条件 CRFC 目的地EXT_PAYROLL_PROVIDER锁定外部薪酬平台的接口调用条件 D角色SAP_HR_PAYROLL_*锁定薪酬角色兜底这些条件之间用 AND/OR 组合。比如用户组是 HR 薪酬组 AND 程序名是 Payroll 程序才能归类到工资核算目的而接口调用走 RFC 时用户组往往不对所以RFC 目的地 EXT_PAYROLL_PROVIDER作为另一个独立条件组OR 进来。这一步最容易犯的错是条件写得太宽松。比如为了省事把所有 HR 用户都塞进薪酬 Purpose结果招聘组、培训组读人事信息的日志全部被打上了工资核算标签审计人员一看就知道这个 Purpose 是假的。翻译条件的原则是宁可条件多写几条也要让日志记录的原因经得起追问。3. 在 SAP 系统里把 Purpose 落地从 SPRO 到 SRALMANAGER 的完整步骤3.1 版本支持与配置入口先确认你站在哪个系统版本上开始配置前先确认版本支持。Read Access Logging 从 NetWeaver 7.02 开始提供ECC 6.0 EHP4 以上可用在 S/4 HANA 里已经全面集成。如果你还在比较老的 ECC 版本上建议先查 SAP Note 确认具体 EHP 和组件支持情况避免配置到一半发现功能缺失。新版 S/4 HANA 的配置主入口有两个。一个是传统 SPRO 路径跨应用组件 → 数据保护和安全性 → Read Access Logging在这个路径下可以维护 Purpose、条件、语义策略、字段属性和日志事件另一个是事务代码 SRALMANAGER它会打开一个 Web UI 配置界面把前面这些配置项整合在页签里操作起来比 SPRO 直观很多。我的习惯是日常维护直接用 SRALMANAGER因为它能把条件、策略、Purpose 放在同一个界面看改一处就能预览整个链路。SPRO 路径更适合做项目交付文档截图和权限控制。两个入口实际配置的对象是同一套不会出现改了 A 入口但 B 入口不同步的问题。权限方面有一个项目里常见的坑很多公司把 RAL 配置权直接授权给 BASIS 管理员但 RAL 的 Purpose 需要懂业务的同事参与评审。我建议项目上至少分两个角色安全顾问负责条件、策略、事件这些技术维度业务安全代表负责 Purpose 的创建、描述和保留期的确认。责任分开了Purpose 的质量才有保障。3.2 定义 Purpose名字、描述、法律依据、保留期一次说清楚进入 SRALMANAGER 后先打开 Purpose 页签。创建一条新 Purpose 需要维护的内容主要有四项。第一是 Purpose ID 和名称。ID 按前面说的命名规则来名称要写业务能看懂的话不要写代码风格的名字。比如工资核算数据读取就比HR_PAY_DATA_01好得多因为审计人员看到日志时第一眼是名称不是 ID。第二是描述。这里要把触发场景写清楚最好包含在什么业务环节、什么角色、读取什么数据这三个要素。描述是审计人员后续定位问题时的第一线索写得太简短等于没写。我见过有人只写薪酬数据后来审计问细节只能逐条翻代码那段时间我们称它为玄学日志。第三是法律依据或合规依据。这栏在标准配置里不强制但我强烈建议填。填写时可以引用公司内部数据保护制度条款、行业合规要求或监管检查要求目的就是让每条日志都能说清楚我记录这笔访问的正当理由在哪里。比如薪酬类 Purpose 可以填依据公司薪酬保密制度第三条工资核算期间薪酬数据访问须留痕三年。第四是保留期。这是 Purpose 的一个重要属性系统按 Purpose 的保留期区分日志的归档和清理策略。薪酬、税务类建议三年到五年一般业务读取一年到两年即可。注意保留期只是一个配置标记真正的归档删除动作还需要后台作业配合别指望配置完保留期日志就自动瘦身了。3.3 维护敏感字段与掩码日志里的字段值是单刃剑Purpose 定义好后回到 RAL 配置界面维护字段设置。这一步要明确两件事哪些字段需要做字段级日志记录这些字段在日志里以什么形式呈现。我在项目里的做法是先跑一遍系统表清单把高敏感和中敏感字段拉出来再按 Purpose 分配。薪酬类目的核心字段是基本工资、银行账号、津贴项财务类目的是银行账号、供应商银行明细客户类目的是信用额度、联系方式。每一个字段都可以维护独立的字段属性控制是否掩码、掩码规则是什么。掩码类型一般有几种不掩码完整记录、部分掩码比如只显示前几位或后几位、完全掩码只记录该字段被访问了但不记录值。选择依据很简单——这个值在后续审计里有没有实际用途。如果只是为了证明有人碰过银行账号完全掩码就够如果业务要求保留完整值用于追溯支付纠纷那就完整记录但要严格控制这个 Purpose 的访问范围和保留期。有个教训我至今记得某项目为了省事把所有敏感字段都设置了完整记录结果日志表里躺着几千万条明文银行账号。日志本身变成了一个巨大的敏感数据副本安全合规部门反过来要求对日志库再做一层加密和访问控制成本翻了一倍。所以我给客户的建议永远是没有强制取证需求的敏感字段一律掩码。3.4 定义条件把谁在什么通道下访问写成机器能判断的规则进入条件维护界面这里会用到 2.4 节翻译出来的条件组合。RAL 条件本质上是谓词集合一个条件里可以包含多个维度维度之间支持 AND、OR 以及括号嵌套。以 ZHR_PAYROLL 为例完整条件可以拆成两组第一组是对话用户组 US_HR_PAYROLL AND 事务代码属于薪酬类显示事务第二组是RFC 目的地 EXT_PAYROLL_PROVIDER AND 程序名以 RPC 开头。两组之间用 OR 连接表示无论人是前台操作还是接口后台调用只要符合对应路径都归类到这个 Purpose。条件配置里有几个细节值得注意。条件会按配置顺序评估评估顺序如果设计不当后面的 Purpose 可能永远没有机会生效。我的习惯是把最严格的专用条件放在前面把兜底宽条件放后面这样专用场景先被识别剩余流量落到兜底里。另外条件里尽量不要使用所有用户这种全匹配写法除非这个 Purpose 本身就是用来做全量兜底的。条件维护界面里通常还可以配置满足条件后是否继续评估后续策略。这个选项要小心处理如果你希望一条日志只绑定最匹配的那个 Purpose就关闭继续评估如果你希望条件叠加、多个标签共存就打开。我绝大多数项目都选前者因为日志归属必须唯一审计时不能出现同一条访问同时归到薪酬和税务两个 Purpose 的情况。3.5 语义策略与 Purpose 挂钩让记不记和为什么记合体条件和 Purpose 都建好之后就差最后一道组装工序——语义策略。语义策略在 RAL 里的作用是把一组条件和动作绑定决定符合这些条件的访问要不要记录、记录到什么程度。在创建语义策略时会要求绑定一个 Purpose。这个设计的微妙之处在于一个语义策略可以包含多个条件组但 Purpose 落在语义策略上。也就是说多个业务目的如果触发路径非常相似可以共用同一个语义策略只是日志上打的 Purpose 标签不同。反过来一个 Purpose 也可以对应多个语义策略以覆盖不同的读取通道。我的配置顺序是先建条件再建语义策略最后给策略挂 Purpose。不要在创建语义策略时临时改 Purpose那样会打断和字段掩码、保留期的对应关系。创建完成后在语义策略列表里能看到每个策略绑定的 Purpose、激活状态和命中次数统计这页数据在后台上线阶段非常有用。这一步结束后RAL 的规则链就成型了读取事件发生 → 系统比对条件 → 命中语义策略 → 按照字段设置记录日志 → 打上 Purpose 标签 → 按 Purpose 的保留期归档。如果一个事件命中多个策略按 3.4 节说好的评估顺序只保留第一个命中的结果。3.6 启用日志事件并完成第一次冒烟验证规则配好了不等于日志开始记了最后一步是启用日志事件。RAL 的事件配置界面上会列出系统支持的读取事件类型比如 GUI 事务显示、报表执行、RFC 调用、OData 服务请求。不同模块的敏感数据分布在不同的通道上你需要按 Purpose 计划把对应的事件激活。有一个项目里经常漏掉的动作激活事件时注意区分静态启用和动态启用的选项。静态启用是全局的系统一启动就生效动态启用需要在特定上下文里触发。我建议初期用静态启用验证跑通后再考虑精细调整不要一边测试一边纠结动态开关。启用后的第一件事不是看报表是先做冒烟验证。拿一个测试账号实际执行一次读取动作比如打开某员工的薪酬主数据然后等一两分钟再去 SRAL 日志查看界面里查询这条日志。重点确认三件事日志确实产生了Purpose 标签正确挂在了预想的目的下敏感字段的掩码效果和配置一致。这一步最容易发现的问题是掩码失效或者 Purpose 挂空。如果日志里 Purpose 一列为空基本可以断定是语义策略没有绑定 Purpose或者条件匹配顺序提前命中了另一个无 Purpose 的策略。排查思路是从日志反推点开这条日志看命中的策略、条件 ID再回到 SRALMANAGER 检查对应的配置项通常一两轮就能定位。4. 上线后真正决定成败的几个细节日志评估与 Purpose 调优4.1 日志量爆炸从全都记到按目的记的止损方法RAL 上线后最常收到的第一个告警是日志表空间不足。我见过一个生产系统全量启用所有读取事件后一天产生上百万条日志数据库直接告警。问题根源往往不是 RAL 本身而是条件设计太粗把大量低风险读取也卷了进来。止损思路分两步。第一步把低敏感数据的读取事件从记录范围里摘出去。比如物料描述、工厂日历、通用主数据查询这类读取不影响个人隐私也不涉及商业机密完全可以通过条件排除。第二步对中敏感数据采用目的命中才记录的策略给它们单独建一个兜底条件条件匹配范围控制在业务组、程序、通道的组合上而不是对所有用户全量记录。日志量稳定之后要建立一个日常监控指标。我在项目里常用两个数每日日志总量、未命中任何 Purpose 的日志占比。未命中占比如果超过 20%说明还有大量读取行为没有被业务目的覆盖这类日志会出现在审计报表里成为未知访问最好及时排查补配。4.2 Purpose 太粗导致审计翻车从说不出到立刻定位Purpose 定得太粗的典型表现是整个系统只有两三个 Purpose所有日志一股脑打上内部数据访问。当审计问这批银行账号读取是财务哪条流程产生的时日志回答不了只能去翻业务凭证效率极低。粒度合适的标准其实很简单拿到一份按 Purpose 分组的日志报表读完每个分组后能大致复述出对应的业务场景。如果做不到就说明 Purpose 还需要拆分。比如 ZFI_BANK 银行对账数据读取 和 ZFI_PAYMENT 付款执行数据读取 虽然访问者都是财务组但前者是对账流程、后者是付款流程合并成一个 Purpose 会让审计无法区分动机这种情况就应该拆开。拆分的具体操作不复杂复制原 Purpose调整名称、描述、条件和保留期然后到语义策略页签把新 Purpose 挂上去。上线后建议每季度做一次 Purpose 清单评审业务系统里新上了模块、新接入了接口都可能产生新的读取目的清单要及时补。4.3 字段掩码与 Purpose 的配合别让日志本身变成泄露源前面 3.3 节提到过日志库变成敏感数据副本的教训这里再展开讲一下掩码与 Purpose 的配合逻辑。审计需求真正需要完整字段值的场景其实没有想象中多。薪酬核算追溯需要知道读了哪条记录但未必需要每条日志都留全套银行账号税务检查需要发票明细但审计人员查看日志时更关注的是读取的行为轨迹而不是重新阅读一遍业务数据。所以我配置掩码时通常按这样的原则高敏感字段默认完全掩码或部分掩码只有极少数获得正式授权的 Purpose 才允许完整记录。而允许完整记录的 Purpose 必须有更严格的访问者条件、更长的保留期之外还要额外配置日志库层面的访问管控不能让所有 BASIS 都随便读日志表。这里顺带提醒一句RAL 日志查看界面本身也是敏感数据。能查看日志的用户权限要单独控制尤其是能看到完整字段值的权限务必收紧到内审和指定的安全团队。否则就会出现一个很荒诞的局面——为了监控敏感数据读取反而让更多人接触到了敏感数据。4.4 接口和 RFC 通道的盲区只配 GUI 等于没配我在不少项目里发现RAL 配置从界面上看很完善但实际覆盖范围只包含 SAP GUI 和 Fiori 的对话用户RFC 接口通道完全漏网。外部薪酬平台、银行直连、电商订单同步这些接口系统通过 RFC 或 Web Service 批量读取数据时如果对应通道的 RAL 事件没有激活、条件没有覆盖接口账号日志就一片空白。这条盲区特别危险因为接口调用的特点是批量、高频、自动化。它一旦越权造成的泄露量级远超人工操作。配置时必须为每个外部接口单独建条件以 RFC 目的地、接口账号、调用程序名作为条件维度并且在日志查看界面上专门设一组筛选器定期检查接口通道的日志是否持续产生。排查盲区的方法很直接在系统里拉一份最近一个月活跃的 RFC 目的地清单对照 RAL 条件清单逐一勾对凡是读取过敏感表的目的地都必须有对应条件。这一步虽然费时间但每次都能查出至少一两个漏配的接口属于性价比极高的检查项。4.5 上线后的例行检查用 SRAL 把日志变成管理报表日志记录本身不产生价值产生价值的是持续检查。我建议 RAL 上线后建立按月、按季度两种节奏的例行检查。按月检查用 SRAL 事务代码进入日志查看界面按这几个维度筛选按日期范围选最近一个月按 Purpose 分组统计日志量按访问结果筛选成功访问和异常时段访问。重点关注凌晨到清晨时段的读取是否合理、接口账号的读取量是否有异常突增、命中未分配 Purpose标签的日志数量是否在上升。发现异常先点开日志看命中的策略和条件再回到 SRALMANAGER 调整配置。按季度检查和业务方一起做 Purpose 清单评审这是整个 RAL 机制能长期有效运转的关键。系统升级、流程变更、组织调整都会引起访问目的变化Purpose 清单不更新日志就会慢慢失真。评审时把每个 Purpose 的日平均日志量、命中用户数、关联程序列表拉出来让业务方确认这些信息仍然符合当前业务现状。确认不了的 Purpose 就停用。我个人在实际项目里的习惯是RAL 配置完成的第一天不急着宣布上线而是先用 4.6 节原第 3.6 节的冒烟验证思路跑一遍所有 Purpose 覆盖的关键读取场景确认每条路径都能正确打上业务目的标签。Purpose 这件事归根到底不只是系统里的一个字段而是让每一次敏感数据读取都有了解释。你如果也正在做 RAL 项目建议先从那张目的清单开始而不是先打开 SPRO。
返回列表