データストレージ暗号化とは、データや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 |