JindoFS Block模式支持文件加密,加密机制和使用方法与Apache HDFS的Encryption Zone类似。加密密钥通过密钥管理服务(KMS)统一管理,您可以对有敏感数据的目录设置加密策略,然后就可以透明地在该目录下加密写入的数据和解密读取的数据,无需更改您的代码。
背景信息
Block模式加密架构图如下:
配置JindoFS使用阿里云KMS
- 进入SmartData服务。
- 登录阿里云E-MapReduce控制台。
- 在顶部菜单栏处,根据实际情况选择地域和资源组。
- 单击上方的集群管理页签。
- 在集群管理页面,单击相应集群所在行的详情。
- 在左侧导航栏,单击 。
- 进入namespace服务配置。
- 单击配置页签。
- 在服务配置区域,单击namespace页签。
- 添加配置信息。
- 保存配置。
- 单击右上角的保存。
- 在确认修改对话框中,输入执行原因,开启自动更新配置。
- 单击确定。
- 重启配置。
- 在右上角选择 。
- 在执行集群操作对话框中,设置相关参数。
- 单击确定。
- 在确认对话框中,单击确定。
使用JindoFS KeyProvider
Jindo KeyProvider负责对接KMS,加密密钥存储在KMS。KeyProvider基于KMS提供新增密钥、查询密钥和轮换密钥等功能。
- 新增密钥:传入keyIdName,创建一个新的密钥。
jindo key -create -keyIdName <keyIdName>
说明 本文示例中的<keyIdName>为您创建的密钥名称。例如,执行以下命令新增policy_test的密钥。jindo key -create -keyIdName policy_test
在阿里云KMS控制台,您可以看到新增了一个名为policy_test的密钥。 - 查询密钥:查看当前存在的密钥名。
jindo key -list
返回信息如下:Listing Keys: policy_test policy_test2
- 轮换密钥:您可以根据Key ID定期更换密钥。更新密钥后Key Version会随之发生变化,即文件在加密时,使用最新的密钥进行加密,文件在解密时使用现有文件的密钥版本进行解密。
jindo key -roll -keyIdName <keyIdName>
例如,执行以下命令轮换密钥policy_test。jindo key -roll -keyIdName policy_test
在阿里云KMS控制台,您可以看到密钥policy_test的版本状态已经更新,之前的版本状态变成了ACSPrevious,新的版本状态为ACSCurrent。
管理JindoFS加密策略
您可以根据以下命令,设置和查看加密策略:
- 设置加密策略
jindo jfs -setCryptoPolicy -keyIdName <keyIdName> <path>
说明 本示例的<path>
为您访问JindoFS上文件的路径。例如jfs://test/。 - 查看加密策略
jindo jfs -getCryptoPolicy <path>
设置和查看加密策略示例如下所示:
- 查看jfs://test/路径的加密策略。
jindo jfs -getCryptoPolicy jfs://test/
返回信息显示为
{NONE}
。 - 设置jfs://test/的加密策略。
jindo jfs -setCryptoPolicy -keyIdName policy_test jfs://test/
- 进入bigboot目录,再次查看jfs://test/路径的加密策略。
jindo jfs -getCryptoPolicy jfs://test/
返回如下信息。SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/apps/ecm/service/b2jindosdk/3.4.0-hadoop3.1/package/b2jindosdk-3.4.0-hadoop3.1/lib/jindo-distcp-3.4.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/apps/ecm/service/hadoop/3.2.1-1.0.1/package/hadoop-3.2.1-1.0.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 21/03/12 13:52:34 WARN: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 21/03/12 13:52:35 INFO: Jboot log name is /var/log/bigboot/jboot-20210312-135234-12953.LOG 21/03/12 13:52:35 INFO: Write buffer size 1048576, logic block size 134217728 21/03/12 13:52:35 INFO: cmd=getFileStatus, src=jfs://test/, dst=null, size=0, parameter=null, time-in-ms=7, version=3.4.0 21/03/12 13:52:35 INFO: cmd=getCryptoPolicy, src=jfs://test/, dst=null, size=0, parameter=, time-in-ms=2, version=3.4.0 The crypto policy of path: jfs://test/ is {cipherSuite: AES_CTR_NOPADDING_256, keyIdName: policy_test2, keyIdVersion: null, edek: , iv: } 21/03/12 13:52:35 INFO: Read total statistics: oss read average <none>, cache read average <none>, read oss percent <none>
设置完成后即可正常读写该路径下的文件。- 拷贝本地文件至HDFS。
hadoop fs -put test.log jfs://test/
- 展示文件内容。
hadoop fs -cat jfs://test/test.log
- 拷贝本地文件至HDFS。