02-权限与账号.md 5.8 KB

权限与安全

本文档只记录 poyee-data-warehouse 开发者需要了解的认证授权架构,用于回答"我的 SQL 为什么被拒、数据访问走哪条链路、账号从哪里来"。 不记录运维细节(Ranger 源码编译、UserSync 配置项、Hue 安全阀 ini、LDAP schema 明细)。这些内容由大数据负责人在公共知识库 大数据空间 中维护。

1. 认证授权架构

poyee 的鉴权体系有两条并行的入口链路,共用同一套 Ranger 策略和 HDFS 兜底授权:

链路 A:分析师走 Hue/HiveServer2(身份 = LDAP 账号)

用户/分析师
   │  LDAP 登录
   ▼
  Hue (Web 入口)
   │  JDBC / Beeline 代理访问(doAs=最终用户)
   ▼
  HiveServer2 ── LDAP 认证 ── Ranger Hive Plugin(SQL 层授权)
   │
   ▼
  NameNode ── Ranger HDFS Plugin(数据平面兜底授权)
   │
   ▼
  HDFS DataNodes
   │
   ▼
  审计日志落地:Solr + HDFS `/ranger/audit`

链路 B:开发/调度走 PySpark / Spark-SQL(身份 = Unix 账号)

数据开发 / DS JOB
   │  ssh / ds tenant 以 Unix 账号登录 (bigdata / dolphinscheduler / 个人 unix)
   ▼
  spark-submit / pyspark (YARN client/cluster)
   │  Driver 和 Executor 以 Unix 账号向下游发请求
   ├──▶ Hive Metastore ── Ranger Hive Plugin(库/表/列元数据授权)
   │
   ▼
  NameNode ── Ranger HDFS Plugin(数据平面兜底授权)
   │
   ▼
  HDFS DataNodes
   │
   ▼
  审计日志落地:Solr + HDFS `/ranger/audit`

关键点:PySpark 不经过 HiveServer2,它直连 Hive Metastore + HDFS。Ranger Hive Plugin 同样作用在 HMS 侧,所以 SQL 语义的库/表/列授权仍然生效;只是不走 HS2 的 doAs 代理。

账号来源:Ranger UserSync 同时同步 LDAP 和 Unix 组

  • Hue/HiveServer2 进来的是 LDAP 账号 —— Ranger 策略按 LDAP user / group 匹配
  • PySpark / spark-submit / DS JOB 进来的是 Unix 账号(bigdatadolphinscheduler、开发个人 unix)—— Ranger 策略按 Unix user / group 匹配
  • 同一条策略可以同时授权给 "LDAP group analyst" 和 "Unix group hadoop",互不冲突

开发需要理解的四件事:

  1. 身份(Who):Hue 路径下是 LDAP 账号;spark-submit / DS JOB 路径下是 Unix 账号。同一个人在两条链路下对 Ranger 来说是两个身份,授权不通用。
  2. SQL 授权(What):HiveServer2 / Hive Metastore 上的 Ranger Hive Plugin 拦截库/表/列级操作。你的 SQL 被拒多半发生在这一层
  3. 数据面兜底(Where):NameNode 上的 Ranger HDFS Plugin 拦截文件路径访问,即使绕过 Hive 直接访问 HDFS 也会被校验。
  4. doAs 代理(仅链路 A)hive.server2.enable.doAs=true,Hue/beeline 提交的作业以你本人的 LDAP 账号访问 HDFS,而不是以 hive 服务账号。意味着 LDAP 个人账号必须有目标路径的权限,不能假设 hive 服务账号有权限就行。链路 B(PySpark)天然就是以提交者 Unix 账号发起,无 doAs。

2. 认证授权审计链路

sequenceDiagram
  participant U as User(Analyst)
  participant Hue as Hue(Web UI)
  participant LDAP as LDAP
  participant HS2 as HiveServer2
  participant RAdmin as Ranger Admin
  participant NN as NameNode (Ranger HDFS Plugin)
  participant HDFS as HDFS / Solr

  U->>Hue: 登录(用户名/密码)
  Hue->>LDAP: Bind 认证
  LDAP-->>Hue: 认证成功 + 用户组
  U->>Hue: 提交 Hive 查询
  Hue->>HS2: JDBC 会话 (user=U)
  HS2->>LDAP: LDAP 认证
  HS2->>RAdmin: 拉取策略(缓存)
  HS2->>HS2: Ranger Hive 插件 SQL 授权
  HS2->>NN: 访问 HDFS (doAs=U)
  NN->>RAdmin: 拉取策略(缓存)
  NN->>NN: Ranger HDFS 插件路径授权
  NN-->>HS2: 允许/拒绝
  HS2-->>Hue: 返回结果
  HS2->>HDFS: 写审计日志到 /ranger/audit
  NN->>HDFS: 写审计日志

3. 账号体系(开发视角)

账号类型 来源 用途
个人账号 LDAP 开发/分析师通过 Hue 登录、写 SQL、看调度任务
调度账号 dolphinscheduler Linux 用户,归属 dolphinscheduler + hadoop DolphinScheduler 提交的工作流以该账号运行
运维账号 bigdata Linux 用户,归属 hadoop 运维/发布场景,提交 Hive/Spark 作业,管理 HDFS 数据目录
服务账号 hdfs Linux 用户,supergroup 仅平台团队使用,开发者不应使用

开发注意事项:

  • 调度任务使用的是 dolphinscheduler/bigdata 账号,授权给个人账号能跑通,不代表调度任务能跑通——需要一并把权限授予 dolphinscheduler 用户或其所属组。
  • 个人账号用 Hue/beeline/ssh(开发个人账号) 手动跑通后,上调度时一定要选用正确的ds租户再跑一次,否则容易在生产报 permission denied。

4. 数据源账号(非 LDAP/Ranger 链路)

DataX 采集需要访问外部数据源(PG / MySQL / MongoDB / ES 等),这些账号不走 LDAP/Ranger,而是以明文/加密形式存放在项目同级目录:

/home/bigdata/release/datasource/
├── pg/{业务库}.ini
├── mysql/{业务库}.ini
├── mongodb/{业务库}.ini
└── es/{集群}.ini

由运维同学维护,不纳入本仓库版本控制。开发 DataX 作业时引用 {ds_type}/{ds_file}(两段式,见 21-命名规范.md §4.4)。

5. 相关公共文档

以下内容属于运维/安全范畴,保留在团队自建Docmost知识库,开发仅在排查权限问题时查阅:

  • CDH 整体权限策略设计(Linux 组 + HDFS ACL + Ranger 的分层策略)
  • Ranger 集成 CDH 6.3.2 落地方案 / 实施步骤
  • Ranger 集成 LDAP(UserSync 配置)
  • Hue 集成 LDAP
  • Ranger 审计踩坑记录