:插件部署与策略管理实战指南)
在 DataHub 中使用 Apache Ranger 配置授权Authorization插件部署与策略管理实战指南【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub导读本文介绍 DataHub 与 Apache Ranger 的集成方式通过 DataHub Apache Ranger 插件将 DataHub 的授权策略Authorization Policies托管到 Apache Ranger 中统一管理。管理员可以在 Ranger 中创建用户、组与角色并通过 Ranger 策略控制对 DataHub 的访问授权。读完本文你将掌握 Ranger 侧服务定义注册与策略创建、DataHub 侧 Authorizer 插件的安装与配置Docker 与 Kubernetes 两种部署形态以及完整的配置回滚流程。说明本文所有配置均依据当前仓库文档 configuring-authorization-with-apache-ranger.md 整理原文中的配置已在 Privacera Platform v6.3.0.1 上验证通过文中涉及的 Ranger 插件 jar、服务定义文件servicedef.json与安全配置ranger-datahub-security.xml均来自独立的 datahub-ranger-auth-plugin 插件工程。一、集成原理与前置条件DataHub 与 Apache Ranger 的集成本质上是把授权决策从 DataHub 内置的 Policy 引擎切换到由 Apache Ranger 策略驱动的外部 Authorizer 插件。整体拆分为两部分配置Apache Ranger 部署侧注册 DataHub 服务定义、创建服务与资源策略DataHub 部署侧安装 apache-ranger-authorizer 插件把每个请求的授权检查转发给 Ranger。在 DataHub 中授权体系建立在 Authorizer 接口之上该接口负责判断actor 是否被授予某项 privilege。多个 Authorizer 以链式方式串行执行任一 Authorizer 返回 ALLOW 即短路放行全部返回 DENY 才拒绝请求——这正是 AuthorizerChain 的实现逻辑。其中有一个关键细节值得注意AuthorizerChain在执行每个 Authorizer 前会把线程的ContextClassLoader切换为该 Authorizer 自身的类加载器源码注释中明确提到apache-ranger 库正是依赖这种方式加载其内部依赖类。这意味着 Ranger Authorizer 插件及其传递依赖被隔离在独立目录中运行不会污染 DataHub 主进程的类路径。前置条件清单前置条件说明用户标识对齐CorpRole URN 中的用户标识必须是 AD/LDAP 中的用户名。例如 URNurn:li:corpuser:datahub中datahub必须对应 AD/LDAP 中真实存在的用户名认证体系一致Apache Ranger 与 DataHub 必须通过同一个 IDP完成认证LDAP Jaas 或 OIDC SSORanger 服务可达Apache Ranger 服务需通过 HTTP 可供 DataHub 访问Basic 认证开启Apache Ranger 服务上必须启用 Basic Authentication为什么用户标识要一致因为 Ranger 策略中的用户主体最终会映射为 DataHub 请求中的 actor URN只有两边身份体系一致授权判定才能正确命中。二、配置 Apache Ranger 部署2.1 安装 datahub-ranger-plugin将 DataHub 插件安装到 Ranger 的ranger-plugins目录下步骤如下第 1 步下载插件 jar从 Maven 仓库获取datahub-ranger-pluginartifactio.acryl:datahub-ranger-plugin下载后得到datahub-ranger-plugin-version.jar。第 2 步在 Ranger 中创建 datahub 插件目录以 Privacera 容器为例Kubernetes 示例中请将ranger-pod-name与namespace替换为你的环境# Docker 方式 docker exec privacera_ranger_1 mkdir ews/webapp/WEB-INF/classes/ranger-plugins/datahub# Kubernetes 方式 kubectl exec ranger-pod-name mkdir ews/webapp/WEB-INF/classes/ranger-plugins/datahub -n namespace第 3 步拷贝 jar 到插件目录# Docker 方式 docker cp datahub-ranger-plugin-version.jar privacera_ranger_1:/opt/ranger/ranger-2.1.0-admin/ews/webapp/WEB-INF/classes/ranger-plugins/datahub/# Kubernetes 方式 kubectl cp datahub-ranger-plugin-version.jar ranger-pod-name:/opt/ranger/ranger-2.1.0-admin/ews/webapp/WEB-INF/classes/ranger-plugins/datahub/ -n namespace2.2 注册服务定义文件第 4 步下载服务定义文件。servicedef.json是 datahub-ranger-plugin 的 Ranger 服务定义 JSON它声明了 DATAHUB 服务的资源类型resource types与权限privileges清单必须与 jar 版本匹配。第 5 步将服务定义注册到 Ranger。执行以下 curl 命令替换ranger-admin-username、ranger-admin-password、ranger-host三个变量curl -u ranger-admin-username:ranger-admin-password -X POST \ -H Accept: application/json -H Content-Type: application/json \ --data servicedef.json \ http://ranger-host:6080/service/public/v2/api/servicedefRanger Admin API 默认监听 6080 端口。注册成功即代表 Ranger 侧已认识 DATAHUB 这一新的服务类型。2.3 定义 Ranger 策略Ranger Policy注册完成后进入 Apache Ranger UIPrivacera Portal执行验证插件注册在Access Management - Resource Policies中应能看到DATAHUB插件创建服务在DATAHUB插件下创建名为ranger_datahub的服务创建策略在ranger_datahub服务下创建新策略用于控制 DataHub 授权创建测试用户并分配策略创建用户datahubDataHub 的默认 root 用户然后在ranger_datahub服务下创建策略。关于策略的资源类型有一个重要的分层设计Platform 级别平台权限若要授予 Platform Privileges如 Admin 管理员权限直接在策略中使用platform资源类型即可。测试时可将datahub用户关联所有可用的平台权限这样该用户便拥有完整的平台管理员能力管理用户与组、创建域等。资源级别细粒度权限若要对 DataHub Dataset、Dashboard、Chart 等实体做细粒度授权在 Ranger 策略构建器中选择对应的Resource Type即可每个资源类型下会列出其支持的权限列表与 DataHub 中可执行的操作一一对应。更多支持的权限可参考 DataHub 的 Policies Guide。权限Privilege是 DataHub 授权模型的最小单元Ranger 策略正是通过用户/组/角色 × 资源 × 权限的组合来替代 DataHub 内置策略因此理解 DataHub 的权限清单是正确配置 Ranger 策略的前提。三、配置 DataHub 部署Ranger 侧策略就绪后开始让 DataHub 把授权请求交给 Ranger 处理。3.1 准备安全配置文件下载 Ranger 安全 XMLranger-datahub-security.xml编辑其中ranger.plugin.datahub.policy.rest.url属性指向 Ranger Admin 的地址property nameranger.plugin.datahub.policy.rest.url/name valuehttp://199.209.9.70:6080/value description URL to Ranger Admin /description /property3.2 Docker 部署形态构建 Ranger Authorizer 插件 jarcd ~/ git clone https://github.com/acryldata/datahub-ranger-auth-plugin.git cd ~/datahub-ranger-auth-plugin/ ./gradlew apache-ranger-plugin:shadowJar构建产物为./apache-ranger-plugin/build/libs/apache-ranger-plugin-version-SNAPSHOT.jar下文简称 ranger-plugin-jarshadowJar 任务会打出包含全部依赖的 fat jar便于后续以独立插件形式加载。配置 Ranger Authorizer 插件在部署datahub-gms的主机上执行# 1. 创建插件目录 mkdir -p ~/.datahub/plugins/auth/apache-ranger-authorizer/ # 2. 拷贝安全配置到插件目录 cp ranger-datahub-security.xml ~/.datahub/plugins/auth/apache-ranger-authorizer/ # 3. 拷贝插件 jar重命名为 apache-ranger-authorizer.jar cp ./apache-ranger-plugin/build/libs/apache-ranger-plugin-version-SNAPSHOT.jar \ ~/.datahub/plugins/auth/apache-ranger-authorizer/apache-ranger-authorizer.jar # 4. 创建 config.yml如不存在 touch ~/.datahub/plugins/auth/config.yml第 5 步在 config.yml 中注册插件username/password填写 Apache Ranger 用户凭据plugins: - name: apache-ranger-authorizer type: authorizer enabled: true params: className: com.datahub.authorization.ranger.RangerAuthorizer configs: username: Apache Ranger username password: Apache Ranger password这份config.yml的字段结构与仓库中的插件配置模型一一对应。从 PluginConfig 可以看出每个插件条目包含name插件名在plugins[]列表中必须唯一type插件类型支持authorizer授权与authenticator认证enabled是否在 GMS 中加载该插件className插件全限定类名本例为com.datahub.authorization.ranger.RangerAuthorizerconfigs插件专属配置 MapGMS 会原样传给 Authorizer 的init方法——这里的username/password正是通过该机制注入 Ranger 客户端的。仓库测试资源 valid-base-plugin-dir1/config.yml 展示了同构的 authorizer / authenticator 双插件配置写法可作为编写参考。此外插件目录的约定是plugin-base-directory/plugin-name即~/.datahub/plugins/auth/apache-ranger-authorizer/插件 jar 默认文件名取plugin-name.jar这也解释了为什么要将 jar 重命名为apache-ranger-authorizer.jar。第 6 步重启datahub-gms容器使插件生效。3.3 Kubernetes 部署形态目前官方 Helm 支持即将推出Helm support is coming soon暂时需要手工挂载插件。需要留意的是Kubernetes 场景下回滚章节提及的AUTH_POLICIES_ENABLED、RANGER_AUTHORIZER_ENABLED、RANGER_USERNAME、RANGER_PASSWORD等环境变量均来自插件侧约定的部署参数。关于AUTH_POLICIES_ENABLED的作用可以在仓库配置中印证GMS 的 application.yaml 中authorization.defaultAuthorizer.enabled由${AUTH_POLICIES_ENABLED:true}控制即 DataHub内置策略 Authorizer 的开关。因此在纯 Ranger 授权模式下通常需要结合该开关关闭内置策略引擎仅依赖 Ranger 插件做授权决策。3.4 验证集成是否生效以 root 用户datahub登录 DataHub 部署如果该用户在 Ranger 中被授予了全部 Platform Privileges则应能执行管理用户与组、创建域等全部平台操作。能够完整执行这些操作即说明请求已正确经过 Ranger 策略的授权判定。四、回滚配置Revert the Configuration若希望恢复 DataHub 内置授权、不再让 Apache Ranger 接管授权按以下顺序撤销两部分配置。4.1 回滚 Apache Ranger 部署Kubernetes 示例命令中请替换ranger-pod-name与namespace。删除 ranger_datahub 服务登录 Privacera Portal删除服务ranger_datahub删除 datahub 插件服务定义curl -u ranger-admin-username:ranger-admin-password -X DELETE \ -H Accept: application/json -H Content-Type: application/json \ http://ranger-host:6080/service/public/v2/api/servicedef/name/datahub删除插件目录# Docker 方式 docker exec privacera_ranger_1 rm -rf ews/webapp/WEB-INF/classes/ranger-plugins/datahub# Kubernetes 方式 kubectl exec ranger-pod-name -n namespace -- sh -c rm -rf ews/webapp/WEB-INF/classes/ranger-plugins/datahub4.2 回滚 DataHub 部署Docker 方式从config.yml中删除为 Apache Ranger 插件添加的条目重新部署datahub-gms。Kubernetes 方式打开 GMS deployment 编辑器kubectl edit deployment datahub-datahub-gms -n namespace删除以下环境变量AUTH_POLICIES_ENABLEDRANGER_AUTHORIZER_ENABLEDRANGER_USERNAMERANGER_PASSWORD删除插件相关的 volumes 与 volumeMounts 设置保存退出检查 rollout 状态kubectl rollout status deployment/datahub-datahub-gms -n namespace成功时终端会显示deployment datahub-datahub-gms successfully rolled out。4.3 回滚后验证再次以 root 用户datahub登录若能正常执行管理用户与组、创建域等平台操作说明 DataHub 已恢复由内置授权体系接管回滚成功。五、常见问题与注意事项身份不一致导致授权失败CorpRole URN 中的用户名必须与 AD/LDAP 用户名严格一致Ranger 策略中的主体才能正确映射到 DataHub actor。服务定义版本必须与插件 jar 匹配servicedef.json声明了服务可用的资源类型与权限若与 jar 版本不一致可能出现策略无法创建或权限列表不完整的问题。配置项拼写ranger.plugin.datahub.policy.rest.url是 Ranger 插件解析策略服务地址的标准属性名务必原样保留。插件隔离与类加载DataHub 的 Authorizer 链使用插件自身的类加载器执行授权逻辑见 AuthorizerChain因此插件必须放在独立目录并保持 jar 自包含shadowJar避免与 GMS 主类路径冲突。内置策略开关在纯 Ranger 授权模式下可结合AUTH_POLICIES_ENABLEDfalse关闭 DataHub 内置策略 Authorizer对应 application.yaml 中的authorization.defaultAuthorizer.enabled。总结本文完整梳理了 DataHub × Apache Ranger 授权集成的全生命周期Ranger 侧的服务定义注册与策略创建、DataHub 侧的 Authorizer 插件安装Docker / Kubernetes、验证方法与配置回滚。整体上该方案的价值在于将 DataHub 的授权策略集中到 Ranger 统一治理适合已有 Ranger 生态的企业将 DataHub 纳入统一的权限管控体系。配置过程中务必重点关注身份一致、服务定义匹配、插件目录规范这三点即可快速落地一套由 Ranger 驱动的 DataHub 授权体系。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考