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

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

正解 A問題
要復習(もう一度解きたい問題) 1 2 3 4
合格に向けて、もっと深く学習する
豊富な問題と詳細なAWSサービス解説を、24時間無料でお試しいただけます
プレミアム会員機能を無料で試す ❯
問題文と選択肢
あるアプリケーションは、Amazon S3 バケットをストレージとして利用しており、REST API 経由でオブジェクトのアップロード・取得を行っています。セキュリティポリシーにより、S3 バケットへのすべてのオブジェクトアップロードは、Amazon S3 マネージドキー(SSE-S3)によるサーバーサイド暗号化を必須としています。
暗号化ヘッダーが付与されていないアップロードリクエストを確実に拒否するには、どのような対策を実施すべきですか?
  • PutObject リクエストのヘッダーに `x-amz-server-side-encryption: AES256` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
  • PutObject リクエストのヘッダーに `x-amz-server-side-encryption: aws:kms` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
  • S3 バケットのデフォルト暗号化を SSE-S3 に設定するだけで、バケットポリシーによる制御は不要とする
  • PutObject リクエストの HTTP ボディに暗号化キー情報を埋め込み、このキー情報が含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
解説 頻出度★★★★
この問題は、「SSE-S3 × ヘッダーなしのアップロードを拒否する」という要件で、正しいヘッダー値(AES256)バケットポリシーによる Denyの 2 点セットを選べるかがポイント
正解

A. PutObject リクエストのヘッダーに `x-amz-server-side-encryption: AES256` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する

SSE-S3 を要求するリクエストヘッダーは x-amz-server-side-encryption: AES256 であり、値 AES256 が Amazon S3 マネージドキーによる暗号化を示す。

さらにバケットポリシーで s3:x-amz-server-side-encryption 条件キーを使い、ヘッダーが無い(または値が AES256 でない)PutObject を Deny すれば、暗号化指定のないアップロードはリクエスト自体が 403 で拒否される。

「ヘッダーが付与されていないリクエストを確実に拒否する」という要件を満たす唯一の選択肢。

B. PutObject リクエストのヘッダーに `x-amz-server-side-encryption: aws:kms` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する

ヘッダー値 aws:kmsSSE-KMS(AWS KMS マネージドキー)を指定する値であり、SSE-S3 ではない。

強制する仕組み(バケットポリシーでの Deny)自体は正しいが、要件は「Amazon S3 マネージドキー(SSE-S3)による暗号化を必須とする」ことなので、強制する暗号化方式そのものが要件と違う

C. S3 バケットのデフォルト暗号化を SSE-S3 に設定するだけで、バケットポリシーによる制御は不要とする

バケットのデフォルト暗号化は、暗号化ヘッダーが指定されなかった場合に S3 側が自動で暗号化を適用する機能であり、リクエストを拒否する機能ではない

結果としてオブジェクトは暗号化されるものの、「暗号化ヘッダーが付与されていないアップロードリクエストを確実に拒否する」という設問の要件(拒否=リクエストの失敗)は満たさない。監査上「ヘッダーを付けないクライアントを検出・遮断したい」場合はポリシーが必須。

D. PutObject リクエストの HTTP ボディに暗号化キー情報を埋め込み、このキー情報が含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する

SSE-S3 はキーの生成・管理をすべて S3 が行う方式であり、クライアントが暗号化キーをリクエストに乗せる仕組みは存在しない。

キーをリクエストで渡すのは SSE-C(顧客提供キー)の考え方で、しかも SSE-C でもキーは HTTP ボディではなく x-amz-server-side-encryption-customer-key ヘッダーで渡す。仕様として成立しない選択肢。

これだけ覚える(記憶フック)
SSE-S3 は AES256、SSE-KMS は aws:kms。「拒否」を求められたらデフォルト暗号化ではなくバケットポリシーの Deny
正解への思考ルート 問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。
要件 判断ポイント
暗号化方式は SSE-S3(Amazon S3 マネージドキー)と指定 SSE-S3 のヘッダー値は AES256aws:kms は SSE-KMS を指す別方式
→選択肢(B)を消す
暗号化ヘッダーが無いアップロードを「確実に拒否」したい 拒否できるのは バケットポリシーの Deny のみ。デフォルト暗号化は拒否ではなく自動付与
→選択肢(C)を消す
暗号化キーの扱い SSE-S3 はキーを S3 が管理する。クライアントがキーをボディに埋め込む仕様は存在しない
→選択肢(D)を消す
REST API 経由のアップロードを制御する リクエストヘッダー x-amz-server-side-encryption: AES256s3:x-amz-server-side-encryption 条件キーの Deny がセット
→選択肢(A)が正解
ひっかけポイント
  • 「暗号化されていればよい」なら選択肢 C でも足りるが、設問は「ヘッダーが無いリクエストを拒否する」と書いている。デフォルト暗号化は黙って暗号化するだけで、拒否はしない
  • 選択肢 B は仕組み(バケットポリシー)が正しいので選びたくなるが、aws:kms は SSE-KMS の値。要件の SSE-S3 とヘッダー値を取り違えさせる典型パターン
  • AES256 = SSE-S3 / aws:kms = SSE-KMS の対応は DVA で頻出。「AES256 なのに KMS のことだ」と勘違いしないこと
  • 選択肢 D の「HTTP ボディにキーを埋め込む」は、SSE-C(キーはヘッダーで渡す)とも異なる実在しない方式。もっともらしい語(暗号化キー情報)に惑わされない
出題バリエーション 同じ知識が本番では条件を変えて出題されます。
問題文がこう変わったら 正解はこう変わる
AWS KMS のカスタマー管理キーで暗号化を必須にしたい」 ヘッダーは x-amz-server-side-encryption: aws:kms(+ x-amz-server-side-encryption-aws-kms-key-id)。ポリシーの条件値も aws:kms に変わる。
HTTPS 以外のアクセスを拒否したい」 バケットポリシーで aws:SecureTransport が false なら Deny が正解軸に。
「アップロード時に暗号化を意識させずにすべて暗号化したい」 バケットのデフォルト暗号化で十分(現在の S3 は既定で SSE-S3 が適用される)。
キーの管理を自社で行い、S3 には保持させたくない」 SSE-C(キーをリクエストヘッダーで提供)や、クライアントサイド暗号化が正解軸に。
関連サービスの解説 Amazon Simple Storage Service (Amazon S3)
AWS Identity and Access Management (AWS IAM)
+ 質問 / コメント
解答・解説に疑問がある場合や、よりよい解説がある場合など、お気軽にコメントください。ただし、短文コメントは表示されません。また、中傷などコメントの内容によっては、会員機能を停止させて頂きます。教え学び合える場になれば嬉しいです。(コメント投稿にはログインが必要です)
正答率 61%
No.11 解説
あるアプリケーションは、Amazon S3 バケットをストレージとして利用しており、REST API 経由でオブジェクトのアップロード・取得を行っています。セキュリティポリシーにより、S3 バケットへのすべてのオブジェクトアップロードは、Amazon S3 マネージドキー(SSE-S3)によるサーバーサイド暗号化を必須としています。
暗号化ヘッダーが付与されていないアップロードリクエストを確実に拒否するには、どのような対策を実施すべきですか?
  • PutObject リクエストのヘッダーに `x-amz-server-side-encryption: AES256` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
  • PutObject リクエストのヘッダーに `x-amz-server-side-encryption: aws:kms` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
  • S3 バケットのデフォルト暗号化を SSE-S3 に設定するだけで、バケットポリシーによる制御は不要とする
  • PutObject リクエストの HTTP ボディに暗号化キー情報を埋め込み、このキー情報が含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する

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