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 表格。
解決方法
注意: 如果您使用 Amazon Simple Storage Service (Amazon S3) 作為資料來源,而不是 Hadoop 分散式檔案系統 (HDFS),則使用伺服器端和用戶端加密來保護資料。
加密新的 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>注意: 您可以使用自訂加密金鑰雜湊演算法,例如 HBase-25181,而不使用預設 MD5 演算法。如需詳細資訊,請參閱 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/注意: 用節點的公有 DNS 名稱取代 example-host-to-copy 和 example-to-host。
-
重新啟動主要節點和核心節點上的所有 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 Shell:
# 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'注意: 用您要描述的表格取代 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>
相關資訊
相關內容
- 已提問 1 年前
- 已提問 8 個月前
- 已提問 2 年前

