ブロックストレージモードの JindoFS は、ファイルの暗号化をサポートしています。暗号化メカニズムと使用方法 Apache HDFS の暗号化ゾーンと似ています。キーは Key Management Service (KMS) によって管理されます。機密データを含むディレクトリに対して暗号化ポリシーを設定できます。このようにして、ディレクトリに書き込むデータを透過的に暗号化し、ディレクトリから読み取るデータを透過的に復号化できます。このプロセスでは、コードを変更する必要はありません。
前提条件
- E-MapReduce (EMR) クラスタが作成されていること。詳細については、クラスタの作成をご参照ください。
- KMS がアクティブになっていること。詳細については、専用 KMS インスタンスの購入をご参照ください。
背景情報
次の図は、ファイル暗号化がサポートされているブロックストレージモードの JindoFS のアーキテクチャを示しています。

JindoFS の KMS 関連パラメータを設定する
- SmartData サービスに移動します。
- Alibaba Cloud EMR コンソールにログインします。
- 上部のナビゲーションバーで、クラスタが存在するリージョンを選択します。必要に応じてリソースグループを選択します。デフォルトでは、アカウントのすべてのリソースが表示されます。
- [クラスタ管理] タブをクリックします。
- 表示される [クラスタ管理] ページで、ターゲットクラスタを見つけ、[アクション] 列の [詳細] をクリックします。
- 左側のナビゲーションペインで、[クラスタサービス] をクリックし、次に [smartdata] をクリックします。
- Alibaba Cloud EMR コンソールにログインします。
- SmartData サービスの namespace タブに移動します。
- [設定] タブをクリックします。
- [サービス設定] セクションで、[namespace] タブをクリックします。
- 設定情報を追加します。
- SmartData サービスの [namespace] タブで、右上隅にある [カスタム設定] をクリックします。
- [設定項目の追加] ダイアログボックスで、次の表に示すパラメータを追加します。
パラメータ 説明 crypto.provider.type プロバイダのタイプ。このパラメータを [ALIYUN] に設定します。 crypto.provider.endpoint KMS のパブリックエンドポイント。詳細については、API リクエストの作成をご参照ください。 crypto.provider.kms.accessKeyId KMS へのアクセスに使用する AccessKey ID。 crypto.provider.kms.accessKeySecret KMS へのアクセスに使用する AccessKey シークレット。
- 設定を保存します。
- [サービス設定] セクションの右上隅にある [保存] をクリックします。
- [変更の確認] ダイアログボックスで、[説明] を指定し、[設定の自動更新] をオンにします。
- [OK] をクリックします。
- Namespace サービスを再起動します。
- 右上隅にある を選択します。
- [クラスタアクティビティ] ダイアログボックスで、関連パラメータを指定します。
- [OK] をクリックします。
- [確認] メッセージで、[OK] をクリックします。
JindoFS KeyProvider を使用する
JindoFS KeyProvider は、JindoFS を KMS に接続するために使用されます。 JindoFS のキーは KMS に保存されます。 JindoFS KeyProvider を使用して、KMS に基づいてキーを作成、照会、およびローテーションできます。
- キーを作成する:次のコマンドを実行してキーを作成できます。
jindo key -create -keyIdName <keyIdName>
説明 このトピックでは、コマンドの <keyIdName> は、作成したキーの名前を示します。たとえば、次のコマンドを実行して、policy_test という名前のキーを作成します。jindo key -create -keyIdName policy_test
policy_test キーが作成されると、KMS コンソールの [シークレット] ページに表示されます。 - キーを照会する:次のコマンドを実行して、JindoFS の既存のすべてのキーの名前を照会できます。
jindo key -list
次の情報が返されます:
// キーの一覧表示: // policy_test // policy_test2Listing Keys: policy_test policy_test2
- キーをローテーションする:ID に基づいてキーを定期的にローテーションするには、次のコマンドを実行できます。キーがローテーションされると、キーのバージョンが変更されます。ローテーション後にファイルが暗号化されると、最新のキーバージョンが使用されます。ローテーション後にファイルが復号化されると、ファイルに対応するキーバージョンが使用されます。
jindo key -roll -keyIdName <keyIdName>
たとえば、次のコマンドを実行して policy_test キーをローテーションします。jindo key -roll -keyIdName policy_test
policy_test キーがローテーションされると、キーのバージョンが更新されます。元のバージョンは [acsprevious] 状態になり、新しいバージョンは [acscurrent] 状態になります。
JindoFS の暗号化ポリシーを管理する
次のコマンドを実行して、暗号化ポリシーを設定および照会できます。
- 暗号化ポリシーを設定する。重要 既存のファイルのディレクトリに暗号化ポリシーを設定することはできません。
jindo jfs -setCryptoPolicy -keyIdName <keyIdName> -cipherSuite <cipherSuite> <path>
説明 オプションパラメータ<cipherSuite>
を 0 または 1 に設定できます。値 0 は AES_CTR_256 アルゴリズムが使用されることを示し、値 1 は SM4_CTR_128 アルゴリズムが使用されることを示します。<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:クラスパスに複数の SLF4J バインディングが含まれています。 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: [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: [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: 説明については、http://www.slf4j.org/codes.html#multiple_bindings を参照してください。 SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] // SLF4J: 実際のバインディングのタイプは [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:34 警告:プラットフォームの native-hadoop ライブラリを読み込めません...該当する場合は組み込み Java クラスを使用します 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 情報:Jboot ログ名は /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 情報:書き込みバッファサイズ 1048576、論理ブロックサイズ 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 情報: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 // 21/03/12 13:52:35 情報: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: } // パス jfs://test/ の暗号化ポリシーは {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> // 21/03/12 13:52:35 情報:合計統計の読み取り:oss 読み取り平均 <none>、キャッシュ読み取り平均 <none>、oss 読み取り率 <none>
暗号化ポリシーを設定した後、このパスにあるファイルからデータを読み取ったり、このパスにあるファイルにデータを書き込んだりできます。- ローカルファイルを HDFS にコピーする:
hadoop fs -put test.log jfs://test/
- ファイルの内容を表示する:
hadoop fs -cat jfs://test/test.log
- ローカルファイルを HDFS にコピーする: