AWSでデータベースを構築する際、RDSやAuroraのストレージ暗号化(KMS利用)はもはや標準的な構成です。
しかし、「暗号化を有効にすると、どのタイミングでKMSへのリクエストが発生するのか?」「SQLを実行するたびにリクエストが発生してコストが嵩むのではないか?」という疑問を持つ方も少なくありません。
お客様からこのようなお問い合わせがあったので目を皿にしてAWSドキュメントを読み込みましたが、この件について明示されている文章を全く見つけられませんでした。
そこで本記事では、CloudTrailを用いた実機の検証結果をもとに、KMSリクエストが発生するタイミングとその具体的なコストを算出・解説します。
1. RDS/Aurora 暗号化の仕組み:エンベロープ暗号化
Amazon RDS/Auroraのストレージ暗号化には、「エンベロープ暗号化」という手法が採用されています。
- データキー (DK): 実際のデータを暗号化するための鍵。
- KMSキー (CMK): データキー自体を暗号化(ラップ)して保護するためのマスターキー。
データキー・キャッシュによる最適化
インスタンスの起動時、RDSはKMSを呼び出して暗号化されたデータキーを一度だけ復号します。
復号された「平文のデータキー」はセキュアなメモリ上にキャッシュされます。
SQL(SELECTやINSERTなど)が実行されるたびにストレージへの読み書きが発生しますが、その際はメモリ上のキャッシュが再利用されるため、クエリごとにKMSへリクエストが飛ぶことはありません。
これにより、高いパフォーマンスと低コストを両立しています。
2. 検証環境と手法
実際にどのようなリクエストが飛んでいるのか、以下の構成で約35日間のログを測定しました。
- DBエンジン: Aurora Serverless v2 (0.5 ACU)
- 暗号化: カスタマーマネージドキー (KMS) を使用
- ログ収集: CloudTrail を使用してKMS APIの呼び出しをトラッキング
3. 検証結果:KMSイベントの内訳
35日間の検証期間中に発生した総イベント数は 16,947件 でした。
その内訳を詳しく見ていきましょう。
KMS API呼び出しの詳細
全イベントの 99.98% がAuroraのストレージに関連する操作でした。
| イベント名 | 件数 | 発生タイミング・用途 |
|---|---|---|
| Encrypt | 16,924件 | ストレージへの書き込み時に継続的に発生 |
| DescribeKey | 8件 | クラスター操作時のキー情報確認 |
| CreateGrant | 5件 | クラスター/インスタンス作成時の権限付与 |
| GenerateDataKey… | 2件 | 初期セットアップ時のデータキー生成 |
| Decrypt | 1件 | インスタンス起動時のデータキー復号 |
呼び出し元の分析
リクエストの 99.9% は storage.rds.amazonaws.com (RDSストレージサービス)からの自動呼び出しでした。
今回はアプリからの接続がない状態での検証でしたが、Encrypt 操作が継続的に発生しています。
これは、Auroraのバックグラウンド処理(WALログの書き込みやストレージ最適化、メタデータ更新など)に伴う自動的な暗号化処理であると推測されます。
4. 運用コストの試算
検証結果から得られた「1日あたり平均 約484件」のリクエスト数をもとに、月間のランニングコストを算出します。
算出条件
- リクエスト数: 500件/日 × 31日 = 15,500リクエスト
- 暗号化方式: 対称キー暗号化(SYMMETRIC_DEFAULT)
- 料金単価: 0.03 USD / 10,000 リクエスト(東京リージョン)
- AWS KMSキーあたり 1.00 USD
試算結果
15,500リクエスト * 0.03 USD / 10,000リクエスト + 1.00 USD = 1.0465 USD
料金としては 1.0465 USD 、日本円に換算すると 月額 約162円程度 です(1 USD = 155円換算時)。
5. まとめ:ストレージ暗号化は「必須」の選択
今回の検証を通じて、以下の事実が明らかになりました。
- バックグラウンドで継続的に発生: アプリケーションの利用に関わらず、ストレージサービスが自動でKMSを利用して暗号化を維持しています。
- SQL実行時のオーバーヘッドなし: データキーはメモリにキャッシュされるため、通常のクエリ実行によってKMSリクエストが増えることはありません。
- コストは極めて低い: 月間数セントレベルの費用で強力なセキュリティを担保できます。
結論として、Aurora/RDSのストレージ暗号化は、パフォーマンスやコストへの影響を最小限に抑えつつ、高いセキュリティを確保できる非常に優れた仕組みです。
特別な理由がない限り、常に有効化することを強く推奨します。