無限ノック › DVA 練習問題一覧 › 問題
DVAセキュリティ

あるLambda関数が、10MBの設定ファイルをAWS KMSを使って暗号化してS3に保存する必要があります。KMSの制約(1リクエストあたり最大4KBのデータを直接暗号化)を考慮した場合、最も適切な実装はどれですか?

A
KMSのEncrypt APIを直接呼び出してファイル全体を暗号化し、暗号化済みデータをS3バケットに格納する
KMSのEncrypt APIは1リクエストにつき最大4KBのデータしか受け付けないため、10MBのファイルを直接暗号化しようとするとAPIエラーが発生します。大容量データの暗号化にはKMSを直接使わずエンベロープ暗号化が必要です。
B
KMSのGenerateDataKey APIでデータキーを取得してファイルをローカルで暗号化し、暗号化済みデータキーとファイルをS3に保存する
✓ 正解
エンベロープ暗号化の標準的な実装です。GenerateDataKey APIで取得した平文データキーでローカル暗号化し、暗号化済みデータキーとファイルをS3に保存することで、KMSの4KB制限を回避しつつKMS管理下での安全な暗号化を実現します。
C
ファイルを4KB以下のチャンクに分割し、各チャンクをKMS Encrypt APIで個別に暗号化した後、まとめてS3に保存する
10MBを4KB以下に分割すると約2,500チャンク以上になり、それぞれKMS APIを呼び出すとコストが膨大になります。またKMSのAPIリクエストスロットリングに抵触するリスクが高く、実用的な実装ではありません。
D
S3のSSE-S3(AWSマネージドキーによるサーバーサイド暗号化)を設定し、ファイルをS3にアップロードしてS3側で暗号化を管理する
SSE-S3はS3がマネージドキーで管理する暗号化であり、AWS KMSキーによる暗号化ではありません。KMSキーによる暗号化制御・監査ログ(CloudTrail)・きめ細かなアクセス制御が必要な場合はSSE-KMSを使用する必要があります。

解説

KMSが直接暗号化できるデータは4KBまでです。大きなデータには「エンベロープ暗号化」を使います。GenerateDataKey APIを呼ぶとKMSキーで保護された平文データキーと暗号化済みデータキーの2つが返されます。平文キーでデータをローカル暗号化後、平文キーをメモリから削除し、暗号化済みデータキーとデータを一緒に保存します。復号時はKMSへのアクセスが1回で済むため効率的です。 選択肢AのKMS Encrypt APIを直接呼び出す方法は、10MBのファイルが4KB上限を超えるため直接暗号化できません。 選択肢CのファイルをKMSで個別に暗号化する方法はKMS API呼び出し回数がファイルサイズに比例して膨大になり、コスト増大・スロットリングのリスクがあります。 選択肢DのS3のSSE-S3を使用する方法はKMSではなくS3マネージドキーを使うため、KMSによる暗号化という要件を満たしません。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る