ApsaraDB RDS for MySQL は、ディスク暗号化、透過的データ暗号化(TDE)、列レベルの暗号化の 3 種類の補完的な暗号化方式をサポートしており、それぞれがスタックの異なるレイヤーでデータを保護します。本ページでは、各方式がどのような脅威に対して防御するか、パフォーマンスへの影響、および適用タイミングについて説明します。
データベース暗号化の仕組み
暗号化は、アクセスの制御を置き換えるものではありません。代わりに、アクセス制御が失敗した場合(たとえば、管理者アカウントが侵害された場合や、攻撃者がデータベースファイルをディスクから直接コピーした場合など)に発生する被害を軽減します。
3 種類の方式は、システム内の異なるポイントでデータを保護します:
ディスク暗号化 は、サービスとしてのインフラストラクチャ(IaaS)レイヤーでデータを保護し、物理ディスク上のデータをセキュアにします。
TDE は、Platform as a Service(PaaS)レイヤーでデータを保護し、ファイルシステムに書き込む前にデータを暗号化します。
列レベルの暗号化(Always-Confidential Database 機能の Basic Edition)は、データベースとクライアント間の通信中のデータを保護し、クエリ結果を暗号文の形式で配信します。
以下の図は、各方式が対応する攻撃経路を示しています。

攻撃タイプとカバー範囲
データベースシステムを標的とする攻撃は、以下の 8 カテゴリに分類されます:
| 攻撃タイプ | 説明 | 一般的な手法 |
|---|---|---|
| 管理者への攻撃 | システム管理者を標的にした攻撃です。データベース管理者(DBA)はデータにアクセスしたり構成を変更したりできます。PaaS 管理者は OS レベルのファイルにアクセスできます。IaaS 管理者は物理ディスクにアクセスできます。 | OS の脆弱性、アカウント情報の漏洩、誤ったシステム構成 |
| ユーザーへの攻撃 | データベースへのアクセス権を持つエンドユーザを標的にし、SQL インジェクションを用いて特権を昇格させます。 | アカウント情報の漏洩、論理的データ侵害 |
| 攻撃アプリケーション | データベース自体よりも攻撃対象領域が広いインターネットに公開されたアプリケーションサーバを標的にします。 | アプリケーションおよび OS の脆弱性 |
| ネットワークへの攻撃 | アプリケーションとデータベース間のトラフィックを傍受します。バイパス手法により検出が困難になります。 | ネットワークのリスニングおよびトラフィック傍受 |
| データベースのバイパス | PaaS 運用担当者がデータベースのディスクからデータファイルまたはバックアップファイルを直接コピーします。 | 物理的データ侵害 |
| OS のバイパス | IaaS 運用担当者がローカルまたはクラウド上のディスクからデータを直接コピーします。 | 増加する攻撃 |
| Exploit Database | データベースシステムのコードバグを悪用して、データに直接または間接的にアクセスします。 | データベースおよび OS の脆弱性 |
| 対象データコピー | 本番環境のデータをミラーしている開発・テスト用データベースを標的にしますが、これらの環境には同等のセキュリティ対策が施されていないことが一般的です。 | 上記のいずれか |
暗号化方式の選択
各方式は、上記の攻撃タイプのうち特定のサブセットに対して防御します。下表は、適切な方式(あるいは複数方式の組み合わせ)を選択するための主要な評価項目をまとめています。
| ディスク暗号化 | TDE | 列レベルの暗号化(Basic Edition) | |
|---|---|---|---|
| 対応する攻撃タイプ | OS のバイパス、管理者への攻撃(IaaS) | データベースのバイパス、OS のバイパス、管理者への攻撃(PaaS および IaaS) | ユーザーへの攻撃、アプリケーションへの攻撃、管理者への攻撃(DBA[1])、ネットワークへの攻撃、データコピーへの攻撃 |
| DBA の可視性 | 可視 | 可視 | 非表示 |
| PaaS 運用および保守の可視化 | 可視 | 非表示 | 可視[1] |
| IaaS 運用・保守の可視化 | 非表示 | 非表示 | 可視[1] |
| 暗号化の粒度 | インスタンス | テーブルおよびデータベース | 列 |
| アプリケーションの変更 | なし | なし | JDBC を EncJDBC に置き換え(コード変更不要) |
| 通常時のパフォーマンス損失 | ごくわずか~なし | 5%未満 | 7%未満 |
| 高負荷時のパフォーマンス損失 | ごくわずか | 最大 20% | 最大 21% |
| 詳細については | ECS ディスク暗号化の概要 | TDE の設定 | カラム暗号化の概要 |
[1] Basic Edition では、PaaS および IaaS の運用担当者がプレーンテキストのデータにアクセスすることを防止できません。これらのレイヤーに対する防御を実現するには、信頼できるハードウェア技術と併用可能な Always-Confidential Database 機能のハードウェア強化版をご利用ください。
各方式の動作原理
ディスク暗号化
ディスク暗号化は IaaS レイヤーで動作します。Elastic Compute Service(ECS)のシステムディスクまたはデータディスクを作成する際に有効化するか、インスタンス作成後にデータディスクに追加できます。有効化後、ECS インスタンスをホストするディスク上のすべてのデータが自動的に暗号化され、鍵管理インフラストラクチャは不要です。
主な特徴: データは IaaS 運用担当者(物理プロセスエンジニア)には非表示ですが、DBA および PaaS 管理者は引き続きプレーンテキストのデータにアクセスできます。
パフォーマンス: 影響はごくわずかであり、多くの場合検出できません。
透過的データ暗号化(TDE)
TDE は PaaS レイヤーで動作します。データベースエンジンが、ファイルシステムに書き込む前にメモリ上のデータを暗号化し、読み込み時に復号します。暗号化および復号は透過的に行われるため、アプリケーションの変更は不要です。
主な特徴: データは IaaS および PaaS の運用担当者には非表示ですが、DBA は引き続きプレーンテキストのデータにアクセスできます。
パフォーマンス: パフォーマンス損失は、機密テーブルのサイズとデータベースキャッシュのサイズの相対関係によって異なります:
テーブルがキャッシュに収まる場合、パフォーマンス損失は無視できます。
テーブルがキャッシュより大幅に大きい場合、損失は顕著になる可能性があります。
ほとんどのワークロードでは、損失は 5%未満に留まります。極端に高負荷な状況では、最大 20%に達する可能性があります。
列レベルの暗号化
列レベルの暗号化(Always-Confidential Database 機能の Basic Edition)は、データベースカーネルレイヤーで動作します。データベースがクエリ結果をクライアントに送信する前に、そのデータを暗号化します。クライアントは必要な鍵を使用して結果を復号します。これにより、データ所有者とデータ管理者が分離されます:データベースを管理する者が、その中に格納されるデータを閲覧できないようになります。
主な特徴: データは DBA には非表示ですが、ハードウェア強化版へアップグレードしない限り、PaaS および IaaS の運用担当者はストレージレベルでプレーンテキストのデータにアクセス可能です。
必要なアプリケーション変更: Java Database Connectivity(JDBC)ドライバーを EncJDBC に置き換えます。ドライバーの交換以外のコード変更は不要です。
パフォーマンス: パフォーマンス損失は、クエリ結果に含まれる機密データの量に依存し、テーブルやデータベースのサイズには依存しません:
1 行のクエリ:損失はごくわずか
100 万行の暗号化データのクエリ:損失は顕著
ほとんどのワークロードでは、損失は 7%未満に留まります。極端に高負荷な状況では、最大 21%に達する可能性があります。
技術アーキテクチャ
以下の表は、3 種類の方式のアーキテクチャ上の違いを示しています。
| ディスク暗号化 | TDE | 列レベルの暗号化 | |
|---|---|---|---|
| 有効範囲 | オペレーティングシステム | データベースカーネル | データベースカーネル |
| 暗号化範囲 | ホストおよび ECS インスタンス | データベースインスタンス | データベースインスタンス |
| 暗号化の粒度 | インスタンス | データベースおよびテーブル | 列 |
| アプリケーション認識 | 透過的 | 透過的 | JDBC を EncJDBC に置き換え |
各方式の適用タイミング
IaaS レイヤーのコンプライアンス要件を満たす必要がある場合、または物理メディアが盗難・不正コピーされるリスクに対処する場合は、ディスク暗号化をご利用ください。
PaaS および IaaS の運用担当者(OS 管理者など)がデータベースファイルの内容にアクセスすることを防止したいが、アプリケーションの変更は行いたくない場合は、TDE をご利用ください。
DBA が機密データを閲覧することを防止したい場合、またはデータベースとアプリケーション間の通信中のデータを保護したい場合は、列レベルの暗号化をご利用ください。
これらの方式は相互に補完的です。厳格なセキュリティ要件を有する本番環境では、3 種類を併用することが推奨されます。