データストレージ暗号化とは、データや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プロキシサービスを通じて管理されます。対応クラウドベンダーについては、TDEの管理およびクラウドベンダーアカウントの認可を参照してください。
暗号化を有効にすると、主鍵を使用してデータ鍵を暗号化し、暗号化されたデータ鍵の暗号文を得ます。この暗号文は内部テーブル、マクロブロックヘッダー、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 |