テーブルの暗号化
ローカル暗号化キーをテーブル単位で使用して、テーブルの暗号化を構成します。
テーブル単位の暗号化を使用する場合と使用しない場合の透過的なデータ暗号化(TDE)を構成します。データの暗号化は、ディスク(SSTable)への書き込み時に行われます。暗号化を使用するよう既存のテーブルを構成した後で、テーブルをディスクに再度書き込んでください。
テーブルの暗号化には、以下の2つのキーが使用されます。
- ローカル暗号化キー:内部テーブル暗号化キーの値を暗号化/復号化します。
クラスター内のすべてのノードにすべてのローカル・キーを配布します。DSEアカウントがキー・ファイルの所有者であり、読み取り/書き込みアクセス権があることを確認してください。
テーブル暗号化キー
:DSEは、テーブルの暗号化用に定義された、暗号アルゴリズム、キー強度、ローカル暗号化キーの組み合わせごとに、単一のキー・エントリーをdse_system.encrypted_keys
で作成します。すべてのデータ・センターで
dse_system
キースペースに最大3までのレプリケーション係数が設定されていることを確認してください。注: 同じ暗号化設定を持つテーブルは、同じ暗号化キーを使用します。
警告: パーティション・キーはプレーン・テキストで格納されます。TDE暗号化テーブルのパーティション・キーには機密情報を含めないでください。
テーブル暗号化のオプションと構文
テーブル定義で暗号化クラスが使用されている場合は、パーティション・キーを除くすべてのテーブル・データが
dse_system.encrypted_keys
テーブルのキー・エントリーで暗号化されます。cipher_algorithm
、secret_key_strength
、system_key_file
の各設定と一致するキーがない場合は、新しいキーが作成され、テーブルに追加されます。 注: 以下の構文は暗号化オプションのみ示しています。
chunk_length_kb
など、他のすべての圧縮オプションも使用可能です。テーブル暗号化の構文:
COMPRESSION = {
'class' : 'encryption_class'[,
'cipher_algorithm' : 'cipher_algorithm_type'] [,
'secret_key_strength' : length] [,
'system_key_file': 'key_filename'] };
ここで、- 必須。
encryption_class
:以下の表に示すいずれかのクラス名を使用します。
[1] Encryptorクラスを使用する場合は、ガーベージ・コレクション(GC)を向上させるため、若い世代のヒープ(-Xmnパラメーター)に指定する値を大きくしてください。たとえば、cassandra-stressを実行している場合はサイズを名前 暗号化 圧縮 Encryptor [1] あり なし EncryptingLZ4Compressor あり あり EncryptingDeflateCompressor あり あり EncryptingSnappyCompressor あり あり -Xmn1600M
に設定します。 - 任意。
cipher_algorithm_type
:使用する暗号化キーのタイプを設定します。DSEでは、以下のJCEアルゴリズムとそれに対応するlength
をサポートしています。- cipher_algorithm[/mode/padding]
- DSEは以下のJCE暗号化アルゴリズムをサポートします。
- AES/CBC/PKCS5Padding(長さ128、192、または256で有効)
- AES/ECB/PKCS5Padding(長さ128、192、または256で有効)
- DES/CBC/PKCS5Padding(長さ56で有効)
- DESede/CBC/PKCS5Padding(長さ112または168で有効)
- Blowfish/CBC/PKCS5Padding(長さ32~448で有効)
- RC2/CBC/PKCS5Padding(長さ40~128で有効)
- 任意。
length
:使用するキーの長さを指定します。デフォルトは128です。 - 任意。
key_filename
:テーブル・キーの暗号化に使用するローカル暗号化キーのファイル名を指定します。ローカル・キーはsystem_key_directoryにあります。デフォルトはsystem_keyです。
始める前に
注: ローカル暗号化キー・ファイルを使用する場合は、場所をsystem_key_directoryに設定し、DSEを実行しているアカウントがキー・ファイルを所有していることを確認します。
手順
-
暗号化が有効になっているテーブルの作成(圧縮は無効):
暗号化が有効で圧縮は行わないテーブルを構成するときは、chunk_length_kbオプションを可能な限り小さい値(1など)に設定します。設定する値が小さいほど、各読み取り操作で復号化する必要のあるデータが制限されるため、読み取りパフォーマンスが向上します。
CREATE TABLE test.encryption_test_a (a int primary key) WITH COMPRESSION = { 'class': 'Encryptor', 'chunk_length_kb' : 1 };
注: コマンドによって任意の設定が除外される場合に、デフォルト値を持つキーが既に存在すると(SELECT key_id FROM dse_system.encrypted_keys WHERE key_file = 'system_key' AND cipher = 'AES' AND strength = 128;
)、そのキーがテーブルの暗号化に使用されます。キーが存在しない場合は、DSEによってキーが自動的に作成されます。 -
暗号化と圧縮の両方が有効になっているテーブルの作成:
キー長が112のDESedeアルゴリズムを使用してテーブルを暗号化し、LZ4圧縮を使用してデータを圧縮します。
CREATE TABLE test.encryption_test_d (d int primary key) WITH COMPRESSION = { 'class': 'EncryptingLZ4Compressor', 'cipher_algorithm' : 'DESede/CBC/PKCS5Padding', 'secret_key_strength' : 112, 'system_key_file' : 'test-key' };
注: 「test-key」というローカル暗号化キーがsystem_key_directoryに存在している必要があります。DSEアカウントに読み取り/書き込みパーミッションがないか、ファイルが見つからない場合は、エラー・メッセージ「Encryptorの初期化に失敗する」が表示されます。 -
既に存在するテーブルでの暗号化の設定または変更: