AWS認定資格 WEB問題集&徹底解説
デベロッパー–アソシエイト
問題文と選択肢
暗号化ヘッダーが付与されていないアップロードリクエストを確実に拒否するには、どのような対策を実施すべきですか?
- PutObject リクエストのヘッダーに `x-amz-server-side-encryption: AES256` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
- PutObject リクエストのヘッダーに `x-amz-server-side-encryption: aws:kms` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
- S3 バケットのデフォルト暗号化を SSE-S3 に設定するだけで、バケットポリシーによる制御は不要とする
- PutObject リクエストの HTTP ボディに暗号化キー情報を埋め込み、このキー情報が含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
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:kms は SSE-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 のヘッダー値は AES256。aws:kms は SSE-KMS を指す別方式 →選択肢(B)を消す |
| 暗号化ヘッダーが無いアップロードを「確実に拒否」したい | 拒否できるのは バケットポリシーの Deny のみ。デフォルト暗号化は拒否ではなく自動付与 →選択肢(C)を消す |
| 暗号化キーの扱い | SSE-S3 はキーを S3 が管理する。クライアントがキーをボディに埋め込む仕様は存在しない →選択肢(D)を消す |
| REST API 経由のアップロードを制御する | リクエストヘッダー x-amz-server-side-encryption: AES256 + s3: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(キーをリクエストヘッダーで提供)や、クライアントサイド暗号化が正解軸に。 |
暗号化ヘッダーが付与されていないアップロードリクエストを確実に拒否するには、どのような対策を実施すべきですか?
- PutObject リクエストのヘッダーに `x-amz-server-side-encryption: AES256` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
- PutObject リクエストのヘッダーに `x-amz-server-side-encryption: aws:kms` を設定し、このヘッダーが含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する
- S3 バケットのデフォルト暗号化を SSE-S3 に設定するだけで、バケットポリシーによる制御は不要とする
- PutObject リクエストの HTTP ボディに暗号化キー情報を埋め込み、このキー情報が含まれていないアップロードリクエストを拒否するバケットポリシーを S3 バケットに適用する