SJ blog
ドリル一覧

T1-Q03: SSE-C強制はStringNotEqualsではなくNull条件で未指定を潰す

S3 PutObjectでSSE-Cを必須化するSCP条件を、ヘッダー未指定ケースと条件キーの違いから深掘りする。

AWS SCS-C03 S3 SSE-C SCP

T1-Q03: SSE-C強制はStringNotEqualsではなくNull条件で未指定を潰す

対象誤答: T1 Q03 S3 SSE C NULL CONDITION

あなたの選択と正答

観点内容
あなたの選択”Condition”: { “StringNotEquals”: { “s3:x-amz-server-side-encryption”: “aws:kms” } }
正答”Condition”: { “Null”: { “s3:x-amz-server-side-encryption-customer-algorithm”: “true” } }
誤答の引力SSEという大きい分類で見てしまい、SSE-KMS用の条件キーに寄った。問われているのはSSE-Cのヘッダーがリクエストに存在するか。
判断軸SSE-Cは顧客提供キーなので、条件キーはcustomer-algorithm側を見る。未指定アップロードを拒否するにはStringNotEqualsよりNullが刺さる。

この問題の芯

T1-Q03 は、Organizations 配下の複数アカウントで、S3 の PutObject に SSE-C を必須化する SCP 条件を選ぶ問題。あなたは SSE-KMS を示す s3:x-amz-server-side-encryption = aws:kms 系に寄った。正解は s3:x-amz-server-side-encryption-customer-algorithmNull 条件。

ここで落とし穴になる条件キー

S3のサーバー側暗号化は名前が似ている。

方式キーの所在試験で見る語
SSE-S3S3管理AES256 / S3 managed
SSE-KMSKMS管理aws:kms / KMS key / kms:Decrypt
SSE-C顧客提供customer-provided key / customer-algorithm

この問題は「カスタマー提供のキー」と明記している。つまり条件キーは通常の s3:x-amz-server-side-encryption ではなく、SSE-C用の s3:x-amz-server-side-encryption-customer-algorithm

なぜStringNotEqualsだけでは弱いか

StringNotEquals は「ヘッダーがあるが値が違う」ケースには効く。しかし試験で狙われていたのは、そもそも SSE-C ヘッダーを付けずに PutObject するケース。

未指定を落とすなら Null

{
  "Effect": "Deny",
  "Action": "s3:PutObject",
  "Resource": "arn:aws:s3:::bucket/*",
  "Condition": {
    "Null": {
      "s3:x-amz-server-side-encryption-customer-algorithm": "true"
    }
  }
}

これは「SSE-C のアルゴリズム指定ヘッダーが存在しないなら拒否」という意味になる。

次回の秒殺ルール

「SSE-C」「customer-provided key」が見えたら、まず customer-* 条件キーを見る。
「必須化」「未指定を拒否」なら Null: true を疑う。
「KMS」や aws:kms が問題文にないのに出てくる選択肢は、かなり強いひっかけ。

仕上げの一問一答

  • この問題の主語は何か: Organizations
  • 先に除外する選択肢: 問題文の主語と違うサービス責務に寄っているもの。
  • 最後に確認する語: 「最もコスト効率」「組織全体」「未指定を拒否」「監査」「自動有効化」などの制約語。

参照