あるチームが100MB以上の大きなファイルをAmazon S3に暗号化して保存する必要があります。AWS KMSを使用してキー管理を行い、パフォーマンスとセキュリティを両立させたい場合、最も適切な実装はどれですか?
AWS KMSのEncrypt APIは最大4KBのデータしか処理できないため、大きなファイルの直接暗号化には使用できません。エンベロープ暗号化ではGenerateDataKeyを呼び出してDEK(データ暗号化キー)の平文と暗号化版を取得し、平文DEKでデータを暗号化します。暗号化後は平文DEKをメモリから削除し、暗号化済みDEKをデータと共に保存します。復号時はKMSでDEKを復号してからデータを復号します。これによりKMSキー(カスタマーマネージドキー)で鍵管理しつつ大容量データを効率的に扱えます。 選択肢AのKMS APIのEncrypt オペレーションを直接使用してファイル全体を暗号化することは、4KBの上限により大きなファイルに対応できません。 選択肢CのS3サーバーサイド暗号化(SSE-S3)のみの使用はAWSが管理するキーによるサーバーサイド暗号化であり、KMSによるキー管理・アクセス制御の要件を満たしません。 選択肢DのAES-128によりクライアント側で暗号化し、その鍵をKMSに平文で保存することは、AES-128がAES-256より鍵長が短くセキュリティ強度が低く、また平文キーをKMSに保存することはKMSの鍵保護モデルに反します。