ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Doris生产环境安全加固实战:从权限管控到审计容灾

Doris生产环境安全加固实战:从权限管控到审计容灾 干大数据这一行这么多年我最怕听到的一句话是“先跑起来安全后面再说”。HDFS 权限裸奔到 777、Hive 表谁都能 drop、数仓账号一个密码传三代——这些问题在真实生产环境里太常见了。Doris 这两年作为实时数仓里的热门选手被越来越多公司拿来当核心分析引擎但团队在选型时最常问我的其实是Doris 能不能过安全审计敏感数据放进去会不会出问题这篇文章不聊虚的就把我在生产环境里给 Doris 做安全加固的整套打法拆开讲——从账号权限、网络隔离到审计备份每一步都给你能直接抄的配置和命令。1. 项目概述为什么大数据环境的数据安全这么难搞1.1 真实环境里的安全痛点先聊个现实问题。大数据平台一般不是单个组件是 Hadoop、Spark、Kafka、Flume、Doris 等一堆东西凑在一起。组件多权限就分散HDFS 管一套Yarn 管一套Hive 可能还用着旧的授权方式Doris 又单独一套账号密码。安全审计的时候很难把所有访问记录串成一条完整的链路。而且数仓本身是数据资产最集中的地方业务方的报表、用户的明细、系统的日志全在里面。别小看一台看起来“只是查个数据”的 Doris 集群一旦账号口令泄露或者权限配错影响往往是整个业务面的数据泄露。我见过不少团队Doris 的 root 密码直接写在运维文档里甚至贴在工位上这不是开玩笑。再叠加监管要求。现在很多行业都有自己的数据安全标准比如电力物联网有 q/GDW 12111-2021 这样的分级保护要求金融、政务也有类似的合规底线。数据要分级分类高密级数据要有访问控制、要有审计、要有加密保护。这些要求最终都要落到引擎层面去执行Doris 的安全能力行不行决定你能不能过得了检查。1.2 Doris 在安全上的整体定位Doris 的定位是实时数仓对外提供 SQL 查询能力对内对接各种上游数据源。它处在“数据进来”和“数据被使用”的中间层安全设计上要解决的不只是“能不能登录”这种单点问题而是从身份认证、权限授权、数据传输、存储加密、操作审计、容灾恢复六个维度一起用力。我在生产环境做安全加固时习惯按一个顺序来先锁账号再配权限然后隔离网络、加密传输接着做静态加密和脱敏最后补齐审计和备份。这个顺序不能乱因为前一层是后一层的基础。比如你不先把网络隔离做好光靠账号密码挡不住恶意的端口扫描和越权访问。下面我按这个顺序把每一层展开讲涉及的具体配置和命令都是我在真实环境里验证过的。2. 认证与权限管控把数仓的第一道门锁好2.1 账号体系建设最小权限原则不是口号Doris 默认装好后会有一个 root 账号但这个 root 千万不能给普通业务直接用。我在项目里一般先做三件事第一改掉默认 root 密码并且把 root 限定为只能从跳板机或管理员网段登录。Doris 的用户可以通过绑定 host 来限制来源 IP在创建用户时就指定。第二按角色拆账号。数据分析师只给只读权限数据开发给读写权限但限制在指定库表运维和管理员才用高权限账号。别怕建账号麻烦账号多了权限才能细安全审计的时候也能精确到人。第三密码策略要跟上。Doris 本身提供了一些密码策略相关的支持但更通用的是集成 LDAP让密码统一收口到企业的身份认证系统里。LDAP 配置在大数据场景里几乎是标配用户离职、改密都在一个地方管理不用每套系统单独维护一份密码。实际配置 LDAP 时需要在 FE 的配置文件中设置 ldap 相关参数包括 ldap server 地址、ldap 管理员 DN、搜索 base DN 等。这里最容易踩的坑是 base DN 写得太宽导致登录时搜索用户超时写得太窄又找不到用户。建议先用 ldapsearch 命令把用户所在的组织单元确认清楚再填配置。2.2 基于 Ranger 的集中授权把 Hive 和 Doris 的权限管到一张表里很多团队现有的 Hadoop 生态已经部署了 Apache RangerHive、HDFS 都统一走 Ranger 授权。如果 Doris 再单独搞一套授权方式日常管理和审计会很痛苦。好在 Doris 可以和 Ranger 集成。集成之后可以在 Ranger 的 Web 界面上给 Doris 配置库、表、列级别的权限策略代替在 Doris 内部一条条执行 GRANT。对于“列级权限”这类要求很高的场景Ranger 相较于手写 SQL 授权最大的优势就是可视化和集中管理权限策略变更后还能统一审计。我见过一个典型做法把 Doris 集群的数据分析师角色、ETL 角色全部在 Ranger 里定义好策略按库表前缀匹配比如 ods_* 库只读、dwd_* 库只读、ads_* 库读写。这样新增表时只要表名符合规范权限策略自动覆盖不用一个个手动授权。需要注意Ranger 集成 Doris 的插件版本要和 Doris 版本匹配版本不一致会出现授权不生效或看不到表的问题。遇到这类问题先对比插件版本而不是急着重启集群。2.3 权限模型设计一套可以直接抄的矩阵权限模型设计这件事很多团队是边用边补结果权限越补越乱。我比较推荐从一开始就定死角色和权限边界下面这个矩阵是我在项目中常用的初始版本角色权限范围说明数据管理员所有库表的读写 用户权限管理负责元数据和权限维护ETL 开发指定业务库的读写限定在 ods/dwd/ads 分区表数据分析师指定宽表的只读不允许 DDL 和导出报表服务账号指定视图/结果集的只读供 BI 系统使用只读访客限定库的 SELECT严格限制表数量这个矩阵看起来简单落地时最容易出问题的是“导出权限”。很多团队给了分析师 SELECT 权限但没限制查询结果导出敏感数据照样能通过 select outfile 方式拖走。在 Doris 的权限体系里需要把导出相关权限单独控制不要想当然地认为有了 SELECT 就有了一切也要反过来检查高权限账号是否被授予了不必要的能力。权限配置完后我习惯定期跑一遍 SHOW GRANTS把每个账号的权限导出来人工抽检。注意权限最小化不只是针对普通用户也包括管理员账号。管理员账号数量要控制在个位数并且启用操作审计避免“管理员”成为数据安全的黑洞。3. 网络与传输安全切断数据流出的路径3.1 网络隔离Doris 集群不要裸奔在办公网Doris 的架构分 FE 和 BE 两类节点。FE 负责元数据和查询解析BE 负责数据存储和查询计算。对外的访问入口主要是 FE所以网络隔离的重点是把 FE 保护起来。我的习惯是三层网络规划第一层Doris 集群整体放在独立 VPC 或独立网段内和其他业务按需互通。办公网不能直接访问集群端口必须通过跳板机或网关。第二层FE 的所有端口只对应用服务器网段和运维网段开放BE 的端口只允许 FE 和同集群 BE 访问。这些端口对应关系可以在官方文档里查到用安全组或防火墙设置白名单时按端口用途逐条配置不要图省事直接放行整个网段。第三层如果业务要跨公网访问 Doris建议在前面加一层反向代理或者网关由代理层做 TLS 终结和认证转发不直接把 FE 的端口暴露到公网。网络隔离听着基础但出问题的概率很高。我遇过不止一次集群上线时为了方便测试安全组里加了一条放行所有 IP 的规则测试完忘记删结果就挂在公网上裸奔了很久。所以每次上线前我都会专门检查一遍安全组规则确定没有 /0 这种全开放规则。3.2 传输加密TLS 配置不能跳过Doris 客户端连 FE走的是 MySQL 协议默认是明文传输。只要有人能抓到网络包SQL 语句和返回的数据就可能被看光。生产环境尤其是跨机房、跨网络访问时一定要开启 TLS。开启 TLS 需要准备证书一般由公司内部 CA 签发或者用自签名证书。FE 端配置好证书后客户端连接串需要加上 SSL 相关参数不同的客户端驱动参数名不一样比如有些 Java 驱动是在 JDBC URL 里加 useSSLtrue 和信任证书路径Python 客户端则要指定 ssl 相关选项。配置完先用简单查询验证再用抓包工具确认链路已经是加密的。内网节点之间的流量很多人觉得不用加密但如果是多云环境、混合云架构FE 和 BE 之间的数据交互同样建议在条件允许时做加密具体看网络的信任边界在哪里。安全不是做给别人看的是给万一出问题时的自己留后路。3.3 选型观察Doris 和 StarRocks 的安全能力差在哪经常有朋友问我Doris 和 StarRocks 到底选哪个。这个问题如果放在安全角度看两个项目同源基础权限模型和安全功能设计很接近认证、授权、审计这套东西都有。真正的差别往往在生态整合上Doris 作为 Apache 项目和 Hadoop 生态里的 Ranger、LDAP、Kerberos 等组件配合的文档和经验比较多StarRocks 在商业版里有一些加强功能社区版则要看具体版本的支持情况。所以我一般建议如果团队已经有成熟的 Ranger 体系选 Doris 会更顺如果更看重商业支持和性能优化方面的持续投入那可以再评估 StarRocks。但不管选哪个安全体系的落地能力都比组件本身更重要账号混乱、权限失控换什么引擎都一样会出事。4. 存储加密与数据脱敏敏感数据不能裸奔4.1 静态加密底层存储的兜底方案数据落到磁盘后如果磁盘被偷走或者备份文件被拷贝那就不走 Doris 的权限体系了。所以静态加密是兜底方案。Doris 本身目前没有内置的全库透明加密功能常用的做法是在底层做加密比如数据目录放在加密盘上或者使用云厂商的加密存储服务。对自建机房来说可以考虑文件系统加密或者磁盘加密代价是会有一些性能损耗但换来的是一旦物理介质泄露数据还是密文。除了磁盘备份文件也要加密。Doris 备份到远端仓库时重点是做好仓库的访问控制对象存储的 AccessKey 要放到密钥管理系统里不要直接写在配置文件里。备份文件本身如果存储端支持服务端加密建议打开。4.2 列级加密与脱敏让不该看的人什么都看不到很多业务对列级敏感字段有硬性要求比如身份证号、手机号、银行卡号。Doris 层面没有内建的比较完整的列级脱敏 UI所以生产上最常用的有三种做法第一种在 ETL 阶段做脱敏。数据进入 Doris 之前先把敏感字段按规则做变换比如手机号中间四位用星号替换。缺点是原始数据不再存在后续如果要做精确分析会比较麻烦。第二种建安全视图。原始表保留完整数据只给普通用户开视图视图里对敏感列做脱敏函数处理。这样数据不重复存储权限也清晰。第三种在访问网关层做统一脱敏。所有查询统一经过一个 SQL 网关网关根据用户的密级自动改写查询把敏感列替换成脱敏表达式。这个方案对上层业务最友好但需要额外的开发维护成本。选哪种方案取决于团队的合规要求和数据使用场景。如果只是报表展示用ETL 阶段脱敏就够了如果既要脱敏又要偶尔精确分析那视图或者网关会更合适。这里我要特别提醒脱敏一定要在权限层面同步限制否则用户直接查原始表脱敏就是摆设。我也见过把脱敏视图建好了却忘了收回原始表的 SELECT 权限等于白做。在做数据分级分类时可以借鉴行业里的分级保护思路比如电力物联网数据安全分级保护要求里提到的数据分类分级理念把数据资产按敏感程度标记然后在表命名上做约定。比如基础信息表、隐私明细表、对外发布表分别用不同前缀权限策略跟着前缀走管理起来就轻松很多。5. 审计与监控让每一次访问都有迹可循5.1 审计日志的开启与采集Doris 的 FE 节点会记录审计日志包括登录用户、客户端 IP、执行的 SQL、执行时间、返回行数等关键信息。默认情况下审计日志会写到 FE 节点的本地日志目录下生产环境里一定要把这些日志收集起来做集中管理和检索。我习惯用 Filebeat 或 Fluentd 把 FE 审计日志同步到 Elasticsearch再配一个 Kibana 面板做检索。这样查“某个用户在某天执行了哪些 SQL”就是几秒钟的事。日志采集配置上要注意审计日志文件会轮转采集端要能识别轮转后的文件避免日志中断或者重复采集。另外审计日志的保留周期要按合规要求来定。有些行业要求日志保留至少半年日志量大时要注意磁盘容量规划。日志如果太占空间可以只采集关键字段或者做冷热分层把超过一个月的日志归档到对象存储。5.2 异常行为识别不能只记录不告警审计日志如果只是存着出了事情才翻价值就少了一半。真正有效的是基于审计日志做异常行为识别。我在生产环境常用这几条告警规则短时间内连续登录失败次数超过阈值可能是暴力破解。非工作时间有批量导出或者全表扫描行为可能是数据外泄。高权限账号突然执行了 DDL 或者权限变更操作需要重点确认。从未见过的客户端 IP 第一次访问敏感库表。这几条规则不复杂用日志采集工具加简单的过滤就能实现。一开始规则不要太多先把最常见的命准后面再逐步加。如果用了 Doris Manager 这类运维管理平台也别忘了关注平台本身的安全。Doris Manager 能操作集群的启停、参数变更、数据迁移权限给得太宽比一个普通查询用户危险得多。平台的账号要单独管起来和业务账号分隔开。5.3 审计也能反哺权限整改审计还有个额外收益就是能发现权限给错的地方。比如审计日志里看到某个只读账号执行了 CREATE TABLE那说明权限被配成了读写看到某个用户一直在访问一个他根本用不上的库就要考虑是不是权限范围太宽。我一般每季度做一次权限巡查把审计日志里各账号的实际访问行为导出和权限配置做对比把多余的授权回收掉。这套机制跑半年之后权限会越来越干净后面再有人申请权限审批的时候也会更认真。6. 备份与容灾给数据安全上最后一道保险6.1 备份仓库的规划与创建数据安全不只是防止泄露还包括防止丢失。Doris 提供了 BACKUP/RESTORE 能力可以把数据定期备份到远端存储比如 S3、HDFS、OSS 这些。第一步是创建备份仓库在 Doris 里执行类似下面的语句CREATE REPOSITORY repo_s3_backup WITH S3 ON LOCATION s3://bucket-name/doris_backup PROPERTIES ( type S3, aws.global.endpoint s3.amazonaws.com, aws.s3.endpoint s3.amazonaws.com, aws.s3.access_key your_access_key, aws.s3.secret_key your_secret_key, aws.s3.region us-east-1 );创建仓库时最容易错的就是 endpoint 和 region 不匹配尤其使用国内对象存储时endpoint 有内网地址和外网地址之分集群能访问哪个就填哪个填错了会一直报连通性错误。仓库建好后备份一张表或一个分区可以这样执行BACKUP SNAPSHOT snapshot_20250112 TO repo_s3_backup ON (dwd.dwd_user_detail PARTITION (p20250101, p20250102)) PROPERTIES (type full);备份是异步任务这里我建议在备份完成后查询 SHOW BACKUP 的结果确认状态而不是提交完就认为成功了。实际经验里备份任务失败很多时候是网络波动或者对象存储的临时限流重试一次往往就好了但要在监控里看到失败告警不能默默忽略。6.2 恢复演练不能只是写在文档里备份了不等于恢复得了这是无数团队用事故换来的教训。我每季度会做一次恢复演练挑一个测试用的库表把备份恢复到另外一套测试集群里。恢复的 SQL 大致长这样RESTORE SNAPSHOT snapshot_20250112 FROM repo_s3_backup ON (dwd.dwd_user_detail) PROPERTIES ( backup_timestamp 2025-01-12-12-00-00, replication_num 3 );注意 backup_timestamp 这个参数要在 SHOW SNAPSHOT ON 仓库里确认开始时间写错会直接匹配不上。恢复通常会按创建备份记录时的时间戳来区分所以时间戳是恢复成败的关键点。恢复演练不只验证数据能不能回来还验证恢复后的数据完整性。比如对比恢复前后某个关键表的行数和汇总值步骤一定要写进操作手册不用完整跑通一次否则真出事时手忙脚乱。6.3 跨集群复制让安全问题有兜底除了定期备份Doris 也支持跨集群复制CCR。这个功能可以把主集群的数据实时同步到备集群备集群可以承担只读查询也能在主集群出问题时快速切换。CCR 对数据安全的意义在于两点一是主集群被误操作比如 DDL 删表之后备集群还能保留一份相对安全的数据二是可以把高密级查询全部切到备集群减少主集群的暴露面。不过 CCR 不等于备份如果主集群的误操作同步到了备集群该丢的还是会丢。所以 CCR 和定期快照要同时用互为补充。跨集群复制配置的时候要注意两边集群的版本尽量一致版本相差太大会出现同步失败。另外因为涉及跨网络的数据传输通信链路同样要做好 TLS 或者走内网专线。7. 常见问题与排查技巧实录7.1 权限配置了却不生效这是最常被问的问题之一。现象是管理员已经给某个用户授权了但用户执行查询还是提示没有权限。排查思路按顺序走先确认当前会话用的确实是目标用户很多连接池里缓存了旧连接导致每次查询都走的是老账号再在 Doris 里执行 SHOW GRANTS确认授权记录真的存在最后看问题是不是出在 Ranger 策略上如果用了 RangerDoris 内部的授权和 Ranger 策略之间是叠加关系Ranger 策略没同步成功或者插件缓存没刷新看起来就是权限不生效。注意不要在排查权限问题时一上来就重启 FE。先查会话和缓存重启是最后的办法否则会打断线上查询还可能把故障扩大范围。7.2 审计日志占用磁盘太多生产环境查询量大时fe.audit.log 增长非常快。我遇到过审计日志把 FE 所在磁盘打满的情况后果是整个集群不可用教训很深刻。解决办法有三板斧第一严格控制审计日志保留时间及时清理过期文件第二把日志输出目录挂到独立的大容量磁盘上避免和数据目录抢空间第三日志采集端加快消费不要让文件在本地堆积太久。如果日志还是要保留很久建议采集到 Elasticsearch 或对象存储后再做生命周期管理临时磁盘上只保留短期文件。7.3 备份恢复失败排查清单备份和恢复是容灾的最后一道防线失败原因要快速定位。我把常见原因整理成一张速查表方便大家直接对照现象可能原因处理方式CREATE REPOSITORY 报连通错误endpoint 或 region 配错用对象存储的 SDK 测试同网络环境连通性BACKUP 任务一直 PENDING同时有别的快照任务在跑查看 SHOW BACKUP 中已有任务排队或取消旧任务RESTORE 匹配不到快照backup_timestamp 填错用 SHOW SNAPSHOT ON 仓库查询准确时间戳恢复后数据行数不一致备份期间有写入未刷盘备份前暂停大数据写入或在业务低峰期备份这套清单基本上覆盖了我遇到的绝大多数问题剩下的基本都是集群资源不足导致的扩容或者错峰执行就能解决。7.4 其他容易被忽视的小问题还有人会问Doris 的 Duplicate 表模型为什么不支持条件删除。这个问题严格说不是安全范畴而是表模型特性决定的。一个表模型选错了后期要做数据订正时就会很痛苦。所以建表前要认真评估业务的数据更新方式选择适合的模型能省掉很多后续麻烦。另外集群部署策略也会影响安全。我见过很多团队图省事多套环境共用一个集群开发、测试、生产的数据混在一起。这种情况下权限再严格也架不住环境本身没有隔离。有条件的就把账号体系和网络访问彻底分开实在共用集群的至少要按库前缀隔离并限制跨库访问。最后再补一句个人感受。做了这么多年数据平台我的体会是Doris 的数据安全保障核心不是某一个功能而是一套“账号最小化 权限集中化 网络白名单 审计全记录 备份常演练”的组合拳。这五件事听起来都不复杂难的是坚持执行。你可以在小集群上先把这套体系跑起来哪怕业务量不大也养成习惯等到数据规模真的上来时你会感谢当初那个把安全基础打扎实的自己。如果哪天面试官问你 Doris 数据安全怎么做你就按认证授权、网络隔离、加密脱敏、审计追溯、容灾备份这五个维度讲再举一个你实际处理过的权限问题或者备份演练的例子基本就稳了。
返回列表