あるヘルスケア企業のセキュリティアーキテクトが、患者の健康情報(PHI)をAmazon DynamoDBに保存する際の暗号化方式を設計しています。以下の要件があります。 ・1レコードあたり最大500KBのデータを保存する ・KMSカスタマー管理キー(CMK)を使用したエンベロープ暗号化を実装する ・KMS APIスロットリングを防ぐためデータキーをキャッシュして再利用する ・Java、Python、C++の3言語で書かれたサービスが同じデータを読み書きする この要件を最も効率的かつ標準的な方法で実装するソリューションはどれですか?
AWS Encryption SDKはエンベロープ暗号化のリファレンス実装を提供するライブラリです。KMSキーリングを設定することでCMKを使ってデータ暗号化キー(DEK)を生成・暗号化し、そのDEKでデータ本体を暗号化します。暗号化されたDEKと暗号文はSDKが生成する標準化された暗号化メッセージフォーマットにパッケージ化され、DynamoDBレコードのバイナリ属性として保存できます。 暗号化マテリアルキャッシュ(CMC)を設定すると、生成したDEKを設定した時間・回数・バイト数の上限まで再利用でき、KMS API呼び出し回数を大幅に削減できます。SDKはJava・Python・JavaScript(Node.js)・C・Goなど複数言語向けに公式提供されており、異なる言語間でのデータ読み書き互換性も保証されています。 選択肢AのKMS APIの直接呼び出し手動実装はエンベロープ暗号化として機能しますが、キャッシュ機能・クロス言語互換・暗号アルゴリズム移行対応などSDKが提供する利点が得られず実装コストが高くなります。 選択肢CのKMS Encrypt APIによる直接暗号化はCMKで直接データを暗号化するためデータサイズが最大4KBに制限されており、500KBのPHIデータには対応不可です。またエンベロープ暗号化の要件も満たしません。 選択肢DのDynamoDB Streams + S3への移動はDynamoDBへの保存という前提要件に反する根本的に異なるアーキテクチャです。