あるチームは KMS でデータキーを使ってアプリケーションデータを暗号化しています。大量のデータを効率的に暗号化するために「エンベロープ暗号化」を採用しました。このアーキテクチャで KMS に送信するデータとして正しいものはどれですか?
- A. CMK(カスタマーマネージドキー)を直接ダウンロードしてローカルで暗号化する
- B. KMS に GenerateDataKey を呼び出して平文データキーと暗号化データキーを取得し、平文キーでデータをローカル暗号化後に平文キーをメモリから破棄する
- C. 平文のデータキーを KMS に送信して暗号化してもらい、暗号化済みデータキーをデータと一緒に保存する
- D. 暗号化したい全データを直接 KMS に送信し、KMS が暗号化して返す
解答と解説を見る
正解: B
エンベロープ暗号化の正しいフローは「GenerateDataKey で平文データキー+暗号化データキーを受け取る → 平文データキーでデータをローカル暗号化 → 平文データキーをメモリから削除 → 暗号化データキーと暗号化データを一緒に保存」です。大量データを KMS に通す必要がないため API コールが最小化されます。D は全データを KMS に送ると通信コストが膨大になり KMS の用途でもありません。C の「平文のデータキーを送る」操作は Encrypt API ですが、最初からデータキーを手元で生成して送る設計は通常行いません。A は CMK は KMS 外に出せない仕組みです。
📚 関連サービスの解説: AWS KMS