AWS認定資格 WEB問題集&徹底解説

デベロッパー–アソシエイト

正解 D問題
要復習(もう一度解きたい問題) 1 2 3 4
合格に向けて、もっと深く学習する
豊富な問題と詳細なAWSサービス解説を、24時間無料でお試しいただけます
プレミアム会員機能を無料で試す ❯
問題文と選択肢
デベロッパーは、機密性の高いデータをデータベースに保存するアプリケーションに取り組んでいます。デベロッパーは、データを保護するために、エンベロープ暗号化と共に AWS Key Management Service (AWS KMS) を使用する必要があります。

これらの要件を満たすために、デベロッパーはどのようにデータ暗号化を設定すべきですか。
  • KMS キーを使用してデータを直接暗号化する。暗号化されたデータをデータベースに保存する。
  • AWS KMS が生成したデータキーを使用してデータを暗号化する。暗号化されたデータのみをデータベースに保存する。
  • AWS KMS が生成したデータキーを使用してデータを暗号化する。暗号化されたデータとデータキーの ID をデータベースに保存する。
  • AWS KMS が生成したデータキーを使用してデータを暗号化する。暗号化されたデータと暗号化されたデータキーをデータベースに保存する。
解説 頻出度★★★★
この問題は、「エンベロープ暗号化 × 復号できること」の要件で、データキーで暗号化し、データと一緒に「暗号化されたデータキー」を保存するという手順を理解しているかがポイント

A. KMS キーを使用してデータを直接暗号化する。暗号化されたデータをデータベースに保存する。

KMS キーで直接データを暗号化する方式は、AWS KMS の Encrypt API に 4KB(4096 バイト)というサイズ上限があるため、大きなデータには使えない。
また暗号化のたびに KMS を呼び出すことになり、スループットとコストの面でも不利。
そもそも「データキーを使う」というエンベロープ暗号化の定義そのものを満たしていないため、要件から外れる。

B. AWS KMS が生成したデータキーを使用してデータを暗号化する。暗号化されたデータのみをデータベースに保存する。

データキーでデータを暗号化するところまでは正しいが、暗号化されたデータキーを保存していないのが致命的。
平文のデータキーは使用後にメモリから破棄されるため、キーを残さなければ後からデータを復号する手段が失われる
暗号化はできても復号できない構成であり、実運用に耐えない。

C. AWS KMS が生成したデータキーを使用してデータを暗号化する。暗号化されたデータとデータキーの ID をデータベースに保存する。

「データキーの ID」を保存しても、AWS KMS は生成したデータキーを保管していないため、ID を手がかりにキーを取り戻すことはできない。
AWS KMS が管理するのは KMS キー(CMK)であって、GenerateDataKey で払い出したデータキーはその場限りの存在。
結果として選択肢 B と同じく復号不能になる、もっともらしい誤答。

正解

D. AWS KMS が生成したデータキーを使用してデータを暗号化する。暗号化されたデータと暗号化されたデータキーをデータベースに保存する。

これがエンベロープ暗号化の正しい手順。GenerateDataKey で「平文データキー」と「KMS キーで暗号化されたデータキー」の 2 つを受け取り、平文キーでローカルにデータを暗号化したら平文キーはメモリから破棄する。
暗号化データと暗号化されたデータキーをセットで保存しておけば、復号時は暗号化データキーを AWS KMS の Decrypt に渡して平文キーを取り戻し、データを復号できる。
大きなデータでも 4KB 制限を受けず、KMS への呼び出しも最小限に抑えられる。

構成図

AWS KMS(KMS キー)
   │ GenerateDataKey
   ▼
平文データキー + 暗号化されたデータキー
   │ 平文キーでデータを暗号化(使用後は破棄)
   ▼
データベース ← 暗号化されたデータ + 暗号化されたデータキー を保存
これだけ覚える(記憶フック)
エンベロープ暗号化=データキーで暗号化し、暗号化されたデータキーを添えて保存。平文キーはメモリから即消す。
正解への思考ルート 問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。
要件 判断ポイント
エンベロープ暗号化を使用する 定義上、データはデータキーで暗号化し、そのデータキーを KMS キーで暗号化する二重構造になる
→選択肢(A)を消す
機密データをデータベースに保存する(サイズが大きくなり得る) KMS の直接暗号化は 4KB 上限があり、大きなデータには使えない
→選択肢(A)を消す
保存したデータを後で復号できる必要がある 平文データキーは破棄されるため、暗号化されたデータキーを一緒に保存しないと復号できない
→選択肢(B)を消す
データキーを AWS 側から取り戻せるか AWS KMS はデータキーを保管しないため、ID だけ持っていても復号には使えない
→選択肢(C)を消す、選択肢(D)が正解
ひっかけポイント
  • 選択肢 C の「データキー ID」は実在しそうで存在しない概念。KMS が保管・参照できるのは KMS キー(CMK)であって、払い出したデータキーではない
  • 選択肢 B は「暗号化されたデータだけ保存」で一見すっきり見えるが、復号手段を捨てている。暗号化の問題では「復号できるか」を必ず確認する
  • 「暗号化されたデータキーを一緒に保存する」ことにセキュリティ上の問題はない。KMS キーがなければ復号できないため、盗まれても無意味である点が理解の勘所
  • 選択肢 A は手順としては最も単純で正しく動くように見えるが、4KB 制限と「エンベロープ暗号化ではない」という 2 点で失格になる
出題バリエーション 同じ知識が本番では条件を変えて出題されます。
問題文がこう変わったら 正解はこう変わる
「暗号化するのは 4KB 未満の短い文字列で、エンベロープ暗号化の指定はない」 KMS の Encrypt API で直接暗号化する選択肢が正解になり得る。
KMS を呼ばずに大量のデータを高速に暗号化したい(KMS のリクエスト数を減らしたい)」 AWS Encryption SDK のデータキーキャッシュが正解軸に。
「復号時にどの API を呼ぶか」 暗号化されたデータキーを渡す Decrypt API(対称キーなら KMS キー ID の指定も不要)。
「S3 に保存するオブジェクトを KMS で暗号化したい」 SSE-KMS(および S3 バケットキー)を使う構成に変わり、エンベロープ暗号化は S3 が内部で実施する。
関連サービスの解説 AWS Key Management Service (AWS KMS)
+ 質問 / コメント
解答・解説に疑問がある場合や、よりよい解説がある場合など、お気軽にコメントください。ただし、短文コメントは表示されません。また、中傷などコメントの内容によっては、会員機能を停止させて頂きます。教え学び合える場になれば嬉しいです。(コメント投稿にはログインが必要です)
正答率 49%
No.3 解説
デベロッパーは、機密性の高いデータをデータベースに保存するアプリケーションに取り組んでいます。デベロッパーは、データを保護するために、エンベロープ暗号化と共に AWS Key Management Service (AWS KMS) を使用する必要があります。

これらの要件を満たすために、デベロッパーはどのようにデータ暗号化を設定すべきですか。
  • KMS キーを使用してデータを直接暗号化する。暗号化されたデータをデータベースに保存する。
  • AWS KMS が生成したデータキーを使用してデータを暗号化する。暗号化されたデータのみをデータベースに保存する。
  • AWS KMS が生成したデータキーを使用してデータを暗号化する。暗号化されたデータとデータキーの ID をデータベースに保存する。
  • AWS KMS が生成したデータキーを使用してデータを暗号化する。暗号化されたデータと暗号化されたデータキーをデータベースに保存する。

(会員限定)当問題の評価をお願いします。改善に活用します。