データストレージ暗号化とは、データやclogなどディスクに保存されるデータをユーザーが意識することなく暗号化すること、すなわち透過的データ暗号化(TDE)を指します。データはストレージデバイスに書き込まれる前に自動的に暗号化され、読み取り時には自動的に復号化されます。このプロセスはユーザーにとって透過的であり、ハッカーや悪意のあるユーザーはデータファイル、データベースバックアップ、またはディスクから機密データを読み取ることができません。
OceanBaseデータベースのユーザーデータとバックアップは最終的にはバイナリ形式で、ディスクやその他の永続的なストレージに保存されます。データへのアクセス権限を持たないユーザーがこれらのストレージにアクセスし、外部操作を通じてデータストレージを読み取り解釈することで、データ漏洩が発生する可能性があります。OceanBaseデータベースのデータは圧縮形式で保存され、一定の秘匿性を備えていますが、それでも解読されるリスクがあります。メモリおよびハードディスクに保存されたデータのセキュリティを保護するため、OceanBaseデータベースは現在、国際的に主流の暗号化アルゴリズムであるAESをサポートしているほか、SM4もサポートしています。
二層キー体系
透過的データ暗号化は、二層鍵体系を用いて暗号化・復号化機能を実現します。暗号化を有効にする最小単位はデータベース内のテーブルであり、暗号化が必要なテーブルは暗号化テーブルスペース(Tablespace)に配置する必要があります。OceanBaseデータベースにおけるデータの暗号化単位はテーブルスペースですが、テーブルスペースはOracleデータベースとの互換性を考慮して設計された概念であり、複数のテーブルの集合であると考えることができます。各暗号化テーブルスペースには暗号化アルゴリズムと対応するデータキーが設定されており、そのテーブルスペース内のデータを暗号化するために使用されます。各テナントにはマスターキーがあり、テーブルスペースのデータキーを暗号化するために使用されます。不正な復号化操作を防ぐため、マスターキーは通常専用のKeystoreに格納されます。
データのセキュリティを確保するため、ユーザーはKeystoreを使用してマスターキーや暗号化キーの情報を直接確認したり、マスターキーや暗号化キーを指定したりすることはできません。マスターキーと暗号化キーはシステムによって生成され、決して平文でディスクに直接保存されることはなく、システムのセキュリティが大幅に向上しています。
Keystoreはマスターキーの管理モジュールであり、キー管理サービスを提供します。Keystoreの機能には以下のものが含まれます:
- マスターキーの生成:マスターキーはKeystoreが暗号化アルゴリズムに基づいて生成され、ユーザーは指定できません。これにより、より高いセキュリティが実現されます。
- マスターキー関連情報の格納:マスターキー関連情報に基づき、Keystoreはマスターキーを取得できます。Keystoreは関連情報の複数レプリカ特性、一貫性特性、および障害処理を保証する必要があります。
- マスターキーの管理とマルチバージョン制御:Keystoreはマスターキーの変更とマルチバージョン制御を担当します。マルチバージョンメカニズムにより、新しく生成されたマスターキーは即時に有効になる必要がなく、段階的にマスターキーの置き換えを完了できます。
- マスターキー取得のための高可用性サービス
- Keystoreの操作指示の処理。
透過的データ暗号化を有効にする際には、そのマスターキーの保存方法を指定する必要があります。これは構成パラメータtde_methodで制御され、その値は以下のとおりです:
tde_method の値 |
意味 |
|---|---|
none |
ストレージ暗号化を無効にします |
internal |
有効。マスターキーは内部テーブルに保存されます |
bkmi |
有効。マスターキーは外部のBKMIシステムに保存されます |
obcloud |
有効。マスターキーはOceanBase Cloud KMSサービスに保存されます |
OceanBaseデータベースでは、現在プライベートクラウド(OCP KMSプロキシサービス)はinternalとobcloudの2種類の透過的テーブルスペース暗号化方式をサポートしています。internal方式のテナントマスターキーについては、その暗号化情報は主に内部テーブルで管理されます。ログリプレイ時の循環依存を避けるため、この暗号化方式ではclogは暗号化されません。obcloud方式のテナントマスターキーについては、その暗号化情報は主にOceanBase Cloud KMSプロキシサービスまたはOCP KMSプロキシサービスを通じて管理されます。
暗号化を有効にすると、マスターキーを使用してデータキーを暗号化し、暗号化されたデータキーの暗号文を得ます。この暗号文は内部テーブル、マクロブロックヘッダー、Clogヘッダーに保存され、データキーはどこにも平文で保存されません。データの暗号化・復号化が必要な場合、マスターキーを使用してこの暗号文を復号化し、データキーを得て、マクロブロックやclog内のユーザーデータに対する暗号化・復号化操作を行います。
使用上の制限:
- システムテナントでは暗号化を有効にできません。
- テナントでストレージ暗号化が設定されると、テナントを再構築しない限り、他の暗号化方式に切り替えることはできません。
- bkmiおよびobcloud方式の透過的データ暗号化はclog暗号化をサポートしていますが、enable_clog_encryption構成パラメータで手動で有効にする必要があります。
注意
clog暗号化を有効にした後、OBCDCは使用できません。
暗号化の有効化メカニズム
ユーザーがディスクに保存するデータには、clogとマクロブロックの2種類があります。データが実際にディスクに書き込まれる際にのみ暗号化が有効になり、メモリ内のデータは暗号化されません。元々暗号化されていないテーブルを暗号化に切り替えた場合、既にディスクに保存されている未暗号化のclogやマクロブロックデータは暗号化されず、その後新たにディスクに書き込まれるデータのみが暗号化されます。各clogと各マクロブロックには暗号化メタ情報が記録されるため、暗号化されたデータと未暗号化のデータが同時に存在することが可能です。
clogは追記モードでディスクに書き込まれるため、古い未暗号化のclogは永遠に暗号化されません。暗号化を有効にしてしばらく経過し、古いclogがすべて回収されると、ディスク上のclogデータはすべて暗号化されたデータになります。マクロブロックデータについては、ダンプまたはメジャーコンパクション時にのみ書き込みが発生するため、手動でフルコンパクションをトリガーして未暗号化のマクロブロックデータを暗号化されたものに書き直すことができます。
透過的データ暗号化を有効にした後、clogの暗号化はデフォルトで無効になっています。bkmiまたはobcloud方式でclog暗号化を有効にする必要がある場合(これら2つの方式のみサポート)、パラメータenable_clog_encryptionを使用してこの機能を手動で有効にできます。
サポートされている暗号化アルゴリズム
OceanBaseデータベースは現段階で、国際的に主流の暗号化アルゴリズムであるAESをサポートしています。同時に、中国の標準暗号アルゴリズムであるSM4もサポートしています。
アルゴリズム |
キー長 |
モード |
|---|---|---|
| AES | 128 bits 192 bits 256 bits | ecb、gcm |
| SM4 | 128 bits | cbc、gcm |