保存データの暗号化
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このドキュメントでは、ScalarDB に保存されているデータを暗号化する方法について説明します。
概要
ScalarDB は、それを介して保存されたデータを暗号化できます。暗号化機能は、主要なデータベースシステムの透過的データ暗号化 (TDE) に似ているため、アプリケーションに対して透過的です。ScalarDB は、バックエンドデータベースに書き込む前にデータを暗号化し、そこから読み取るときに復号します。
現在、ScalarDB は列レベルの暗号化をサポートしており、テーブル内の特定の列を暗号化できます。
設定
暗号化機能を有効にするには、ScalarDB Cluster ノード設定ファイルで scalar.db.cluster.encryption.enabled
を true
に設定する必要があります。
名前 | 説明 | デフォルト |
---|---|---|
scalar.db.cluster.encryption.enabled | ScalarDB が保存データを暗号化するかどうか。 | false |
暗号化はクライアントに対して透過的であるため、クライアントの設定を変更する必要はありません。
暗号化機能を有効にする場合は、内部的にパーティション間スキャンを実行するため、システム名前空間 (デフォルトでは scalardb
) の scalar.db.cross_partition_scan.enabled
を true
に設定する必要もあります。
その他の設定は、選択した暗号化実装によって異なります。現在、ScalarDB は次の暗号化実装をサポートしています。
- HashiCorp Vault 暗号化
- 自己暗号化
次のセクションでは、各暗号化実装の設定方法について説明します。
HashiCorp Vault 暗号化
HashiCorp Vault 暗号化では、ScalarDB は HashiCorp Vault の encryption as a service を使用してデータを暗号化および復号します。この実装では、ScalarDB は暗号化キーの管理とデータの暗号化および復号を HashiCorp Vault に委任します。
HashiCorp Vault 暗号化を使用するには、ScalarDB Cluster ノード設定ファイルでプロパティ scalar.db.cluster.encryption.type
を vault
に設定する必要があります。
名前 | 説明 | デフォルト |
---|---|---|
scalar.db.cluster.encryption.type | HashiCorp Vault 暗号化を使用するには、vault に設定する必要があります。 |
次のプロパティも設定する必要があります。
名前 | 説明 | デフォルト |
---|---|---|
scalar.db.cluster.encryption.vault.key_type | キーの種類。現在、aes128-gcm96 、aes256-gcm96 、chacha20-poly1305 がサポートされています。キーの種類の詳細については、Key types を参照してください。 | aes128-gcm96 |
scalar.db.cluster.encryption.vault.associated_data_required | AEAD 暗号化に関連データが必要かどうか。 | false |
scalar.db.cluster.encryption.vault.address | HashiCorp Vault サーバーのアドレス。 | |
scalar.db.cluster.encryption.vault.token | HashiCorp Vault で認証するためのトークン。 | |
scalar.db.cluster.encryption.vault.namespace | HashiCorp Vault の名前空間。この設定はオプションです。 | |
scalar.db.cluster.encryption.vault.transit_secrets_engine_path | トランジットシークレットエンジンのパス。 | transit |
scalar.db.cluster.encryption.vault.column_batch_size | HashiCorp Vault サーバーへの単一のリクエストに含まれる列の数。 | 64 |
自己暗号化
自己暗号化では、ScalarDB がデータ暗号化キー (DEK) を管理し、暗号化と復号を実行します。ScalarDB はテーブルの作成時にテーブルごとに DEK を生成し、Kubernetes Secrets に保存します。
自己暗号化を使用するには、ScalarDB Cluster ノード設定ファイルでプロパティ scalar.db.cluster.encryption.type
を self
に設定する必要があります。
名前 | 説明 | デフォルト |
---|---|---|
scalar.db.cluster.encryption.type | 自己暗号化を使用するには self に設定する必要があります。 |
次のプロパティも設定する必要があります。
名前 | 説明 | デフォルト |
---|---|---|
scalar.db.cluster.encryption.self.key_type | キーの種類。現在、AES128_GCM 、AES256_GCM 、AES128_EAX 、AES256_EAX 、AES128_CTR_HMAC_SHA256 、AES256_CTR_HMAC_SHA256 、CHACHA20_POLY1305 、および XCHACHA20_POLY1305 がサポートされています。キーの種類の詳細については、キータイプの選択を参照してください。 | AES128_GCM |
scalar.db.cluster.encryption.self.associated_data_required | AEAD 暗号化に関連データが必要かどうか。 | false |
scalar.db.cluster.encryption.self.kubernetes.secret.namespace_name | Kubernetes Secrets の名前空間名。 | default |
scalar.db.cluster.encryption.self.data_encryption_key_cache_expiration_time | DEK キャッシュの有効期限(ミリ秒単位)。 | 60000 (60秒) |
テーブルを削除するときに DEK を削除する
デフォルトでは、ScalarDB はテーブルを削除しても、テーブルに関連付けられたデータ暗号化キー (DEK) を削除しません。ただし、テーブルを削除するときに DEK を削除するように ScalarDB を設定できます。これを有効にするには、ScalarDB Cluster ノード設定ファイルでプロパティ scalar.db.cluster.encryption.delete_data_encryption_key_on_drop_table.enabled
を true
に設定します。
名前 | 説明 | デフォルト |
---|---|---|
scalar.db.cluster.encryption.delete_data_encryption_key_on_drop_table.enabled | テーブルを削除するときに DEK を削除するかどうか。 | false |
制限事項
暗号化機能にはいくつかの制限事項があります:
- 主キー列 (パーティションキー列とクラスタリングキー列) は暗号化できません。
- セカンダリインデックス列は暗号化できません。
- 暗号化された列は WHERE 句または ORDER BY 句で指定できません。
- 暗号化された列は、基になるデータベースに BLOB 型として保存されるため、BLOB 型の最大サイズより大きい暗号化された列は保存できません。BLOB 型の最大サイズについては、ScalarDB と他のデータベース間のデータ型マッピングを参照してください。
ワイヤ暗号化
暗号化機能を有効にする場合は、データを保護するために本番環境でワイヤ暗号化を有効にすることを強くお勧めします。ワイヤ暗号化の詳細については、ScalarDB Cluster ワイヤ暗号化を参照してください。