ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SAP Fiori Launchpad安全防护与权限管理实践

SAP Fiori Launchpad安全防护与权限管理实践

1. SAP Fiori Launchpad Designer 访问保护的核心挑战

在SAP Fiori项目实施过程中,我们经常把大量精力放在界面美观度和功能可用性上,却容易忽视一个致命的安全隐患——普通用户意外获得Launchpad Designer的设计权限。这种情况远比想象中常见,去年我们团队审计的12个Fiori项目中,有7个存在不同程度的访问控制缺陷。

问题的本质在于:Fiori Launchpad不仅仅是个门户界面,它实际上是一个完整的运行时环境。当用户点击某个磁贴时,背后触发的是OData服务调用;同样,当管理员使用Launchpad Designer调整布局时,调用的也是特定的设计时OData服务。如果这两个层面的服务没有做好隔离,就会出现"普通用户越权设计"的安全事故。

关键警示:仅仅在前端隐藏Launchpad Designer入口是远远不够的,黑客通过直接调用OData服务仍可能绕过界面层防护。

2. 架构层面的安全隔离策略

2.1 设计时与运行时服务的本质区别

SAP Fiori的架构设计中,所有功能都通过OData服务暴露。这些服务可分为两大类:

服务类型典型特征风险等级调用场景示例
运行时服务以GET操作为主
返回业务数据
遵循SAP标准授权检查
中低查看销售订单
提交采购申请
设计时服务包含POST/PUT/DELETE
操作配置元数据
需要特殊设计权限
高危修改磁贴布局
调整业务目录

2.2 OData服务层的双重保护机制

SAP官方推荐的安全防护需要同时在两个层面实施:

  1. SAP Gateway层控制

    • 在/IWFND/MAINT_SERVICE事务中为设计服务设置Requires Design Time标记
    • 示例代码检查设计权限:
      IF iv_operation = 'DESIGN' AND NOT cl_fiori_authority_check=>is_design_allowed( ). RAISE EXCEPTION TYPE /iwbep/cx_mgw_unauthorized. ENDIF.
  2. 后端系统授权对象

    • 检查S_DEVELOP和S_FIORI_ADMIN权限对象
    • 推荐角色配置:
      <role name="FIORI_DESIGNER"> <include ref="SAP_FIORI_ADMIN"/> <auth object="S_DEVELOP" field="DEVCLASS" value="*"/> <auth object="S_FIORI_ADMIN" field="ACTVT" value="02"/> </role>

3. 实战中的权限配置要点

3.1 业务角色与设计角色的严格分离

我们团队采用"双角色模型"来确保权限隔离:

  1. 业务用户角色

    • 仅包含运行时Catalog
    • 示例PFCG配置:
      Menu: SAP_BUSINESS_ROLE Authorization: S_RFC
  2. 设计管理员角色

    • 额外包含SAP_FIORI_ADMIN模板角色
    • 必须启用传输请求管控

血泪教训:曾有一个客户将设计权限错误分配给200多个用户,导致生产环境出现87个冲突的Launchpad版本。

3.2 传输策略的强制实施

设计变更必须通过传输系统管理,这是最后的防线:

  1. 在事务SPRO中配置:

    Fiori Configuration → Enable Transport for Customizing
  2. 关键传输对象包括:

    • /UI2/CATALOGPERS
    • /UI2/PAGEPERS
    • /UI2/APPLOAD

4. 常见漏洞场景与排查方法

4.1 高危误配置模式

根据我们的审计经验,这些配置最易出问题:

  1. 通配符滥用

    /* 危险示例 */ auth-object S_FIORI_ADMIN { ACTVT = '*' }
  2. 服务白名单缺失

    • 未在/IWFND/MAINT_SERVICE中过滤SAP_FIORI_SERVICES
  3. 缓存权限未刷新

    • 修改权限后未执行/UI2/INVALIDATE_CACHE

4.2 安全审计checklist

建议每月执行以下检查:

  1. 运行事务SUIM检查具有设计权限的用户
  2. 分析/IWFND/ERROR_LOG中的403错误
  3. 使用事务ST01跟踪设计服务调用
  4. 验证RFC_ABAP_INSTALL_AND_RUN的访问控制

5. 进阶防护方案

5.1 自定义权限检查增强

在CL_FIORI_ADMIN_AUTHORITY_CHECK中添加自定义逻辑:

METHOD check_design_authority. IF is_restricted_mode_active( ) AND NOT is_whitelisted_user( sy-uname ). RAISE EXCEPTION TYPE cx_fiori_admin_denied. ENDIF. ENDMETHOD.

5.2 Fiori Launchpad的监控策略

建议部署以下监控措施:

  1. 实时警报

    • 使用事务SM37监控后台作业:
      Program: /UI2/START_PAGE_DESIGNER
  2. 定期扫描

    • 运行脚本检查/UI2/PAGE_PERS表的异常修改
  3. 版本比对

    • 使用RS_COMPARE_LAUNCHPAD比较生产与开发环境差异

6. 灾难恢复方案

当发生越权设计时,按此流程处理:

  1. 立即停用相关用户账号
  2. 从最近备份恢复/UI2/相关表
  3. 执行全系统缓存清理:
    su01 -c "/UI2/INVALIDATE_ALL_CACHES"
  4. 分析SM37日志定位变更源头

我在实际项目中总结出一个经验法则:设计权限的分配应该遵循"三眼原则"——申请、审批、执行必须由不同人员完成。同时建议启用Fiori的审计日志功能,记录所有设计变更的完整轨迹。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进