Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
AES を使用して Amazon EMR の Apache HBase テーブルを暗号化する方法を教えてください。
高度暗号化規格 (AES) を使用して Amazon EMR の Apache HBase テーブルを暗号化したいです。
解決策
注: データソースに Hadoop 分散ファイルシステム (HDFS) ではなく、Amazon Simple Storage Service (Amazon S3) を使用する場合は、サーバー側とクライアント側の暗号化を使用してデータを保護してください。
新しい Apache HBase テーブルを暗号化する
次の手順を実行します。
-
Amazon EMR コンソールを開きます。
-
既に HBase が置かれているクラスターを選択します。または、HBase を持つクラスターを新規作成します。
-
keytool コマンドを実行し、AES 暗号化用の秘密鍵を作成します。
sudo keytool -keystore /etc/hbase/conf/hbase.jks -storetype jceks -storepass:file mysecurefile -genseckey -keyalg AES -keysize 128 -alias example-alias注: example-alias は、実際のエイリアスに置き換えます。
出力例:Output:Enter key password for example-key-store (RETURN if same as keystore password): Warning:The JCEKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore /etc/hbase/conf/hbase.jks -destkeystore /etc/hbase/conf/hbase.jks -deststoretype pkcs12". -
Amazon EMR クラスターの各ノードで、hbase-site.xml ファイルに次のプロパティを追加します。hbase.crypto.keyprovider パラメータに hbase.jks のパスとパスワードを指定します。さらに、hbase.crypto.master.key.name パラメータにお使いのエイリアスを指定します。
<property> <name>hbase.crypto.keyprovider.parameters</name> <value>jceks:///etc/hbase/conf/hbase.jks?password=your_password</value> </property> <property> <name>hbase.crypto.master.key.name</name> <value>example-alias</value> </property> <property> <name>hbase.regionserver.hlog.reader.impl</name> <value>org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader</value> </property> <property> <name>hbase.regionserver.hlog.writer.impl</name> <value>org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogWriter</value> </property> <property> <name>hfile.format.version</name> <value>3</value> </property> <property> <name>hbase.regionserver.wal.encryption</name> <value>true</value> </property> <property> <name>hbase.crypto.keyprovider</name> <value>org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider</value> </property>注: デフォルトの MD5 アルゴリズムではなく、HBase-25181 などのカスタム暗号化キーハッシュアルゴリズムを使用することもできます。詳細については、Apache のウェブサイトで「列ファミリーの暗号化を無効化し、ラップされた暗号キーのハッシュアルゴリズムを選択するためのオプションを追加する」を参照してください。ハッシュを設定するには、設定オプション hbase.crypto.key.hash.algorithm を使用します。次の例では、SHA-512 アルゴリズムを使用しています。
<property> <name>hbase.crypto.key.hash.algorithm</name> <value>SHA-512</value></property> -
hbase.jks ファイルを、hbase.crypto.keyprovider パラメータで指定された場所にあるすべてのクラスターノードにコピーします。
cd /etc/hbase/conf scp hbase.jks example-host-to-copy:/tmp ssh example-to-hostsudo cp /tmp/hbase.jks /etc/hbase/conf/注: example-host-to-copy および example-to-host は、実際のノードのパブリック DNS 名に置き換えます。
-
プライマリノードとコアノード上のすべての HBase サービスを再起動します。次に、各コアノードで hbase-regionserver の停止コマンドと起動コマンドを繰り返します。
注: AWS リージョンサーバーを停止して起動すると、クラスター上の HBase テーブルに対して実行中の読み取りと書き込みに影響する可能性があります。HBase デーモンの停止および起動は、ダウンタイム中にのみ行ってください。本番環境のクラスターを停止して起動する前に、テストクラスターを停止して開始することがベストプラクティスです。Amazon EMR 5.30.0 以降のバージョン
sudo systemctl stop hbase-mastersudo systemctl stop hbase-regionserver sudo systemctl start hbase-mastersudo systemctl start hbase-regionserverAmazon EMR 4x から Amazon EMR 5.29.0 までのバージョン
sudo initctl stop hbase-master sudo initctl stop hbase-regionserver sudo initctl start hbase-master sudo initctl start hbase-regionserver -
HBase シェルにログインします。
# hbase shell -
AES 暗号化を使用してテーブルを作成します。
create 'example-table',{NAME=>'columnfamily',ENCRYPTION=>'AES'}注: **example-table ** は、実際のテーブル名に置き換えます。
出力例:0 row(s) in 1.6760 seconds=> Hbase::Table - example-table1 -
AES 暗号化が有効になっていることを確認します。
describe 'example-table'
注: **example-table ** は、実際のテーブル名に置き換えます。
出力例:
Table example-table is ENABLED table1 COLUMN FAMILIES DESCRIPTION {NAME => 'columnfamily', BLOOMFILTER => 'ROW', ENCRYPTION => 'AES', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.0320 seconds
既存の Apache HBase テーブルを暗号化する
次の手順を実行します。
-
暗号化されていないテーブルを記述します。
describe 'example-table'注: Replace example-table は、記述する対象のテーブルに置き換えます。
出力例:Table example-table is ENABLED table2 COLUMN FAMILIES DESCRIPTION {NAME => 'cf2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6 5536', REPLICATION_SCOPE => '0'}1 row(s) in 0.0140 seconds2 -
AES 暗号化を有効にします。
alter 'example-table',{NAME=>'columnfamily2',ENCRYPTION=>'AES'}注: example-table は、実際のテーブルに置き換えます。
出力例:Updating all regions with the new schema... 1/1 regions updated. Done.0 row(s) in 1.9000 seconds3. -
テーブルが暗号化されていることを確認します。
describe 'example-table'注: example-table は、実際のテーブルに置き換えます。
出力例:Table example-table is ENABLED table2 COLUMN FAMILIES DESCRIPTION {NAME => 'columnfamily2', BLOOMFILTER => 'ROW', ENCRYPTION => 'AES', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}1 row(s) in 0.0120 seconds注: テーブルにセカンダリインデックスを作成すると、WAL 暗号化が機能せず、応答 java.lang.NullPointerException が発生する場合があります。この問題を解決するには、hbase-site.xml ファイルの hbase.regionserver.wal.encryption を false に設定します。
<property> <name>hbase.regionserver.wal.encryption</name> <value>false</value> </property>
関連情報
関連するコンテンツ
- 質問済み 10ヶ月前
- 質問済み 8年前

