スキップしてコンテンツを表示

AES を使用して Amazon EMR の Apache HBase テーブルを暗号化する方法を教えてください。

所要時間3分
0

高度暗号化規格 (AES) を使用して Amazon EMR の Apache HBase テーブルを暗号化したいです。

解決策

注: データソースに Hadoop 分散ファイルシステム (HDFS) ではなく、Amazon Simple Storage Service (Amazon S3) を使用する場合は、サーバー側とクライアント側の暗号化を使用してデータを保護してください。

新しい Apache HBase テーブルを暗号化する

次の手順を実行します。

  1. Amazon EMR コンソールを開きます。

  2. 既に HBase が置かれているクラスターを選択します。または、HBase を持つクラスターを新規作成します。

  3. SSH を使用して Amazon EMR クラスターのプライマリノードに接続します

  4. 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".
  5. 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>
  6. 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 名に置き換えます。

  7. プライマリノードとコアノード上のすべての 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-regionserver

    Amazon 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
  8. HBase シェルにログインします。

    # hbase shell
  9. AES 暗号化を使用してテーブルを作成します。

    create 'example-table',{NAME=>'columnfamily',ENCRYPTION=>'AES'}

    注: **example-table ** は、実際のテーブル名に置き換えます。
    出力例:

    0 row(s) in 1.6760 seconds=> Hbase::Table - example-table1
  10. 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 テーブルを暗号化する

次の手順を実行します。

  1. 暗号化されていないテーブルを記述します。

    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
  2. 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.
  3. テーブルが暗号化されていることを確認します。

    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.encryptionfalse に設定します。

    <property>      
          <name>hbase.regionserver.wal.encryption</name>
          <value>false</value>
      </property>

関連情報

HBase シェルを使用する

Amazon EMR の HDFS における透過的な暗号化

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ