KMIP暗号化の構成
リモートKMIP(Key Management Interoperability Protocol)の暗号化キーを使用して機密データを保護します。
KMIPホストの追加
テーブルまたは構成プロパティの暗号化と復号化にリモート・サーバーのキーを使用するよう、KMIPホストを構成します。
DataStax Enterpriseでは、dse.yamlおよびcassandra.yaml構成ファイル内のテーブル・データや機密性の高いプロパティの暗号化/復号化に1つ以上のリモートKMIPホストの暗号化キーを使用できます。KMIPサーバー情報を使用可能なホストのリストに追加するには、以下の手順に従います。
KMIPホストのセキュリティ・ポリシーを使用してKMIPキーをリモートに管理するノードの数は制限することが推奨されます。
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/dse.yaml |
tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
手順
-
KMIPエージェントを設定し、DSEをKMIPサービスに登録します。
注: 詳細な手順については、KMIPキー・プロバイダーのドキュメントを参照してください。
- エージェントをダウンロードしてインストールします。
- KMIPホストに接続します。
- DSEノードを登録します。
- エージェントによって生成されたSSLキー・ペアを見つけます。
-
キー・ペアをPEMからDSEと互換性のあるJSK形式に変換します。
-
kmip_hostsセクション( dse.yaml内)にホストの詳細を追加します。
kmip_hosts: kmip_group_name: hosts: FQDN[, FQDN , ...] keystore_path: /etc/dse/conf/kmip_keystore.jks keystore_type: jks keystore_password: password truststore_path: /etc/dse/conf/kmip_truststore.jks truststore_type: jks truststore_password: password key_cache_millis: N timeout: N
- 必要な設定:
- kmip_group_name:DSE関連コマンドでKMIPホストを識別するユーザー定義のグループ名。
hosts
:KMIPホストの完全修飾ドメイン名(FQDN)のコンマ区切りリスト。DSEはこのリスト内の順番でホストを試行します。keystore_path
:2で作成されたキーストアの場所。keystore_type: jks
:互換性のあるDSE形式。jks
に設定する必要があります。keystore_password
:2で作成されたキーストア・ファイルのパスワード。truststore_path
:2で作成されたトラストストア・ファイルの場所。truststore_type: jks
:互換性のあるDSE形式。jks
に設定する必要があります。truststore_password
:2で作成されたトラストストア・ファイルのパスワード。
- 任意指定の設定は以下のとおりです。
key_cache_millis: N
:ここで、NはDSEによってノード上のキー・キャッシュが更新される間隔です。デフォルトは300000(5分)です。timeout: N
:ここで、Nはソケット・タイムアウト(ミリ秒)です。デフォルトは1000です。
- 必要な設定:
-
リモートKMIPサーバー上の暗号化キーをリストして、ノードがKMIPホストに接続できることを確認します。
dsetool managekmip list kmip_group_name
注:KMIPサーバーとの接続で問題が発生する場合は、「KMIP接続のトラブルシューティング」を参照してください。dsetool
がdse.yamlの変更内容を検出します。再起動は必要ありません。 - クラスター内のすべてのノードで上記の手順を繰り返します。
構成ファイルのプロパティの暗号化
リモート・ホストのKMIPキーを使用して、dse.yamlファイル内のLDAP検索とトラストストアのパスワードと、cassandra.yamlファイル内のSSLトラストストア・パスワードを保護します。
-
dse.yaml LDAP値:
ldap_options.search_password ldap_options.truststore_password
制約事項: KMIPキーストアまたはトラストストアのパスワードにプレーン・テキストを使用します。 -
cassandra.yaml SSL値:
server_encryption_options.keystore_password server_encryption_options.truststore_password client_encryption_options.keystore_password client_encryption_options.truststore_password
cassandra.yaml
cassandra.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/cassandra/cassandra.yaml |
tarボール・インストール | installation_location/resources/cassandra/conf/cassandra.yaml |
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/dse.yaml |
tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
始める前に
手順
- 構成ファイルをバックアップします。
-
KMIP暗号化キーのURLを取得します。
- 新しいキーを作成してURLを取得するには、以下のように入力します。
以下の出力例は、dse.yamlに含まれている、IDが02-1655で名前がvormetricgroupのホストのURLを示しています。dsetool createsystemkey 'AES/ECB/PKCS5' 128 -k kmip_group_name
kmip://vormetricgroup/02-1655
- 既存のKMIPキーを使用するには、URL構文に
kmip://kmip_group_name/ID
を使用します。キーIDを検索するには、以下のように入力します。
たとえば、vormetricgroupには以下のキーがあります。dsetool managekmip list kmip_group_name
リストの2番目のキーのURLはKeys on vormetricgroup: ID Name Cipher State Activation Date Creation Date Protect Stop Date Namespace 02-449 82413ef3-4fa6-4d4d-9dc8-71370d731fe4_0 AES/CBC/PKCS5 Deactivated Mon Apr 25 20:25:47 UTC 2016 n/a n/a n/a 02-540 0eb2277e-0acc-4adb-9241-1dd84dde691c_0 AES Active Tue May 31 12:57:59 UTC 2016 n/a n/a`
kmip://vormetricgroup/02-540
です。
- 新しいキーを作成してURLを取得するには、以下のように入力します。
-
システム・プロパティ暗号化設定をdse.yamlで構成します。
- プロパティごとに、プレーン・テキスト・パスワードを、dsetool encryptconfigvalueコマンドを実行して返された暗号化パスワードと置き換えます。
- 任意。システム・リソース暗号化を設定します。
- ローリング再起動を実行します。
システム・リソースの暗号化
KMIPキーを使用して、system.batchlogテーブル、system.paxosテーブル、ヒント・ファイル、およびコミット・ログを暗号化します。
KMIPキーを使用して、system.batchlogテーブル、system.paxosテーブル、ヒント・ファイル、およびコミット・ログを暗号化します。
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/dse.yaml |
tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
始める前に
手順
-
dse.yaml ファイルで、システム・テーブル、コミット・ログ、ヒント・ファイルの暗号化設定を構成します。
system_info_encryption: enabled: ( true | false ) cipher_algorithm: cipher_name secret_key_strength: length key_provider: KmipKeyProviderFactory kmip_host: kmip_group_name chunk_length_kb: 64
- 必須プロパティ:
enabled
:true
に設定します。次回の起動時に、システム・リソースが暗号化されます。システム・テーブルに既存のデータが含まれている場合は、nodetool upgradesstablesを使用して暗号化を適用します。key_provider
:KmipKeyProviderFactory
に設定します。kmip_host
:kmip_hostsセクションのグループ名を使用します。
- 任意。KMIPにより、互換性のあるキーを確実に生成するには、使用する暗号化キーのタイプを構成します。
cipher_algorithm
:サポートされているJCE暗号化アルゴリズムのうち、使用するアルゴリズムの名前を設定します。DSEは以下のアルゴリズムをサポートしています。表 1. サポートされている暗号化アルゴリズム名 cipher_algorithm secret_key_strength AES 128、192、または256 DES 56 DESede 112または168 Blowfish 32-448 RC2 40-128 secret_key_strength
:キー長を指定します。chunk_length_kb
:SSTableのチャンク・サイズを構成します。オプションを指定しない場合は、デフォルト(64)が使用されます。
- 必須プロパティ:
- ローリング再起動を実行します。
- 既存のデータを暗号化するには、クラスター内のすべてのノードで
nodetool upgradesstables -a system batchlog paxos
を実行します。
テーブル・データの暗号化
KMIPキーを使用して、テーブル・データに格納されたデータを暗号化します。
KMIPキーを使用して、テーブル・データに格納されたデータを暗号化します。
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/dse.yaml |
tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
始める前に
手順
-
KMIPサーバーのキーを使用して新しい暗号化テーブルを作成するには、以下の手順を実行します。
- 圧縮なしの暗号化:
CREATE TABLE customers ... WITH COMPRESSION = { 'class': 'Encryptor', 'key_provider': 'KmipKeyProviderFactory', 'kmip_host': 'kmip_group_name' ['key_namespace' = 'kmip_namespace'], 'cipher_algorithm': 'AES/ECB/PKCS5Padding', 'secret_key_strength': 128 };
'key_provider': 'KmipKeyProviderFactory'
は、KMIPキー・サーバーを使用してその暗号化キーを管理するように暗号化機能に指示します。KMIPキー・サーバーを使用するように指定する場合のみ、‘key provider’
エントリーを含めます。それ以外の場合は、このエントリーを省略します。'kmip_host': 'kmip_group_name'
は、kmip_hostsセクション(dse.yaml ファイル内)で定義されているユーザー定義KMIPキー・サーバー・グループ名を指定します。- 'kmip_host': 'kmip_group_name' ['key_namespace' = 'kmip_namespace']は、任意のKMIP名前空間を指定します。名前空間を使用すると、テーブルまたはキースペースごとにキーを詳細に管理できます。
- 圧縮と暗号化:
CREATE TABLE customers ... WITH COMPRESSION = { 'class': 'EncryptingDeflateCompressor', 'key_provider': 'KmipKeyProviderFactory', 'kmip_host': 'kmip_group_name', 'cipher_algorithm': 'AES/ECB/PKCS5Padding', 'secret_key_strength': 128 };
- 圧縮なしの暗号化:
-
既存のテーブルを暗号化するには、以下の手順を実行します。
nodetool upgradesstables -a [keyspace_name [table_name[ tablename]...]
暗号化キーの期限の設定
復号化に使用されるキーを変更せずに、データの暗号化に使用されるKMIPキーを変更します。
通常、暗号化キーを使用できる時間はセキュリティ・ポリシーで制限されます。このセクションでは、既存のデータを再暗号化せずに、キーの期限を設定する方法について説明します。キーは期限切れになると、新しいデータの暗号化に使用されなくなりますが、既存のデータの復号化には引き続き使用されます。
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/dse.yaml |
tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
手順
-
KMIPサーバーから使用可能なキーと状態のリストを取得します。
たとえば、vormetricgroupという名前のホストに2つのキーがあるとします。dsetool managekmip list kmip_group_name
Keys on vormetricgroup: ID Name Cipher State Activation Date Creation Date Protect Stop Date Namespace 02-449 82413ef3-4fa6-4d4d-9dc8-71370d731fe4_0 AES/CBC/PKCS5 Deactivated Mon Apr 25 20:25:47 UTC 2016 n/a n/a n/a 02-540 0eb2277e-0acc-4adb-9241-1dd84dde691c_0 AES Active Tue May 31 12:57:59 UTC 2016 n/a n/a
注: DSEは、1つ以上のKMIPホストをサポートしています。各KMIPホストは、dse.yamlファイルのkmip_hostsセクションのユーザー定義kmip_group_nameで定義されています。 -
キーの期限を設定します。
- キーを直ちに期限切れにします。
dsetool managekmip expirekey kmip_group_name key_id
- 有効期日をスケジュールします。
dsetool managekmip expirekey kmip_group_name key_id datetime
注: キーの期限が切れると、データベースは、次回キー・キャッシュ(key_cache_millis)が更新されたときに暗号化用の新しいキーを取得します。デフォルト設定は5分です。期限切れになったキーは、データの復号化には引き続き使用できます。
- キーを直ちに期限切れにします。
- 必要に応じて、ローリング再起動を実行して、DSEキー・キャッシュを強制的に更新します。
新しいキーを使用したテーブルのキー更新
テーブル・データの暗号化に現在使用している侵害されたキーを取り消し、新しいキーを使用して既存のデータを再度暗号化します。
新しいデータの暗号化と既存データの復号化の両方に使用されている暗号化キーを変更します。セキュリティ管理担当者の変更など、暗号化キーが侵害された可能性があるイベントの後でデータの安全性を確保するには、以下の手順を実行します。古いキーを破棄する前に、侵害されたKMIPキーを取り消し、データベース・キー・キャッシュが更新されるのを待ってから、新しいキーで既存のSSTableを再度暗号化します。
データベースは暗号化キーをキャッシュし、key_cache_millisで設定されている間隔でキャッシュを更新します(デフォルト設定は5分間隔)。新しいキーを取得するには、次回のキー・キャッシュの更新を待つか、ローリング再起動を実行します。
expirekey
:データベースは、指定された時間にキーを暗号化に使用することを止め、既存のデータの復号化には期限切れのキーを引き続き使用します。データの再キーイングを行う必要はありません。このコマンドを使用して、定期的に暗号化キーを切り替えることを義務付けているセキュリティ・ポリシーを満たします。
revoke
:KMIPサーバーのキーを恒久的に無効にします。データベースでは暗号化にキーを使用できなくなりますが、既存のデータの復号化にはそのキーが引き続き使用されます。KMIPサーバーからキーを完全に削除する前に、既存のデータを再暗号化してください。侵害を受けたキーを交換する場合は、最初の手順としてこのコマンドを使用します。
destroy
:KMIPサーバーからキーを完全に削除します。データベースは、暗号化または復号化にキーを使用できなくなります。再暗号化されていない既存のデータには、アクセスできなくなります。このコマンドは、キーを取り消して、既存のデータを再暗号化した後にのみ使用してください。
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/dse.yaml |
tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
手順
- SSTableのバックアップを作成します。
-
dsetool managekmip revokeを使用して、侵害されたキーを取り消します。
-
以下のいずれかの方法を使用して、データベース・キー・キャッシュを更新します。
- key_cache_millis設定で指定されている時間待ってから、次のステップに進みます。
- ローリングの再起動を実行します。「DataStax Enterpriseの起動と停止」を参照してください。
注: KMIPキーは、DSEノードでキャッシュされます。キャッシュが更新され、key_cache_millisの経過後、KMIPサーバーによって新しいキーが自動的に生成されます。デフォルト設定は5分です。 -
(任意)DESCキースペース・コマンドを使用して新しいキーで再度暗号化するため、影響を受けるテーブルのリストを表示します。
たとえば、KMIPグループを使用するcyclingキースペース内のテーブルをすべて表示するには、以下のように入力します。
DESC KEYSPACE cycling
-
notetool upgradesstablesを使用して、新しいキーを使用する暗号化されたSSTableを再度書き込みます。クラスターのすべてのノードで以下のコマンドを実行します。
- 対象が特定のテーブルのみの場合:
nodetool upgradesstables --include-all-sstables keyspace_name table_name [table_name …]
- 対象が特定のキースペースの場合:
nodetool upgradesstables --include-all-sstables keyspace_name
- 対象がすべてのキースペースとテーブルの場合:
nodetool upgradesstables --include-all-sstables
- 対象が特定のテーブルのみの場合:
-
(任意)それ以降、復号化に使用できないようにするには、暗号化キーを削除します。
dsetool managekmip destroy key_id
警告: バックアップされているSSTableのみ、古いキーを使用してアクセスできます。キーを削除する前に、データにアクセスできることを確認してください。
KMIP接続のトラブルシューティング
KMIPホストに接続できないエラーが発生する
WARN 14:46:42,928 Unable to connect to KMIP host: 10.120.15.100:9005
com.cryptsoft.kmip.TTLVReadException: Error reading TTLV ResponseMessage. Got end-of-stream after reading 0 byte(s). Read bytes: (0) []
DSEとKMIPホスト間の信頼が適切に構成されていることを確認します。「ローカルSSL証明書とキーストア・ファイルの使用」を参照してください。