本文档只记录
poyee-data-warehouse开发者需要了解的认证授权架构,用于回答"我的 SQL 为什么被拒、数据访问走哪条链路、账号从哪里来"。 不记录运维细节(Ranger 源码编译、UserSync 配置项、Hue 安全阀 ini、LDAP schema 明细)。这些内容由大数据负责人在公共知识库大数据空间中维护。
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`
链路 C:分析师走 Hue/Impala(身份 = LDAP 账号)
用户/分析师
│ LDAP 登录
▼
Hue (Web 入口)
│ JDBC / Impyla 会话(user=最终用户)
▼
Impala Daemon ── LDAP 认证
│ (CDH 6.3.2 下 Impala 无 Ranger 细粒度授权,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 拦截**视 HMS 侧插件状态而定**,见下方关键点)
│
▼
NameNode ── Ranger HDFS Plugin(数据平面兜底授权)
│
▼
HDFS DataNodes
│
▼
审计日志落地:Solr + HDFS `/ranger/audit`
关键点:
- PySpark 不经过 HiveServer2,它直连 Hive Metastore + HDFS,不走 HS2 的 doAs 代理。
- Ranger Hive 策略对 HMS 直连方是否拦截,取决于集群侧是否在 HiveMetastore 服务端也挂载 Ranger Hive Plugin(CDH 6.3.2 默认只在 HS2 挂)。若 HMS 未挂插件,PySpark 的库/表/列授权绕过 Ranger Hive,仅由 NameNode 上的 Ranger HDFS Plugin 做数据平面兜底 —— 规律上与同版本 Impala 一致。本集群实际状态待验证,见
90-重构路线.md §7.5。
账号来源:Ranger UserSync 同时同步 LDAP 和 Unix 组
bigdata、dolphinscheduler、开发个人 unix)—— Ranger 策略按 Unix user / group 匹配analyst" 和 "Unix group hadoop",互不冲突开发需要理解的四件事:
hive.server2.enable.doAs=true,Hue/beeline 提交的作业以你本人的 LDAP 账号访问 HDFS,而不是以 hive 服务账号。意味着 LDAP 个人账号必须有目标路径的权限,不能假设 hive 服务账号有权限就行。链路 B(PySpark)天然就是以提交者 Unix 账号发起,无 doAs。链路 A:Hue / HiveServer2(身份 = LDAP)
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: 写审计日志
链路 B:PySpark / spark-submit / DS JOB(身份 = Unix 账号)
sequenceDiagram
participant D as Dev / DS tenant
participant PS as PySpark / spark-submit
participant YARN as YARN ResourceManager
participant HMS as Hive Metastore
participant RAdmin as Ranger Admin
participant NN as NameNode (Ranger HDFS Plugin)
participant HDFS as HDFS / Solr
D->>PS: ssh / ds tenant 发起(Unix 账号:bigdata / dolphinscheduler / 个人 unix)
PS->>YARN: 提交 application(spark.yarn.principal = 提交者 Unix 账号)
YARN-->>PS: 分配 Driver / Executor
PS->>HMS: 读 / 写 Hive 元数据(user=Unix 账号)
Note over HMS: Ranger Hive 拦截仅在 HMS 侧挂插件时生效<br/>(CDH 6.3.2 默认不挂;待验证,见 90 §7.5)
HMS-->>PS: 元数据 / 位置信息
PS->>NN: 直读 / 直写 HDFS(user=Unix 账号,无 doAs)
NN->>RAdmin: 拉取策略(缓存)
NN->>NN: Ranger HDFS 插件 路径授权
NN-->>PS: 允许 / 拒绝
NN->>HDFS: 写审计日志到 /ranger/audit
链路 C:Hue / Impala(身份 = LDAP 账号)
sequenceDiagram
participant U as User(Analyst)
participant Hue as Hue(Web UI)
participant LDAP as LDAP
participant IMP as Impala Daemon
participant NN as NameNode (Ranger HDFS Plugin)
participant RAdmin as Ranger Admin
participant HDFS as HDFS / Solr
U->>Hue: 登录(用户名/密码)
Hue->>LDAP: Bind 认证
LDAP-->>Hue: 认证成功 + 用户组
U->>Hue: 提交 Impala 查询
Hue->>IMP: JDBC / Impyla (user=U)
IMP->>LDAP: LDAP 认证
Note over IMP: CDH 6.3.2 下 Impala 无 Ranger 细粒度授权<br/>SQL 层不拦截,仅靠 HDFS 层兜底
IMP->>NN: 访问 HDFS (user=U)
NN->>RAdmin: 拉取策略(缓存)
NN->>NN: Ranger HDFS 插件路径授权
NN-->>IMP: 允许/拒绝
IMP-->>Hue: 返回结果
NN->>HDFS: 写审计日志
| 账号类型 | 来源 | 用途 |
|---|---|---|
| 个人账号 | LDAP | 开发/分析师通过 Hue 登录、写 SQL、看调度任务 |
调度账号 dolphinscheduler |
Linux 用户,归属 dolphinscheduler + hadoop 组 |
DolphinScheduler 提交的工作流以该账号运行 |
运维账号 bigdata |
Linux 用户,归属 hadoop 组 |
运维/发布场景,提交 Hive/Spark 作业,管理 HDFS 数据目录 |
服务账号 hdfs |
Linux 用户,supergroup |
仅平台团队使用,开发者不应使用 |
开发注意事项:
dolphinscheduler/bigdata 账号,授权给个人账号能跑通,不代表调度任务能跑通——需要一并把权限授予 dolphinscheduler 用户或其所属组。chmod +x bin/*.sh,否则启动脚本跑不起来。DataX 采集需要访问外部数据源(PG / MySQL / MongoDB / ES 等),这些账号不走 LDAP/Ranger,而是以明文/加密形式存放在项目同级目录,按 {db_type}/{env}-{实例简称}.ini 扁平组织(不再按 env 分子目录)。完整目录结构见 00-项目导览.md §1。
由运维同学维护,不纳入本仓库版本控制。开发 DataX 作业时 sync ini 里 dataSource = {db_type}/{env}-{实例简称},代码按首段斜杠定位 source ini。
以下内容属于运维/安全范畴,保留在团队自建Docmost知识库,开发仅在排查权限问题时查阅: