|
@@ -28,6 +28,27 @@ poyee 的鉴权体系有两条并行的入口链路,共用同一套 Ranger 策
|
|
|
审计日志落地:Solr + HDFS `/ranger/audit`
|
|
审计日志落地: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 账号)**
|
|
**链路 B:开发/调度走 PySpark / Spark-SQL(身份 = Unix 账号)**
|
|
|
|
|
|
|
|
```
|
|
```
|
|
@@ -36,7 +57,7 @@ poyee 的鉴权体系有两条并行的入口链路,共用同一套 Ranger 策
|
|
|
▼
|
|
▼
|
|
|
spark-submit / pyspark (YARN client/cluster)
|
|
spark-submit / pyspark (YARN client/cluster)
|
|
|
│ Driver 和 Executor 以 Unix 账号向下游发请求
|
|
│ Driver 和 Executor 以 Unix 账号向下游发请求
|
|
|
- ├──▶ Hive Metastore ── Ranger Hive Plugin(库/表/列元数据授权)
|
|
|
|
|
|
|
+ ├──▶ Hive Metastore(元数据查询;Ranger Hive 拦截**视 HMS 侧插件状态而定**,见下方关键点)
|
|
|
│
|
|
│
|
|
|
▼
|
|
▼
|
|
|
NameNode ── Ranger HDFS Plugin(数据平面兜底授权)
|
|
NameNode ── Ranger HDFS Plugin(数据平面兜底授权)
|
|
@@ -48,7 +69,9 @@ poyee 的鉴权体系有两条并行的入口链路,共用同一套 Ranger 策
|
|
|
审计日志落地:Solr + HDFS `/ranger/audit`
|
|
审计日志落地:Solr + HDFS `/ranger/audit`
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-> **关键点**:PySpark 不经过 HiveServer2,它直连 Hive Metastore + HDFS。Ranger Hive Plugin 同样作用在 HMS 侧,所以 SQL 语义的库/表/列授权仍然生效;只是不走 HS2 的 doAs 代理。
|
|
|
|
|
|
|
+> **关键点**:
|
|
|
|
|
+> - 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 组**
|
|
**账号来源:Ranger UserSync 同时同步 LDAP 和 Unix 组**
|
|
|
|
|
|
|
@@ -58,7 +81,7 @@ poyee 的鉴权体系有两条并行的入口链路,共用同一套 Ranger 策
|
|
|
|
|
|
|
|
**开发需要理解的四件事:**
|
|
**开发需要理解的四件事:**
|
|
|
|
|
|
|
|
-1. **身份(Who)**:Hue 路径下是 LDAP 账号;spark-submit / DS JOB 路径下是 Unix 账号。**同一个人在两条链路下对 Ranger 来说是两个身份**,授权不通用。
|
|
|
|
|
|
|
+1. **身份(Who)**:Hue 路径下是 LDAP 账号;spark-submit / DS JOB 路径下是 Unix 账号。**同一个人在两条链路下对 Ranger 来说是两个身份**,授权不通用(除非账号名一致)。
|
|
|
2. **SQL 授权(What)**:HiveServer2 / Hive Metastore 上的 Ranger Hive Plugin 拦截库/表/列级操作。**你的 SQL 被拒多半发生在这一层**。
|
|
2. **SQL 授权(What)**:HiveServer2 / Hive Metastore 上的 Ranger Hive Plugin 拦截库/表/列级操作。**你的 SQL 被拒多半发生在这一层**。
|
|
|
3. **数据面兜底(Where)**:NameNode 上的 Ranger HDFS Plugin 拦截文件路径访问,即使绕过 Hive 直接访问 HDFS 也会被校验。
|
|
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。
|
|
4. **doAs 代理(仅链路 A)**:`hive.server2.enable.doAs=true`,Hue/beeline 提交的作业以**你本人的 LDAP 账号**访问 HDFS,而不是以 `hive` 服务账号。意味着 **LDAP 个人账号必须有目标路径的权限**,不能假设 hive 服务账号有权限就行。链路 B(PySpark)天然就是以提交者 Unix 账号发起,无 doAs。
|
|
@@ -101,7 +124,7 @@ sequenceDiagram
|
|
|
participant D as Dev / DS tenant
|
|
participant D as Dev / DS tenant
|
|
|
participant PS as PySpark / spark-submit
|
|
participant PS as PySpark / spark-submit
|
|
|
participant YARN as YARN ResourceManager
|
|
participant YARN as YARN ResourceManager
|
|
|
- participant HMS as Hive Metastore (Ranger Hive Plugin)
|
|
|
|
|
|
|
+ participant HMS as Hive Metastore
|
|
|
participant RAdmin as Ranger Admin
|
|
participant RAdmin as Ranger Admin
|
|
|
participant NN as NameNode (Ranger HDFS Plugin)
|
|
participant NN as NameNode (Ranger HDFS Plugin)
|
|
|
participant HDFS as HDFS / Solr
|
|
participant HDFS as HDFS / Solr
|
|
@@ -110,14 +133,39 @@ sequenceDiagram
|
|
|
PS->>YARN: 提交 application(spark.yarn.principal = 提交者 Unix 账号)
|
|
PS->>YARN: 提交 application(spark.yarn.principal = 提交者 Unix 账号)
|
|
|
YARN-->>PS: 分配 Driver / Executor
|
|
YARN-->>PS: 分配 Driver / Executor
|
|
|
PS->>HMS: 读 / 写 Hive 元数据(user=Unix 账号)
|
|
PS->>HMS: 读 / 写 Hive 元数据(user=Unix 账号)
|
|
|
- HMS->>RAdmin: 拉取策略(缓存)
|
|
|
|
|
- HMS->>HMS: Ranger Hive 插件 库/表/列 授权
|
|
|
|
|
|
|
+ Note over HMS: Ranger Hive 拦截仅在 HMS 侧挂插件时生效<br/>(CDH 6.3.2 默认不挂;待验证,见 90 §7.5)
|
|
|
HMS-->>PS: 元数据 / 位置信息
|
|
HMS-->>PS: 元数据 / 位置信息
|
|
|
PS->>NN: 直读 / 直写 HDFS(user=Unix 账号,无 doAs)
|
|
PS->>NN: 直读 / 直写 HDFS(user=Unix 账号,无 doAs)
|
|
|
NN->>RAdmin: 拉取策略(缓存)
|
|
NN->>RAdmin: 拉取策略(缓存)
|
|
|
NN->>NN: Ranger HDFS 插件 路径授权
|
|
NN->>NN: Ranger HDFS 插件 路径授权
|
|
|
NN-->>PS: 允许 / 拒绝
|
|
NN-->>PS: 允许 / 拒绝
|
|
|
- HMS->>HDFS: 写审计日志到 /ranger/audit
|
|
|
|
|
|
|
+ NN->>HDFS: 写审计日志到 /ranger/audit
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**链路 C:Hue / Impala(身份 = LDAP 账号)**
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+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: 写审计日志
|
|
NN->>HDFS: 写审计日志
|
|
|
```
|
|
```
|
|
|
|
|
|
|
@@ -136,17 +184,17 @@ sequenceDiagram
|
|
|
|
|
|
|
|
## 4. 数据源账号(非 LDAP/Ranger 链路)
|
|
## 4. 数据源账号(非 LDAP/Ranger 链路)
|
|
|
|
|
|
|
|
-DataX 采集需要访问外部数据源(PG / MySQL / MongoDB / ES 等),这些账号**不走 LDAP/Ranger**,而是以明文/加密形式存放在项目同级目录:
|
|
|
|
|
|
|
+DataX 采集需要访问外部数据源(PG / MySQL / MongoDB / ES 等),这些账号**不走 LDAP/Ranger**,而是以明文/加密形式存放在项目同级目录,按 `{db_type}/{env}/{instance}.ini` 三段式组织:
|
|
|
|
|
|
|
|
```
|
|
```
|
|
|
/home/bigdata/release/datasource/
|
|
/home/bigdata/release/datasource/
|
|
|
-├── pg/{业务库}.ini
|
|
|
|
|
-├── mysql/{业务库}.ini
|
|
|
|
|
-├── mongodb/{业务库}.ini
|
|
|
|
|
-└── es/{集群}.ini
|
|
|
|
|
|
|
+├── pg/{env}/{业务库}.ini # env = dev / test / prod
|
|
|
|
|
+├── mysql/{env}/{业务库}.ini
|
|
|
|
|
+├── mongodb/{env}/{业务库}.ini
|
|
|
|
|
+└── es/{env}/{集群}.ini
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-由运维同学维护,**不纳入本仓库版本控制**。开发 DataX 作业时引用 `{ds_type}/{ds_file}`(两段式,见 `21-命名规范.md` §4.4)。
|
|
|
|
|
|
|
+由运维同学维护,**不纳入本仓库版本控制**。开发 DataX 作业时 ini 引用 `{ds_type}/{ds_file}`(两段式不带 env;env 由启动命令 `-env <name>` 或 `conf/env.sh` 默认值注入,见 `21-命名规范.md` §4.4)。
|
|
|
|
|
|
|
|
## 5. 相关公共文档
|
|
## 5. 相关公共文档
|
|
|
|
|
|