更新时间:2024-11-29 GMT+08:00

Kafka加解密特性使用说明

操作场景

MRS集群Ranger服务安装RangerKMS实例后,Kafka可以启用加解密特性,支持创建加密Topic。客户端自动将数据加密后传输给Kafka服务,最终加密数据存储在本地磁盘。客户端应用从服务端读取到加密数据,然后在客户端自动解密。

前提条件

  • 当前集群已安装Ranger服务,且安装RangerKMS实例。
  • 使用该功能需要使用MRS的Kafka客户端jar包,不能使用开源客户端。

操作步骤

  1. 参考使用RangerKMS原生UI管理权限及密钥章节,给不同角色的用户赋予密钥相应的权限,相关权限要求如下表所示。

    表1 设置密钥权限

    任务场景

    用户需要赋予的密钥权限

    创建Topic

    • Get Metadata:获取key的元信息
    • Generate EEK:生成EEK

    生产数据

    • Decrypt EEK:解密EEK

    消费数据

    • Decrypt EEK:解密EEK

  2. 以客户端安装用户,登录安装Kafka客户端的节点,执行以下命令配置环境变量、用户认证。

    cd Kafka客户端安装路径

    source bigdata_env

    kinit 组件业务用户

  3. 在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实例对应的参数值获取。

  4. (可选)客户端还可以根据需要配置如下参数。

    参数名称

    含义

    默认值

    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

  5. 执行以下命令,切换到客户端目录,例如“/opt/client/Kafka/kafka/bin”。

    cd Kafka客户端安装路径/Kafka/kafka/bin

  6. 创建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中使用的密钥名称。

  7. 加密Topic中写入数据。

    使用客户端脚本命令向加密Topic写入数据。

    sh kafka-console-producer.sh --broker-list BrokerIP:端口 --topic topic名称--producer.config ../config/producer.properties

  8. 读取加密Topic数据。

    sh kafka-console-consumer.sh --topic topic名称--bootstrap-server BrokerIP:端口 --consumer.config ../config/consumer.properties