tencent cloud

对象存储

动态与公告
产品动态
产品公告
产品简介
产品概述
功能概览
应用场景
产品优势
基本概念
地域和访问域名
规格与限制
产品计费
计费概述
计费方式
计费项
免费额度
计费示例
查看和下载账单
欠费说明
常见问题
快速入门
控制台快速入门
COSBrowser 快速入门
用户指南
创建请求
存储桶
对象
数据管理
批量处理
全球加速
监控与告警
运维中心
数据处理
内容审核
智能工具箱
数据工作流
应用集成
工具指南
工具概览
环境安装与配置
COSBrowser 工具
COSCLI 工具
COSCMD 工具
COS Migration 工具
FTP Server 工具
Hadoop 工具
COSDistCp 工具
HDFS TO COS 工具
GooseFS-Lite 工具
在线辅助工具
自助诊断工具
实践教程
概览
访问控制与权限管理
性能优化
使用 AWS S3 SDK 访问 COS
数据容灾备份
域名管理实践
图片处理实践
COS 音视频播放器实践
工作流实践
数据直传
内容审核实践
数据安全
数据校验
大数据实践
COS 成本优化解决方案
在第三方应用中使用 COS
迁移指南
本地数据迁移至 COS
第三方云存储数据迁移至 COS
以 URL 作为源地址的数据迁移至 COS
COS 之间数据迁移
Hadoop 文件系统与 COS 之间的数据迁移
数据湖存储
云原生数据湖
元数据加速
数据加速器 GooseFS
数据处理
数据处理概述
图片处理
媒体处理
内容审核
文件处理
文档处理
故障处理
获取 RequestId 操作指引
通过外网上传文件至 COS 缓慢
访问 COS 时返回403错误码
资源访问异常
POST Object 常见异常
API 文档
简介
公共请求头部
公共响应头部
错误码
请求签名
操作列表
Service 接口
Bucket 接口
Object 接口
批量处理接口
数据处理接口
任务与工作流
内容审核接口
云查毒接口
SDK 文档
SDK 概览
准备工作
Android SDK
C SDK
C++ SDK
.NET(C#) SDK
Flutter SDK
Go SDK
iOS SDK
Java SDK
JavaScript SDK
Node.js SDK
PHP SDK
Python SDK
React Native SDK
小程序 SDK
错误码
鸿蒙(Harmony) SDK
终端 SDK 质量优化
安全与合规
数据容灾
数据安全
访问管理
常见问题
热门问题
一般性问题
计费计量问题
域名合规问题
存储桶配置问题
域名和 CDN 问题
文件操作问题
日志监控问题
权限管理问题
数据处理问题
数据安全问题
预签名 URL 问题
SDK 类问题
工具类问题
API 类问题
服务协议
Service Level Agreement
隐私政策
数据处理和安全协议
联系我们
词汇表
文档对象存储实践教程大数据实践COS Ranger 权限体系解决方案

COS Ranger 权限体系解决方案

PDF
聚焦模式
字号
最后更新时间: 2024-11-21 16:01:33

背景

Hadoop Ranger 权限体系是大数据场景下的权限解决方案。用户使用存算分离后,将数据托管在对象存储(Cloud Object Storage,COS)上。COS 使用的是腾讯云访问管理(Cloud Access Management,CAM)权限体系,无论是用户身份,权限策略等,都与本地 Hadoop Ranger 体系不同。为维持客户的使用习惯,我们提供 COS 的 Ranger 接入解决方案。

优势

细粒度的权限控制,兼容 Hadoop 权限逻辑,用户统一管理大数据组件与云端托管存储的权限。
插件侧无需在 core-site 中设置密钥,密钥统一在 COS Ranger Service 中设置,避免明文密钥的泄露。

解决方案架构




Hadoop 权限体系中, 认证由 Kerberos 提供,授权鉴权由 Ranger 负责。在此基础上,我们提供以下组件,来支持 COS 的 Ranger 权限方案。
1. COS Ranger Plugin:提供 Ranger 服务端的服务定义插件。它们提供了 Ranger 侧的 COS 服务描述,包括权限种类,必要参数定义(例如 COS 的 bucket 参数和 region 参数)。部署了该插件后,用户即可在 Ranger 的控制页面上,填写相应的权限策略。
2. COS Ranger Service:该服务集成了 Ranger 的客户端,周期性从 Ranger 服务端同步权限策略,在收到客户的鉴权请求后,在本地进行权限校验。 同时它提供了 Hadoop 中 DelegationToken 相关的生成,续租等接口,所有的接口都是通过 Hadoop IPC 定义。
3. COS Ranger Client:COSN 插件对其进行动态加载,把权限校验的请求转发给 COS Ranger Service。

部署环境

Hadoop 环境。
ZooKeeper、Ranger、Kerberos 服务(如果有认证需求,则部署)。
说明
以上服务由于是成熟的开源组件,因此客户可自行安装。

部署组件

部署组件请按照 CHDFS Ranger Plugin、COS Ranger Service、COS Ranger Client、COSN 次序进行。
部署 COS Ranger Plugin
部署 COS Ranger Service
部署 COS Ranger Client
部署 COSN
COS-Ranger-Plugin 拓展了 Ranger Admin 控制台上的服务种类,用户可在 Ranger 控制台上,设置和 COS 相关的操作权限。

代码地址

可前往 Github 的 ranger-plugin 目录下获取。

版本

V1.0 版本及以上。

部署步骤

1. 在 Ranger 的服务定义目录下新建 COS 目录(注意,目录权限需要保证至少有 x 与 r 权限)。 a. 腾讯云的 EMR 环境,路径是 ranger/ews/webapp/WEB-INF/classes/ranger-plugins。 b. 自建的 hadoop 环境,可以通过在 ranger 目录下查找 hdfs 等已经接入到 ranger 服务的组件,查找目录位置。


2. 在 COS 目录下,放入 cos-chdfs-ranger-plugin-xxx.jar。(注意 jar 包至少有 r 权限)。同时需要放入 cos-ranger.json 文件,可前往 Github 获取。
3. 重启 Ranger 服务。
4. 在 Ranger 上注册 COS Service。可参考如下命令:
##生成服务,需传入 Ranger 管理员账号密码,以及 Ranger 服务的地址。
##对于腾讯云 EMR 集群,管理员用户是 root,密码是构建 emr 集群时设置的 root 密码,ranger 服务的 IP 换成 EMR 的 master 节点 IP。
adminUser=root
##构建 EMR 集群时设置的密码,也是 ranger 服务 web 页面的登录密码
adminPasswd=xxxxxx
##如果 ranger 服务有多个 master 节点,任选一个 master 即可
rangerServerAddr=10.0.0.1:6080
##命令行中 -d 指定步骤 2 中的 json 文件
curl -v -u${adminUser}:${adminPasswd} -X POST -H "Accept:application/json" -H "Content-Type:application/json" -d @./cos-ranger.json http://${rangerServerAddr}/service/plugins/definitions
##如果要删除刚定义的服务,则传入刚刚创建服务时,返回的服务 ID
serviceId=102
curl -v -u${adminUser}:${adminPasswd} -X DELETE -H "Accept:application/json" -H "Content-Type:application/json" http://${rangerServerAddr}/service/plugins/definitions/${serviceId}

5. 创建服务成功后,可在 Ranger 控制台看到 COS 服务。如下所示:


6. 在 COS 服务侧单击 +,定义新服务实例,服务实例名可自定义,例如cos或者cos_test,服务的配置如下所示。

其中 policy.grantrevoke.auth.users 需设置后续启动 COS Ranger Service 服务的用户名(即允许拉取权限策略的用户)。通常建议设置成 hadoop,后续 COS Ranger Service 可使用此用户名进行启动。
7. 单击新生成的 COS 服务实例。

添加 policy,如下所示:


8. 在跳转界面中,配置以下参数,说明如下:
bucket:存储桶名称,例如 examplebucket-1250000000,可登录 COS 控制台 查看。
path:COS 对象路径。注意 COS 的对象路径不以/开始。
include:表示设置的权限适用于 path 本身,还是除了 path 以外的其他路径。
recursive:表示权限不仅适用于 path,还适用于 path 路径下的子成员(即递归子成员)。通常用于 path 设置为目录的情况。
user/group:用户名和用户组。这里是或的关系,即用户名或者用户组满足其中一个,即可拥有对应的操作权限。
Permissions
Read:读操作。对应于对象存储里面的 GET、HEAD 类操作,包括下载对象、查询对象元数据等。
Write:写操作。对应于对象存储里面的 PUT 类等修改操作,例如上传对象。
Delete:删除操作。 对应于对象存储里删除 Object。对于 Hadoop 的 Rename 操作,需要有对原路径的删除操作权限,对新路径的写入操作权限。
List:遍历权限。对应于对象存储里面的 List Object。


COS Ranger Service 是整个权限体系的核心,负责集成 ranger 的客户端,接收 ranger client 的鉴权请求,token 生成续租请求和临时密钥生成请求。同时也是敏感信息(腾讯云密钥信息)所在的区域,通常部署在堡垒机器上,只允许集群管理员操作,查看配置等。
COS Ranger Service 支持一主多备的 HA 部署,DelegationToken 状态持久化到 HDFS。通过 ZK 抢锁决定 Leader 身份。获取 Leader 身份的服务会把地址写入 ZK,以便 COS Ranger Client 进行路由寻址。

代码地址

可前往 Github 的 cos-ranger-server 目录下获取。

版本

V5.1.2版本及以上。

部署步骤

1. 将 COS Ranger Service 服务代码拷贝到集群的几台机器上,生产环境建议至少两台机器(一主一备)。因为涉及到敏感信息,建议是堡垒机或者权限严格管控的机器。
2. 修改 cos-ranger.xml 文件中的相关配置,其中必须修改的配置项如下所示。配置项说明请参见文件中的注释说明(配置文件可前往 Github 的 cos-ranger-service/conf 目录下获取)。
qcloud.object.storage.rpc.address
qcloud.object.storage.status.port
qcloud.object.storage.enable.cos.ranger
qcloud.object.storage.zk.address (zk 地址,cos ranger service 启动后注册到 zk 上)
qcloud.object.storage.cos.secret.id
qcloud.object.storage.cos.secret.key
3. 修改 ranger-cos-security.xml 文件中的相关配置。其中必须修改的配置项有如下所示。配置项说明请参见文件中的注释说明(配置文件可前往 Github 的 cos-ranger-service/conf 目录下获取)。
ranger.plugin.cos.policy.cache.dir
ranger.plugin.cos.policy.rest.url
ranger.plugin.cos.service.name
4. 修改 start_rpc_server.sh 中 hadoop_conf_path 和 java.library.path 的配置。这两个配置分别指向 hadoop 配置文件所在的目录(例如 core-site.xml、hdfs-site.xml)以及 hadoop native lib 路径。
5. 执行如下命令启动服务。
chmod +x start_rpc_server.sh
nohup ./start_rpc_server.sh &> nohup.txt &
6. 如果启动失败,查看 log 下 error 日志是否有错误信息。
7. COS Ranger Service 支持展示 HTTP 端口状态(端口名为 qcloud.object.storage.status.port,默认值为9998)。用户可通过以下命令获取状态信息(例如是否包含 leader、鉴权数量统计等)
# 请将下面的10.xx.xx.xxx替换为部署 ranger service 的机器 IP
# port 9998 设置为 qcloud.object.storage.status.port 配置值
curl -v http://10.xx.xx.xxx:9998/status
如果只部署了一个 cos ranger service 节点,会在上述接口响应中看到当前节点成为 leader。
如果部署了多个 cos ranger service 节点,会在上述接口响应中看到其他节点成为 leader,完成全部节点重启后,会看到最早完成重启的节点成为 leader。
COS Ranger Client 由 hadoop cosn 插件动态加载,并代理访问 COS Ranger Service 的相关请求。例如获取临时密钥、获取 token、鉴权操作等。

代码地址

可前往 Github 的 cos-ranger-client 和 cosn-ranger-interface 目录下获取。

版本

cos-ranger-client 要求V5.0 版本及以上。cosn-ranger-interface 要求 v1.0.4版本及以上。

部署方式

1. 将 cos-ranger-client jar 包和cosn-ranger-interface jar 包拷贝到与 COSN 同一目录下通常在/usr/local/service/hadoop/share/hadoop/common/lib/目录下;请选择拷贝与自身 hadoop 大版本一致的 jar 包,最后确保 jar 包有可读权限。
2. 在 core-site.xml 添加如下配置项:
```
<configuration>
<!--*****必须配置********-->
<!-- 上一步部署的 cos ranger server 的地址 -->
<property>
<name>qcloud.object.storage.ranger.service.address</name>
<value>10.0.0.8:9999,10.0.0.10:9999</value>
</property>

<!--***可选配置****-->
<!-- 设置 cos ranger service 端用的 kerberos 凭据,参考 cos ranger service 端的配置,须保持一致,如果没有认证的需求,不需要配置 -->
<property>
<name>qcloud.object.storage.kerberos.principal</name>
<value>hadoop/_HOST@EMR-XXXX</value>
</property>

<!--***可选配置****-->
<!-- zk 上记录的 ranger server 的 IP 地址路径, 这里使用了默认值, 配置必须与 COS Ranger Service 的配置一致 -->
<property>
<name>qcloud.object.storage.zk.leader.ip.path</name>
<value>/ranger_qcloud_object_storage_leader_ip</value>
</property>
<!-- zk 上记录的 cos ranger service follower 的 IP 地址路径,这里使用了默认值 必须与 COS Ranger Service 的配置一致,主备节点同时提供服务 -->
<property>
<name>qcloud.object.storage.zk.follower.ip.path</name>
<value>/ranger_qcloud_object_storage_follower_ip</value>
</property>
</configuration>
```


版本

V8.0.1版本及以上。

部署方式

部署 COSN 插件方法请参考 Hadoop 工具 文档,但需注意以下几点:
1. 使用 ranger 后,fs.cosn.userinfo.secretId 和 fs.cosn.userinfo.secretKey 密钥信息不需要配置。COSN 插件后续通过 COSRangerService 获取临时密钥。
2. fs.cosn.credentials.provider 需设置为 org.apache.hadoop.fs.auth.RangerCredentialsProvider 才可通过 Ranger 进行认证鉴权。如下所示:
```
<property>
<name>fs.cosn.credentials.provider</name>
<value>org.apache.hadoop.fs.auth.RangerCredentialsProvider</value>
</property>
```


验证

1. 使用 hadoop cmd 执行访问 COSN 的相关操作。查看当前用户执行的操作是否符合主账号的权限设置预期,示例如下所示:
#将bucket,路径等替换为主账号的实际信息。
hadoop fs -ls cosn://examplebucket-1250000000/doc
hadoop fs -put ./xxx.txt cosn://examplebucket-1250000000/doc/
hadoop fs -get cosn://examplebucket-1250000000/doc/exampleobject.txt
hadoop fs -rm cosn://examplebucket-1250000000/doc/exampleobject.txt
2. 使用 MR Job 进行验证,验证前需重启相关的服务,例如 Yarn、Hive 等。

常见问题

kerberos 是否必须安装?

Kerberos 满足认证的需求,如果所在的集群,用户都是可信的,例如仅内部使用的集群。若用户仅进行鉴权操作,为了避免无权限的客户误操作,那么可以不安装 Kerberos,只使用 ranger 进行鉴权。同时 Kerberos 会引入一些性能损耗。请客户综合自己的安全需求与性能需求进行考量。如果需要认证,开启 Kerberos 后,需要设置 COS Ranger Service 和 COS Ranger Client 相关的配置项。

如果开启了 Ranger,但未配置任何 Policy,或者未匹配到任何 Policy,会如何操作?

如果未匹配上任何 policy,会默认拒绝该操作。

配置 COS Ranger Service 侧的密钥可以是子账号?

可以是子账号,但是必须拥有被操作 bucket 的相应权限,才能生成临时密钥给到 COSN 插件,进行相应的操作。通常建议这里设置的密钥拥有对该 bucket 的所有权限。

临时密钥需如何更新,每次访问 COS 前都需要从 COS Ranger Service 侧获取?

临时密钥是 cache 在 COSN 插件侧,并周期性进行异步更新。

在 ranger 页面更改了 Policy 未生效怎么办?

请修改 ranger-cos-security.xml 文件的配置项:ranger.plugin.cos.policy.pollIntervalMs,调小该配置项(单位为毫秒),然后重启 COS Ranger Service 服务。Policy 相关测试结束后,建议修改回原来值(时间间隔太小导致轮询频率高,从而导致 CPU 利用率高企)。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈