我们知道,起明加密记在hdfs中,聊聊录我们的起明加密记数据是以block块存储在我们的磁盘上的,那么默认情况下,聊聊录它是起明加密记以密文存储的,还是聊聊录以明文存储的呢?如果是明文存储的,那么是起明加密记否就不安全呢?那么在hdfs中是如何做才能做到数据的透明加密呢?
常见的加密层级
加密区域就是HDFS上的一个目录,只不过该目录相对而言稍微特殊点。 文件写入的时候会被透明加密,文件读取的时候会被透明解密。
当加密区域被创建时,都会有一个加密区域密钥(EZ密钥, encryption zone key)与之对应,EZ密钥存储在HDFS外部的密钥库中。
加密区域里的每个文件都有其自己的加密密钥,叫做数据加密密钥(DEK, data. encryption key)。
DEK
DEK会使用其各自的加密区域的EZ密钥进行加密,以形成 加密数据加密密钥(EDEK)
EDEK
DEK的加解密和文件的加解密
[hadoopdeploy@hadoop01 sh]$ stop-dfs.shStopping namenodes on [hadoop01]Stopping datanodesStopping secondary namenodes [hadoop03][hadoopdeploy@hadoop01 sh]$
密钥库的密码为Hadoop@123
[hadoopdeploy@hadoop01 ~]$ keytool -genkey -alias 'keystore_hadoop'输入密钥库口令:再次输入新口令:您的名字与姓氏是什么? [Unknown]:您的组织单位名称是什么? [Unknown]:您的组织名称是什么? [Unknown]:您所在的城市或区域名称是什么? [Unknown]:您所在的省/市/自治区名称是什么? [Unknown]:该单位的双字母国家/地区代码是什么? [Unknown]:CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确? [否]: y输入 <keystore_hadoop> 的密钥口令 (如果和密钥库口令相同, 按回车):再次输入新口令:Warning:JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /home/hadoopdeploy/.keystore -destkeystore /home/hadoopdeploy/.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。[hadoopdeploy@hadoop01 ~]$ ll ~/.keystore-rw-rw-r--. 1 hadoopdeploy hadoopdeploy 1992 6月 15 22:20 /home/hadoopdeploy/.keystore[hadoopdeploy@hadoop01 ~]$
生成keystore
<configuration> <!-- 设置密钥库的提供者,jceks:标识的是java密钥库 --> <property> <name>hadoop.kms.key.provider.uri</name> <value>jceks://file@/${ user.home}/kms.jks</value> </property> <!-- 密钥库的密码文件,该文件中保存的是访问密钥库的密码, 需要放置在hadoop的配置文件夹下 ...../etc/hadoop --> <property> <name>hadoop.security.keystore.java-keystore-provider.password-file</name> <value>kms.keystore.password.txt</value> </property> <property> <name>hadoop.kms.http.port</name> <value>16000</value> </property> <!-- 对外暴露的kms服务地址 --> <property> <name>dfs.encryption.key.provider.uri</name> <value>kms://http@hadoop01:16000/kms</value> </property> <!-- 认证方式 --> <property> <name>hadoop.kms.authentication.type</name> <value>simple</value> </property></configuration>
需要创建kms.keystore.password.txt文件,并设置密钥库的密码
[hadoopdeploy@hadoop01 hadoop]$ cat /opt/bigdata/hadoop-3.3.4/etc/hadoop/kms.keystore.password.txtHadoop@123[hadoopdeploy@hadoop01 hadoop]$
export KMS_HOME=/opt/bigdata/hadoop-3.3.4export KMS_LOG=${ KMS_HOME}/logs/kmsexport KMS_ADMIN_PORT=16001
<!-- 指定访问kms服务的地址 --><property> <name>hadoop.security.key.provider.path</name> <value>kms://http@hadoop01:16000/kms</value></property>
<!-- 指定访问kms服务的地址 --><property> <name>dfs.encryption.key.provider.uri</name> <value>kms://http@hadoop01:16000/kms</value></property>
[hadoopdeploy@hadoop01 hadoop]$ scp kms-site.xml kms-env.sh core-site.xml hdfs-site.xml hadoop01:$PWD[hadoopdeploy@hadoop01 hadoop]$ scp kms-site.xml kms-env.sh core-site.xml hdfs-site.xml hadoop02:$PWD
[hadoopdeploy@hadoop01 hadoop]$ start-dfs.shStarting namenodes on [hadoop01]Starting datanodesStarting secondary namenodes [hadoop03][hadoopdeploy@hadoop01 hadoop]$ jps2080 NameNode2243 DataNode2471 Jps[hadoopdeploy@hadoop01 hadoop]$
[hadoopdeploy@hadoop01 hadoop]$ hadoop --daemon start kmsWARNING: KMS_LOG has been replaced by HADOOP_LOG_DIR. Using value of KMS_LOG.WARNING: /opt/bigdata/hadoop-3.3.4//temp does not exist. Creating.WARNING: /opt/bigdata/hadoop-3.3.4/logs/kms does not exist. Creating.[hadoopdeploy@hadoop01 hadoop]$ jps2080 NameNode2243 DataNode2870 KMSWebServer2904 Jps[hadoopdeploy@hadoop01 hadoop]$
hadoop --daemon stop kms 停止kms服务
需求: 在hdfs上创建2个目录logs和datas,只要是在datas目录中上传文件都需要透明加密,logs目录不需要,同时往logs和datas目录中上传一个文件,然后查看对应文件在磁盘上的block块,直接在操作系统上查看这个块,看文件是否加密。
[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -mkdir /logs[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -mkdir /datas[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -ls /Found 2 itemsdrwxr-xr-x - hadoopdeploy supergroup 0 2023-06-16 21:10 /datasdrwxr-xr-x - hadoopdeploy supergroup 0 2023-06-16 21:10 /logs[hadoopdeploy@hadoop01 hadoop]$ echo 123456789 > 1.data[hadoopdeploy@hadoop01 hadoop]$ cat 1.data123456789[hadoopdeploy@hadoop01 hadoop]$
在 / 目录下创建2个文件夹 logs和datas, 并创建一个文件1.data,内容为123456789, 1.data先不传递到logs和datas目录中。
# 创建一个key ,名字是 ezk_datas[hadoopdeploy@hadoop01 hadoop]$ hadoop key create ezk_datasezk_datas has been successfully created with options Options{ cipher='AES/CTR/NoPadding', bitLength=128, description='null', attributes=null}.org.apache.hadoop.crypto.key.kms.LoadBalancingKMSClientProvider@3d5c822d has been updated.# 查看key 列表[hadoopdeploy@hadoop01 hadoop]$ hadoop key list -metadataListing keys for KeyProvider: org.apache.hadoop.crypto.key.kms.LoadBalancingKMSClientProvider@2f8dad04ezk_datas : cipher: AES/CTR/NoPadding, length: 128, description: null, created: Fri Jun 16 21:36:51 CST 2023, version: 1, attributes: [key.acl.name=ezk_datas][hadoopdeploy@hadoop01 hadoop]$
[hadoopdeploy@hadoop01 hadoop]$ hdfs crypto -createZone -keyName ezk_datas -path /datasAdded encryption zone /datas[hadoopdeploy@hadoop01 hadoop]$
ezk_datas: 为我们创建的ezk的名字
/datas: hdfs上的一个目录
# 往/datas目录上传一个文件[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -put 1.data /datas# 往/logs目录上传一个文件[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -put 1.data /logs[hadoopdeploy@hadoop01 hadoop]$
查看加密文件
1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/TransparentEncryption.html
责任编辑:武晓燕 来源: 今日头条 透明加密记录(责任编辑:探索)
河北省发展改革委开展“双随机一公开”监管工作理论实务培训工作
空缺占职位总数的94% 特朗普内阁任命被参议院确认速度非常低效
太钢获批“国家节能标准化示范创建项目” 各项工作正在稳步推进