テーブルごとの暗号化(TDE)の構成

透過的なデータ暗号化(TDE)をテーブルごと、またはクラスター全体ごとに構成します。暗号化は、圧縮の有無にかかわらず構成できます。

透過的なデータ暗号化(TDE)をテーブルごと、またはクラスター全体ごとに指定します。暗号化を使用すると、アプリケーションは異なる暗号化アルゴリズムを使用するSSTableの読み取り/書き込みや、暗号化を一切使用しないSSTableの読み取り/書き込みを行うことができます。データを暗号化するには、スーパーユーザーとしてログインする必要があります。例:

cqlsh -u cassandra -p cassandra

システム・キーの概要

  • dsetool createsystemkeyコマンドを使用して、任意の数のシステム・キーを作成できます。
  • すべてのシステム・キーは、dse.yamlのsystem_key_directoryプロパティで設定された場所のクラスター全体で一貫している必要があります。
  • システム・キーには、そのユーザーの読み取り/書き込みパーミッションがある必要があります。
  • テーブルごとに異なるシステム・キーを使用できます。
  • テーブルで特定のシステム・キーを使用するには、CREATE TABLE文またはALTER TABLE文で'system_key_file':'system_key_filename'サブプロパティを指定する必要があります。
  • 'system_key_file':'system_key_filename'サブプロパティが指定されていない場合は、DataStax Enterpriseクラスターのデフォルトのグローバル・システム・キーが使用されます。
    • グローバル・システム・キーとは、dse.yamlファイルでsystem_key_directoryプロパティ用に指定された場所に作成する暗号化キーです。
    • グローバル・キー・ファイルには、任意の名前を使用できます。dsetool createsystemkeyコマンドでキー名を指定するには、fileオプションを使用します。例:dsetool createsystemkey file globalsystemkey .... キー名を指定しない場合のデフォルトのキー名は、system_keyです。デフォルトのキー名は変更できません。
    デフォルトのグローバル・システム・キー・ファイルは、クラスター全体で使用されるdse_system.encrypted_keysテーブルに挿入されます。

テーブルごとに暗号化を構成する例

2つのシステム・キー・ファイルを作成します。
sudo dsetool createsystemkey 'AES/ECB/PKCS5Padding' 128 system_key
$ sudo dsetool createsystemkey 'AES/ECB/PKCS5Padding' 128 system_key_2
システム・キーに読み取りおよび書き込みパーミッションがあることを確認します。
la -l
-rw------- 1 cassandra cassandra 50 May 19 10:54 system_key
-rw------- 1 cassandra cassandra 50 May 19 11:20 system_key_2
この特定のテーブルの暗号化キーとしてsystem_key_2ファイル使用するように指定するテーブルを作成します。
create table users (name text PRIMARY key, bio text ) 
with compression = { 'sstable_compression' :'EncryptingSnappyCompressor',   
'cipher_algorithm' :'AES/ECB/PKCS5Padding',   
'secret_key_strength' : 128,   
'chunk_length_kb' : 128, 
'system_key_file':'system_key_2' };

テーブル・データを暗号化および圧縮を用いて暗号化する

1つのCREATE TABLE文またはALTER TABLE文を使用して、暗号化と圧縮を設定できます。1つのCQL文は以下のとおりです。
CREATE TABLE users
  ... 
WITH compression =
{ 'sstable_compression' :'EncryptingSnappyCompressor',
'cipher_algorithm' :'AES/ECB/PKCS5Padding',
'secret_key_strength' : 128,
,  'chunk_length_kb' : 128 };
注: ALTER TABLEを使用して暗号化するデータを指定しても、既存のSSTableは暗号化されません。暗号化されるのは、生成される新しいSSTableのみです。

テーブル・データを暗号化を用いて、圧縮しないで暗号化する

データを圧縮しないで暗号化するように設定するには、chunk_length_kbオプションを可能な最低値に設定します。このオプションを1のような低い値に設定すると、各読み取り操作で復号化する必要があるデータが1KBに制限されるため、読み取りパフォーマンスが向上します。

暗号化/圧縮オプションとサブオプション

暗号化を使用すると、アプリケーションは異なる暗号化アルゴリズムを使用する、または暗号化を一切使用しないSSTableを読み取ったり、書き込んだりすることができます。異なる暗号化アルゴリズムを使用してSSTableデータを暗号化する作業は、異なる圧縮アルゴリズムを使用してデータを圧縮する作業に似ています。

CREATE TABLE文とALTER TABLE文で使用可能な暗号化/圧縮用の高レベルなコンテナー・オプションは以下のとおりです。
Encryptor テーブル・データを暗号化します。
EncryptingDeflateCompressor テーブル・データを暗号化し、Deflate圧縮アルゴリズムを使用します。
EncryptingSnappyCompressor テーブル・データを暗号化し、Snappy圧縮アルゴリズムを使用します。
DeflateCompressor テーブル・データを暗号化せずに、Deflate圧縮アルゴリズムを使用します。
SnappyCompressor テーブル・データを暗号化せずに、Snappy圧縮アルゴリズムを使用します。
LZ4Compressor(デフォルト) テーブル・データを暗号化せずに、LZ4圧縮アルゴリズムを使用します。
Encryptor暗号化機能を使用してテーブルを定義する場合は、ガーベージ・コレクション(GC)を改善するために、新しい生成ヒープ(-Xmn)パラメーターに大きなスペースを割り当てます。

たとえば、cassandra-stressを実行している場合は、: -Xmn1600Mを設定します。暗号化と圧縮のサブオプションは以下のとおりです。

cipher-algorithmサブオプション

Java Cryptography Extension (JCE)がインストールされている場合、cipher_algorithmオプションとアルゴリズムで使用可能なsecret_key_strength値は以下のとおりです。
cipher_algorithm secret_key_strength
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
JCEがインストールされている場合、以下の暗号化オプションが有効です。
  • sstable_compression = EncryptingDeflateCompressor
  • cipher_algorithm = 'AES/CBC/PKCS5Padding'
  • secret_key_strength = 256
  • chunk_length_kb = 128
  • key_provider = KmipKeyProviderFactory
  • kmip_host = kmip_group2

JVMのカスタム・プロバイダーをインストールできます。AES-512は、構成しないと使用できません

key_provider
暗号化用のKMIPキー・サーバーを使用する場合は、KmipKeyProviderFactoryを使用します。
kmip_host
dse.yamlのkmip_hostsセクションで設定されているKMIPキー・サーバー・グループの名前。
キーの場所のサブオプション

dsetool createsystemkeyコマンドを使用してグローバル暗号化キーを作成します。グローバル暗号化キーは、dse.yamlファイルのsystem_key_directoryで指定されている場所に作成できます。このデフォルトのグローバル暗号化キーは、system_key_fileサブプロパティが指定されていない場合に使用されます。

特定の暗号化キーを使用するには、以下のようにします。
'system_key_file':'name_of_system_key_file'
chunk_length_kbサブオプション

ディスク上では、SSTableは、(ランダム読み取りを許可するために)ブロックごとに暗号化および圧縮されています。この圧縮サブプロパティは、そのブロックのサイズ(KB)を定義し、2のべき乗で表されます。値をデフォルト値より大きくすると、圧縮率が上がりますが、実際に読み取るときにディスクから読み取るデータの最小サイズが大きくなります。デフォルト値(64)は、テーブルの圧縮に適切ですが、Data Encryption Standard(DES)の最大キー・サイズは64で、その他の暗号化アルゴリズムの最大キー・サイズはすべて128です。暗号化を強化したい場合は、Java Cryptography Extension(JCE)をインストールしてください。

暗号化のみを使用し、圧縮を使用しない場合、SSTableのサイズは圧縮を組み合わせた場合よりも大きくなります。テーブル作成時に、DataStax Enterpriseはdse.yamlで指定されたシステム・キーを検索します。システム・キーが含まれているキータブ・ファイルの場所を指定する必要はありません。

iv_lengthサブオプション

すべてのアルゴリズムでこのサブオプションを設定できるとは限りません。大半のユーザーの苦情は、16バイトに設定されていない場合です。16を使用するか、デフォルトを受け入れます。

サブオプションを使用するための構文は、データ圧縮用に圧縮アルゴリズムを設定するための構文に似ています。

ALTER TABLEユーザー
  ...
WITH compression =
{ 'sstable_compression' :'EncryptingSnappyCompressor',
'cipher_algorithm' :'AES/ECB/PKCS5Padding',
'secret_key_strength' : 128,
'iv_length' : 16 };

SolrJ Authを使用しての暗号化の実装

SolrJ-Authライブラリを使用して暗号化を実装するには、solrj-auth-README.mdファイルの指示に従ってください。

solrj-auth-README.mdファイルのデフォルトの場所は、インストールのタイプによって異なります。
Debianインストール /usr/share/doc/dse-libsolr*
RHELベースのインストール /usr/share/doc/dse-libsolr
バイナリー・インストール resources/solr

これらのSolrJ-Authライブラリは、DataStax Enterpriseディストリビューションのclientsディレクトリーに含まれています。SolrJ-Authコードはパブリックです。

clientsディレクトリーのデフォルトの場所は、インストールのタイプによって異なります。
Debianインストール /usr/share/dse/clients
バイナリー・インストール install_location/clients