技術ブログ

【AWS SAA対策】S3静的サイト × Ajax × 複数ドメイン問題

こちらのブログでは、AWS SAA試験対策問題にて私が間違えた問題を備忘録として解説しています。
それでは早速問題を見ていきましょう。

問題

あなたはソリューションアーキテクトとして、Amazon S3バケットを利用して、複数ドメインを利用した静的ウェブサイトを構築しています。ブラウザでAjax通信を行って、Webページを生成したドメイン以外へのHTTPリクエストを実施することが要件となっています。しかしながら、そのまま実装すると、悪意を持った第三者からの攻撃を受けるリスクが高くなる可能性があります。

この問題を解決するために、最小の労力で実施できる実装方法を選択してください。

選択肢

  1. Amazon S3 Transfer Accelerationの利用
  2. Amazon S3バケットのCross-Origin Resource Sharing (CORS)を有効化する。
  3. Amazon S3バケットの事前署名付きURLを利用したコンテンツ共有を実装する。
  4. AWS STSによる一時認証情報を利用する。

※これより先は回答と解説が載っているので皆さんもまずは考えてみてください。



正解

2. Amazon S3バケットのCross-Origin Resource Sharing (CORS)を有効化する。

👉 理由:

設定だけで完結(最小の労力)
Ajax によるクロスドメイン通信を安全に許可できる
追加サービス不要

問題のおさらい(SAA頻出パターン)

シナリオ

  • Amazon S3 バケットで 静的Webサイト をホスティング
  • 複数ドメインを使用
  • ブラウザから Ajax通信で別ドメインへHTTPリクエスト
  • そのまま実装すると セキュリティリスクが高い

問題の本質

ブラウザには 同一生成元ポリシー(Same-Origin Policy) が存在します。

制限内容
スキーム / ドメイン / ポートが異なると Ajax 通信不可

👉 これを無理に回避すると
悪意ある第三者からの不正リクエストを許す危険性 が発生

全体構成図(CORS未設定の場合)

[ Browser ]
    |
    | Ajax Request
    | (from site-a.com)
    v
[ S3 Bucket (site-b.com) ]
    ✖ ブロック(同一生成元ポリシー)

解決策:S3 CORS を有効化する

CORSとは?

「どのドメインからのブラウザリクエストを許可するか」
をサーバー(S3)側で明示的に定義する仕組み

正解構成図(CORS有効化)

[ Browser ]
    |
    | Ajax Request
    | Origin: https://site-a.com
    v
[ S3 Bucket ]
    |
    | CORS Check
    | - AllowedOrigins に一致
    v
[ Response OK ]

👉 許可したドメインだけ通信可能
👉 第三者ドメインは自動的に遮断

S3 CORS 設定例

[
  {
    "AllowedOrigins": [
      "https://site-a.com",
      "https://site-b.com"
    ],
    "AllowedMethods": [
      "GET"
    ],
    "AllowedHeaders": [
      "*"
    ],
    "MaxAgeSeconds": 3000
  }
]

設計ポイント

項目理由
AllowedOriginsを限定セキュリティ確保
* を使わない試験で減点されやすい
GETのみ許可静的サイト用途に最適

不正解選択肢の間違いポイント(試験対策)

❌ Amazon S3 Transfer Acceleration

何をするサービス?

  • 長距離・大容量ファイル転送の高速化

なぜ不正解?

  • Ajax・クロスドメイン問題とは無関係

❌ 事前署名付きURL

用途

  • 一定時間だけオブジェクトを共有

なぜ不正解?

  • クロスオリジン制御ではない
  • 毎回URL生成が必要

❌ AWS STS 一時認証情報

用途

  • IAMベースの認可制御

なぜ不正解?

  • 静的サイト + ブラウザAjaxには過剰
  • 実装コストが高い

SAAでの即答パターン

「S3 静的サイト × Ajax × 別ドメイン」
CORS

「最小の労力でセキュアに」
設定だけで完結する選択肢

まとめ(暗記用)

  • ブラウザ制約 → 同一生成元ポリシー
  • 安全な回避 → CORS
  • S3 静的サイト → S3 CORS
  • 最小の労力 → 追加サービス不要

ここまで読んでいただき、ありがとうございます。もしこの記事の技術や考え方に少しでも興味を持っていただけたら、ネクストのエンジニアと気軽に話してみませんか。

  • 選考ではありません
  • 履歴書不要
  • 技術の話が中心
  • 所要時間30分程度
  • オンラインOK

エンジニアと話してみる