跳至內容

如何使用 AES 加密 Amazon EMR 中的 Apache HBase 表格?

3 分的閱讀內容
0

我想使用進階加密標準 (AES) 在 Amazon EMR 中加密 Apache HBase 表格。

解決方法

注意: 如果您使用 Amazon Simple Storage Service (Amazon S3) 作為資料來源,而不是 Hadoop 分散式檔案系統 (HDFS),則使用伺服器端和用戶端加密來保護資料

加密新的 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>

    注意: 您可以使用自訂加密金鑰雜湊演算法,例如 HBase-25181,而不使用預設 MD5 演算法。如需詳細資訊,請參閱 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/

    注意: 用節點的公有 DNS 名稱取代 example-host-to-copyexample-to-host

  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 Shell:

    # 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'

    注意: 用您要描述的表格取代 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.encryption 設定為 false

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

相關資訊

使用 HBase Shell

透明加密 Amazon EMR 上的 HDFS

AWS 官方已更新 1 年前