Kafka加解密特性使用说明
操作场景
MRS集群Ranger服务安装RangerKMS实例后,Kafka可以启用加解密特性,支持创建加密Topic。客户端自动将数据加密后传输给Kafka服务,最终加密数据存储在本地磁盘。客户端应用从服务端读取到加密数据,然后在客户端自动解密。
前提条件
- 当前集群已安装Ranger服务,且安装RangerKMS实例。
- 使用该功能需要使用MRS的Kafka客户端jar包,不能使用开源客户端。
操作步骤
- 参考使用RangerKMS原生UI管理权限及密钥章节,给不同角色的用户赋予密钥相应的权限,相关权限要求如下表所示。
表1 设置密钥权限 任务场景
用户需要赋予的密钥权限
创建Topic
- Get Metadata:获取key的元信息
- Generate EEK:生成EEK
生产数据
- Decrypt EEK:解密EEK
消费数据
- Decrypt EEK:解密EEK
- 以客户端安装用户,登录安装Kafka客户端的节点,执行以下命令配置环境变量、用户认证。
cd Kafka客户端安装路径
source bigdata_env
kinit 组件业务用户
- 在Kafka客户端配置文件中增加配置项,开启加解密特性。
cd Kafka/kafka/config
分别给“client.properties”、“producer.properties”和“consumer.properties”三个配置文件中增加如下配置,并保存:encryption.keyprovider.class = org.apache.kafka.clients.encryption.RangerKeyProvider encryption.keymanager.class = org.apache.kafka.clients.encryption.RangerKeyManager encryption.keyprovider.rangerkms = https://RangerKMS实例IP:端口,https://RangerKMS实例IP:端口
- 如果生产者增加如上配置,默认会向加密Topic写入加密数据。
- 如果生产者没有增加如上配置,默认会向加密Topic写入明文数据。
- 如果消费者增加如上配置,默认会将加密Topic中的加密数据解密成明文数据。
- 如果消费者增加如上配置,但是订阅了明文Topic,会导致Topic中的明文数据解密成乱码数据。
- 如果消费者没有增加如上配置,则不会将加密Topic中的加密数据进行解密。
- RangerKMS实例IP:可登录FusionInsight Manager,选择“集群 > 服务 > Ranger > 实例”,查看并记录RangerKMS实例业务IP地址获取。
- 端口:可登录FusionInsight Manager,选择“集群 > 服务 > Ranger > 配置 > 全部配置”,搜索“ranger.service.https.port”查看并记录RangerKMS实例对应的参数值获取。
- (可选)客户端还可以根据需要配置如下参数。
参数名称
含义
默认值
kms.request.retries
访问RangerKMS实例的重试次数。
2
encryption.keyprovider.rangerkms.hostname
RangerKMS实例的IP和hostname信息,例如ip|hostname,ip2|hostanme2。
null
ranger.eek.cache.size
缓存密钥Key的表数量。
1000
ranger.eek.max.age.second
缓存密钥Key的过期时间,单位秒。
300
- 执行以下命令,切换到客户端目录,例如“/opt/client/Kafka/kafka/bin”。
cd Kafka客户端安装路径/Kafka/kafka/bin
- 创建Topic。
使用客户端脚本命令创建Topic时,只支持“--bootstrap-server”方式,不支持“--zookeeper”方式。
kafka-topics.sh --create --topic topic名称 --partitions 1 --replication-factor 3 --bootstrap-server BrokerIP:端口 --command-config ../config/client.properties --config encryption.keyname=密钥名称
- BrokerIP:Broker实例IP。可登录FusionInsight Manager,选择“集群 > 服务 > Kafka > 实例”,查看并记录Broker实例业务IP地址获取。
- 端口:Kafka集群IP端口号,安全模式下默认为21007,普通模式下默认为21005。
- 密钥名称:1中使用的密钥名称。
- 加密Topic中写入数据。
使用客户端脚本命令向加密Topic写入数据。
sh kafka-console-producer.sh --broker-list BrokerIP:端口 --topic topic名称--producer.config ../config/producer.properties
- 读取加密Topic数据。
sh kafka-console-consumer.sh --topic topic名称--bootstrap-server BrokerIP:端口 --consumer.config ../config/consumer.properties