RDSをKMSで暗号化する目的
RDS を KMS で暗号化するのは一般的ですが、そもそも暗号化をする目的をあんまり気にしたことがなかったので、自分なりに調査した結果をまとめました。
RDS で KMS が守る脅威
KMS で防げるもの
RDS 環境で KMS 暗号化を使用することで、データベース固有の脅威から重要なデータを保護できます。
物理的脅威
データセンターからのハードディスク盗難、サーバーへの物理的侵入、スナップショット、自動バックアップファイルなどの物理的な漏洩からデータを保護することができます。
クロスアカウントでの漏洩
開発環境へ本番環境のスナップショットを共有したとしてもKMSキーを共有しなければ、復元することができず、データベースに含まれる個人情報などの漏洩を防ぐことができます。
KMS で防げないもの
KMS は RDS のデータを暗号化するものなので、KMS で暗号化したから全ての脆弱性を防ぐことができるということではありません。
内部脅威
データベース管理者や特権ユーザーによる機密データの不正アクセスなど、直接的に保護できるわけではありませんが、適切に権限を分離することで権限の付与・剥奪をスムーズに行うことができるなどのメリットはあります。これは監査の文脈としては有効でセキュリティレベルを上げるための基盤構築に役立ちます。
アプリケーションレベルの脆弱性
SQLインジェクションなどアプリケーションレベルで発生する脆弱性は正規のアプリケーションを通過して、データベースへアクセスするため、データの漏洩を防ぐことはできません。アプリケーションレベルで対策を行う必要があります。
設定ミスによる誤公開
セキュリティグループ設定ミス、パブリックアクセス許可の誤設定でデータベース自体がパブリックに公開されてしまうと誰でも接続が可能になってしまうので、データーベース自体のパスワードのローテーションや、VPN・踏み台経由での接続などの対策を行う必要があります。
認証認可の突破
管理者アカウントの乗っ取りなどの認証情報が流出した場合、正規の権限でデータベースへアクセスするため、データの漏洩を防ぐことはできません。
そもそも KMS とは?
AWS KMS(Key Management Service)は、暗号化キーを安全に管理するための AWS が提供するマネージド型のキー管理サービスです。データの暗号化や復号化に必要な暗号化キーの作成・保存・管理・監査を自動化し、セキュアな暗号化基盤を提供します。
KMS の基本概念
KMS は、暗号化の複雑さを抽象化し、開発者やシステム管理者が簡単にデータ暗号化を実装できるよう設計されています。従来、暗号化キーの管理は以下のような課題がありました。
- キーの安全な生成と保存
- アクセス権限の細かな制御
- キーローテーションの自動化
- 使用履歴の監査
KMS は、これらの課題をマネージドサービスとして解決し、高いセキュリティレベルを保ちながら運用コストを削減します。
3種類の KMSキー
Customer Managed Keys(顧客管理キー)
完全な制御権を持つキーで、キーのライフサイクル全体をユーザーが管理します。
柔軟な設定が可能ですが、キーポリシーの設定、ローテーション、アクセス権限の設定などの管理負荷がかかります。
項目 | 内容 |
---|---|
制御権 | ✅ キーポリシーとアクセス制御を自由に設定 |
ローテーション | ✅ 自動ローテーションの有効/無効を選択可能 |
共有 | ✅ 他の AWS アカウントとの共有が可能 |
料金 | ❌ 月額料金が発生(約$1/月 + 使用料) |
AWS Managed Keys(AWS 管理キー)
AWS が管理するキーで、特定の AWS サービス専用に作成されます。
Customer Managed Keysと比較して管理は楽ですが、キーポリシーの設定ができなかったり、他アカウントとの共有ができないなどの制約があります。
項目 | 内容 |
---|---|
料金 | ✅ 月額料金は無料(使用料のみ) |
ローテーション | ✅ 自動で年 1 回ローテーション |
監査 | ✅ キー使用状況を CloudTrail で確認可能 |
制御 | ❌ キーポリシーの変更不可 |
共有 | ❌ 他アカウントとの共有不可 |
AWS Owned Keys(AWS 所有キー)
AWS 完全所有のキーで、ユーザーからは見えません。
項目 | 内容 |
---|---|
料金 | ✅ 完全無料 |
暗号化 | ✅ 自動的にデフォルト暗号化に使用 |
監査 | ❌ 存在確認・使用状況の監査不可 |
制御 | ❌ 制御権は一切なし |
RDS での KMS 暗号化範囲
RDS で KMS 暗号化を有効にすると、以下のデータがすべて暗号化されます。
- データベースファイル(テーブルデータ)
- 自動バックアップ
- DB スナップショット
- リードレプリカ
- ログファイル(エラーログ、スロークエリログ等)
参考
Discussion