スポンサーリンク

【無料】HDFSで暗号化(TransparentEncryption)を使用する手順

【無料】HDFSで暗号化(Transparent Encryption)を使用する手順

 

★悩み★
・HDFSに格納されたデータを暗号化することはできるのだろうか。
・HDFSのTransparent Encryption機能で、データの暗号化はできるのかな。
・HDFSのTransparent Encryption(透過的暗号化)を使う手順を知りたい。


こういった「悩み」に答えます。
 

★本記事の内容★
① HDFSで暗号化(Transparent Encryption)を使用するための準備をご紹介
② HDFSで暗号化(Transparent Encryption)を使用する手順をご紹介
③ 暗号化(Transparent Encryption)されたHDFSの動作検証をご紹介


これからご紹介する「HDFSで暗号化(Transparent Encryption)を使用する手順」を実践したことで、2時間以内で「HDFSのデータを暗号化」できました。

記事の前半では「HDFSで暗号化(Transparent Encryption)を使用するための準備」を解説しつつ、記事の後半では「HDFSで暗号化(Transparent Encryption)を使用する手順と動作検証結果」を紹介します。

この記事を読み終えることで、「セキュアなHDFSを利用できる」状態になります。
 

HDFSで暗号化(Transparent Encryption)を使用するための準備

HDFSで暗号化(TransparentEncryption)を使用するための準備


「HDFSで暗号化(Transparent Encryption)を使用するための準備」に関してご紹介します。

★HDFSで暗号化(Transparent Encryption)を使用するための準備の流れ★
手順1:Hadoop(HDFS)環境を構築
手順2:HDFSの動作確認


上記の流れで、「HDFSで暗号化(Transparent Encryption)を使用するための準備」ができます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年5月29日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)


以降で、上記「HDFSで暗号化(Transparent Encryption)を使用するための準備の流れ」の各手順に関してご説明します。
 

手順1:Hadoop(HDFS)環境を構築

「手順1:Hadoop(HDFS)環境を構築」に関してご説明します。
 

HDFSの暗号化(Transparent Encryption)機能を使用するために、Hadoop(HDFS)環境を構築しましょう。


「Hadoop(HDFS)環境の構築手順」に関しては、以下の記事をご覧ください。
 


上記手順を実施することで、以下のHadoop(HDFS)環境を構築できます。
 

手順1:Hadoop(HDFS)環境を構築


以降の手順では、上図のHadoop(HDFS)環境を想定として手順を解説します。
  

既にHadoop(HDFS)環境を構築済みである場合、本手順を省略してください。


以上で、「手順1:Hadoop(HDFS)環境を構築」は完了です。
 

手順2:HDFSの動作確認

「手順2:HDFSの動作確認」に関してご説明します。
 

HDFSが正常動作することを確認するために、「HDFSへのデータ格納」と「HDFSからのデータ参照」が正常動作することを確認しましょう。


HDFSにデータを格納するために、以下のコマンドをマスター(node1)上で実行してください。

# su - hadoop
$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -mkdir /user
$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -mkdir /user/hadoop
$ vi sample.txt
$ cat sample.txt
a
b
c
d
$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -put sample.txt
$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -ls
-rw-r--r--   1 hadoop supergroup          8 2021-05-29 09:58 sample.txt


「hadoop fs -ls実行後、sample.txtが表示された」場合、「正常にHDFSにデータを格納できた」と判断できます。

続いて、HDFSに格納したデータの参照を確認するために、以下のコマンドをマスター(node1)上で実行してください。

$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -cat sample.txt
a
b
c
d
$


上記のように「a b c d」が表示された場合、「正常にHDFSのデータを参照できた」と判断できます。

以上で、「手順2:HDFSの動作確認」は完了です。
 

上記の流れで、HDFSで暗号化(Transparent Encryption)を使用するための準備ができました。

 

HDFSで暗号化(TransparentEncryption)を使用する手順

HDFSで暗号化(TransparentEncryption)を使用する手順


「HDFSで暗号化(Transparent Encryption)を使用する手順」に関してご紹介します。

★HDFSで暗号化(Transparent Encryption)を使用するまでの流れ★
手順1:Key Management Server(KMS)の設定
手順2:Key Management Server(KMS)を起動
手順3:HDFSの設定を修正
手順4:HDFSの再起動
手順5:暗号化キー(encryption key)の作成
手順6:暗号化領域(Encryption Zone)をHDFS上に作成


上記の流れで、「HDFSで暗号化(Transparent Encryption)を使用」できます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年5月29日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)


以降で、上記「HDFSで暗号化(Transparent Encryption)を使用までの流れ」の各手順に関してご説明します。
 

手順1:KMSの設定【HDFSの暗号化に必要】

「手順1:KMSの設定」に関してご説明します。
 

HDFSの暗号化(Transparent Encryption)機能を使うには、「Key Management Server(KMS)」を起動が必要です。


Key Management Server(KMS)を起動するために、マスター(node1)上で「kms-site.xml」と「kms-env.sh」を以下のように編集してください。コマンド実行例中の「適宜変更」と書いてある部分は、自分用に書き換えてください。

$ su - hadoop # hadoopを管理するユーザーに切り替え(適宜変更)
$ cd /opt/oss/hadoop-3.2.2/etc/hadoop/ # hadoopをインストールした場所に移動(適宜変更)
$ cat kms-site.xml # kms-site.xmlを以下のように修正
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <property>
     <name>hadoop.kms.key.provider.uri</name>
     <value>jceks://file@/${user.home}/kms.keystore</value>
  </property>
  <property>
    <name>hadoop.security.keystore.java-keystore-provider.password-file</name>
    <value>kms.keystore.password</value>
  </property>
</configuration>
$ tail -n 1 kms-env.sh # kms-env.shに下記を追記
export HADOOP_KEYSTORE_PASSWORD=password


以上で、「手順1:KMSの設定」は完了です。
 

手順2:KMSを起動【HDFSの暗号化に必要】

「手順2:KMSを起動」に関してご説明します。
 

HDFSの暗号化(Transparent Encryption)機能を使用するために、「Key Management Server(KMS)」を起動しましょう。


Key Management Server(KMS)を起動するために、マスター(node1)上で以下のコマンドを実行してください。

$ /opt/oss/hadoop-3.2.2/bin/hadoop --daemon start kms
$ jps
9665 KMSWebServer
6979 ResourceManager
9742 Jps
6655 NameNode


コマンド実行後、「KMSWebServer」が表示された場合、「正常にKey Management Server(KMS)が起動した」と判断できます。

以上で、「手順2:KMSを起動」は完了です。
 

手順3:HDFSの設定を修正【暗号化を使用する設定へ】

「手順3:HDFSの設定を修正」に関してご説明します。
 

「手順2で起動したKey Management Server(KMS)」と「HDFS」が連携できるように設定を修正しましょう。


マスター(node1)上で「hdfs-site.xml」と「core-site.xml」を以下のように編集してください。「適宜変更」と書いてある部分は、自分用に書き換えてください。

$ cat hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
   <property>
      <name>dfs.data.dir</name>
      <value>/var/opt/oss/hadoop322/data</value>
   </property>
   <property>
      <name>dfs.name.dir</name>
      <value>/var/opt/oss/hadoop322/name</value>
   </property>
   <property>
      <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
      <value>false</value>
   </property>
<property>
  <name>dfs.encryption.key.provider.uri</name>
  <value>kms://http@node1:9600/kms</value> ← KMSのURLを設定(適宜変更)
</property>
</configuration>

$ cat core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
      <name>fs.defaultFS</name>
      <value>hdfs://node1:9000</value>
   </property>
    <property>
        <name>hadoop.security.key.provider.path</name>
        <value>kms://http@node1:9600/kms</value> ← KMSのURLを設定(適宜変更)
    </property>
</configuration>


HDFSの設定終了後、修正した「core-site.xml」と「hdfs-site.xml」を各サーバに転送するために、マスター(node1)で以下のコマンドを実行します。

$ scp -pr /opt/oss/hadoop-3.2.2/etc/hadoop/core-site.xml node2:/opt/oss/hadoop-3.2.2/etc/hadoop
core-site.xml                                                                                                            100% 1012     1.7MB/s   00:00
$ scp -pr /opt/oss/hadoop-3.2.2/etc/hadoop/core-site.xml node3:/opt/oss/hadoop-3.2.2/etc/hadoop
core-site.xml                                                                                                            100% 1012     1.5MB/s   00:00
$ scp -pr /opt/oss/hadoop-3.2.2/etc/hadoop/hdfs-site.xml node3:/opt/oss/hadoop-3.2.2/etc/hadoop
hdfs-site.xml                                                                                                            100% 1481     2.0MB/s   00:00
$ scp -pr /opt/oss/hadoop-3.2.2/etc/hadoop/hdfs-site.xml node2:/opt/oss/hadoop-3.2.2/etc/hadoop
hdfs-site.xml                                                                                                            100% 1481     2.2MB/s   00:00


以上で、「手順3:HDFSの設定を修正」は完了です。
 

手順4:HDFSの再起動

「手順4:HDFSの再起動」に関してご説明します。
 

手順3で修正した設定を反映させるために、HDFSを再起動しましょう。


HDFSを再起動するために、マスター(node1)上で以下のコマンドを順に実行してください。

$ /opt/oss/hadoop-3.2.2/sbin/hadoop-daemon.sh stop namenode
$ ssh node2 # node2へログインし、datanodeを停止
$ /opt/oss/hadoop-3.2.2/sbin/hadoop-daemon.sh stop datanode
$ exit
$ ssh node3 # node3へログインし、datanodeを停止
$ /opt/oss/hadoop-3.2.2/sbin/hadoop-daemon.sh stop datanode
$ exit
$ /opt/oss/hadoop-3.2.2/sbin/hadoop-daemon.sh start namenode
$ ssh node2 # node2へログインし、datanodeを起動
$ /opt/oss/hadoop-3.2.2/sbin/hadoop-daemon.sh start datanode
$ exit
$ ssh node3 # node3へログインし、datanodeを起動
$ /opt/oss/hadoop-3.2.2/sbin/hadoop-daemon.sh start datanode
$ exit


以上で、「手順4:HDFSの再起動」は完了です。
 

手順5:暗号化キー(encryption key)の作成

「手順5:暗号化キー(encryption key)の作成」に関してご説明します。
 

暗号化キー(encryption key)は、HDFSのデータを暗号化するのに利用されます。


暗号化キー(encryption key)を作成するために、マスター(node1)で以下のコマンドを実行してください。

$ /opt/oss/hadoop-3.2.2/bin/hadoop key create mykey
mykey has been successfully created with options Options{cipher='AES/CTR/NoPadding', bitLength=128, description='null', attributes=null}.
org.apache.hadoop.crypto.key.kms.LoadBalancingKMSClientProvider@5f683daf has been updated.
$ echo $?
0


暗号化キー(encryption key)が作成されたことを確認するために、以下のコマンドをマスター(node1)で実行します。

$ /opt/oss/hadoop-3.2.2/bin/hadoop key list
Listing keys for KeyProvider: org.apache.hadoop.crypto.key.kms.LoadBalancingKMSClientProvider@2e377400
mykey
$


コマンド実行後、「mykey」が表示された場合、「正常に暗号化キー(encryption key)を作成できた」と判断できます。
 

以上で、「手順5:暗号化キー(encryption key)の作成」は完了です。
 

手順6:暗号化領域(Encryption Zone)をHDFS上に作成

「手順6:暗号化領域(Encryption Zone)をHDFS上に作成」に関してご説明します。
 

HDFS上に暗号化領域(格納されたデータを暗号化して保持するフォルダ)を作成しましょう。


暗号化領域(Encryption Zone)をHDFS上に作成するために、マスター(node1)で以下のコマンドを順に実行してください。

$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -mkdir securezone
$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -ls
Found 2 items
-rw-r--r--   1 hadoop supergroup          8 2021-05-29 09:58 sample.txt
drwxr-xr-x   - hadoop supergroup          0 2021-05-29 10:50 securezone
$ /opt/oss/hadoop-3.2.2/bin/hdfs crypto -createZone -keyName mykey -path securezone
Added encryption zone securezone
$ /opt/oss/hadoop-3.2.2/bin/hdfs crypto -listZones
/user/hadoop/securezone  mykey
$


「hdfs crypto -listZones」実行後、「securezone mykey」が出力された場合、「正常に暗号化領域(Encryption Zone)をHDFS上に作成できた」と判断できます。

以上で、「手順6:暗号化領域(Encryption Zone)をHDFS上に作成」は完了です。
 

上記の流れで、HDFSで暗号化(TransparentEncryption)を使用できます。

 

暗号化(Transparent Encryption)されたHDFSの動作検証

暗号化(TransparentEncryption)されたHDFSの動作検証


「暗号化(Transparent Encryption)されたHDFSの動作検証」に関してご紹介します。

★暗号化(Transparent Encryption)されたHDFSの動作検証★
・HDFS上の暗号化領域に対するデータ格納と参照を検証
・HDFS上の暗号化領域に格納されたデータを用いたMapReduceを検証


「暗号化(TransparentEncryption)されたHDFSの動作検証」として、上記項目をご紹介します。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年5月29日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)


以降で、上記「暗号化(TransparentEncryption)されたHDFSの動作検証」の各手順に関してご説明します。
 

HDFS上の暗号化領域に対するデータ格納と参照を検証

「HDFS上の暗号化領域に対するデータ格納と参照を検証」に関してご説明します。
 

HDFS上の暗号化領域にデータを格納し、参照してみましょう。


HDFS上の暗号化領域にデータを格納するために、マスター(node1)で以下のコマンドを順に実行してください。

$ cat sample.txt
a
b
c
d
$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -put sample.txt securezone
$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -ls -R
-rw-r--r--   1 hadoop supergroup          8 2021-05-29 09:58 sample.txt
drwxr-xr-x   - hadoop supergroup          0 2021-05-29 11:02 securezone
drwxrwxrwt   - hadoop supergroup          0 2021-05-29 10:58 securezone/.Trash
-rw-r--r--   1 hadoop supergroup          8 2021-05-29 11:02 securezone/sample.txt
$


コマンド実行後、「securezone/sample.txt」が表示された場合、「正常にHDFS上の暗号化領域にデータを格納できた」と判断できます。

続いて、HDFS上の暗号化領域に格納したデータを参照するために、マスター(node1)で以下のコマンドを実行してください。

$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -cat securezone/sample.txt
a
b
c
d
$ 


暗号化を意識することなく、HDFS上の暗号化領域に格納したデータを参照できました。

最後に、「HDFS上の暗号化領域に格納したデータが暗号化されているか」を確認するために、マスター(node1)で以下のコマンドを順に実行します。

$ ssh node2
$ cd /var/opt/oss/hadoop322/data/current/BP-182370049-192.168.10.150-1622249499650/
$ cd current/finalized/subdir0/
$ ls
blk_1073741826  blk_1073741826_1002.meta  blk_1073741827  blk_1073741827_1003.meta
$ cat blk_1073741827 ← securezone/sample.txtのデータが暗号化されていることを確認
??3J??Z
$ cat blk_1073741826 ← sample.txtのデータが暗号化されていないことを確認
a
b
c
d
$ 


以上で、「HDFS上の暗号化領域に対するデータ格納と参照を検証」は完了です。
 

HDFS上の暗号化領域に格納されたデータを用いたMapReduceを検証

「HDFS上の暗号化領域に格納されたデータを用いたMapReduceを検証」に関してご説明します。
 

HDFS上の暗号化領域に格納されたデータを用いて、MapReduceが正常動作するか確認しましょう。


HDFS上の暗号化領域に格納されたデータを用いてMapreduceを開始するために、マスター(node1)で以下のコマンドを順に実行してください。

$ $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount securezone output
$ /opt/oss/hadoop-3.2.2/bin/hadoop fs -cat output/part-r-00000
a 1
b 1
c 1
d 1
$


コマンド実行後、「a 1」が表示された場合、「HDFS上の暗号化領域に格納されたデータを用いたMapReduceが正常に終了した」と判断できます。
 

以上で、「HDFS上の暗号化領域に格納されたデータを用いたMapReduceを検証」は完了です。
 

HDFSクライアントおよびMapReduceから、HDFSの暗号化(Transparent Encryption)を意識せずにデータへのアクセスができました。


ちなみに、「HDFSとは何か?」や「MapReduceって何?」かを詳しく知りたい方には、以下の動画がオススメです。

Hadoop入門@udemy

 

【まとめ】HDFSで暗号化(TransparentEncryption)を使用する手順

【無料】HDFSで暗号化(Transparent Encryption)を使用する手順


今回の記事を通して、「HDFSで暗号化(Transparent Encryption)を使用する手順」をご紹介することで、以下の悩みを解消しました。
 

★悩み★
・HDFSに格納されたデータを暗号化することはできるのだろうか。
・HDFSのTransparent Encryption機能で、データの暗号化はできるのかな。
・HDFSのTransparent Encryption(透過的暗号化)を使う手順を知りたい。


HDFSで暗号化(Transparent Encryption)を使用する手順は?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。

コメント

タイトルとURLをコピーしました