0Pricing
AWS Solutions Architect · レッスン

署名付き URL、署名付き Cookie、地理的制限

署名付き URL と Cookie を使ってプレミアムコンテンツへのアクセスを制限し、地理的制限で特定の国のユーザーをブロックします。

「署名付き URL、署名付き Cookie、地理的制限」はCoddyKit上の無料AWS Solutions Architectレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAWS Solutions Architect学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AWS Solutions Architectコースには全4レッスンが含まれています。

CloudFront コンテンツへのアクセス制限

デフォルトでは、CloudFront は URL を知っているすべてのビューワーにコンテンツを配信します。プレミアムコンテンツや非公開コンテンツ(動画コース、有料ソフトウェアのダウンロード、会員限定リソースなど)では、認証されたユーザーだけが取得できるようにアクセスを制限する必要があります。

CloudFront には、認証済みアクセスのための 2 つの仕組みがあります。署名付き URL(1 つの URL で特定の 1 つのオブジェクトへのアクセスを許可)と、署名付き Cookie(パスパターンに一致する複数のオブジェクトへのアクセスを一連の Cookie で許可)です。どちらも、RSA キーペアで生成された暗号学的署名を使用します。

CloudFront 署名付き URL

署名付き URL は、有効期限と、オプションでIP アドレス制限をエンコードした暗号学的署名を含む CloudFront URL です。この URL は有効期限まで、かつ許可された IP アドレスからのみ有効です(IP アドレスが指定されている場合)。有効期限が切れると、CloudFront は 403 Forbidden を返します。

署名付き URL は、1 人のユーザーに特定の 1 ファイル(生成された PDF レポートなど)へのアクセスを許可する場合、時間制限付きのダウンロードリンクを提供する場合、またはクライアントで Cookie を設定できない場合(モバイルアプリや RTMP ストリーミングなど)に適しています。

# Generate a signed URL using AWS CLI (requires a CloudFront key pair)
aws cloudfront sign \
  --url https://d1234abcdef.cloudfront.net/premium/video.mp4 \
  --key-pair-id APKA1234567890 \
  --private-key file://private-key.pem \
  --date-less-than 2026-06-21T00:00:00Z

CloudFront 署名付き Cookie

署名付き Cookie は署名付き URL と同様に機能しますが、各 URL を変更せずに複数のファイルへのアクセスを許可できます。認証に成功すると、サーバーは 3 つの Cookie(CloudFront-Policy、CloudFront-Signature、CloudFront-Key-Pair-Id)を生成し、ブラウザーへのレスポンスに設定します。その後、そのブラウザーから CloudFront へのリクエストには Cookie が含まれるため、条件に一致するすべてのコンテンツにアクセスできます。

署名付き Cookie は、ログイン済みユーザーにプレミアムセクション全体(/members/* 内のすべての動画など)へのアクセスを許可する場合や、個々のリソースの URL 形式を制御できない場合に適しています。

信頼されたキーグループ

CloudFront の署名を生成するには、CloudFront キーペアが必要です。現在推奨される方法では、信頼されたキーグループを使用します。RSA キーペアを作成し、公開鍵を CloudFront にアップロードしてキーグループに追加したうえで、署名付きアクセスが必要なキャッシュビヘイビアにそのキーグループを関連付けます。

秘密鍵は、署名サーバー上の Secrets Manager などに安全に保管します。ユーザーが認証されると、サーバーは秘密鍵を使用して URL または Cookie ポリシーに署名します。CloudFront は、信頼されたキーグループに登録された対応する公開鍵を使用して署名を検証します。

# Upload a public key to CloudFront
aws cloudfront create-public-key \
  --public-key-config '{
    "Name": "MySigningKey",
    "EncodedKey": "-----BEGIN PUBLIC KEY-----\n...<key>...\n-----END PUBLIC KEY-----",
    "CallerReference": "2026-06-20-key"
  }'

簡易ポリシーとカスタム署名付き URL ポリシーの比較

署名付き URL では、次の 2 種類のポリシーを使用できます。

  • 簡易ポリシー:最も単純な形式で、リソース URL と有効期限のみを指定します。署名がコンパクトで、簡単に生成できます。
  • カスタムポリシー:より柔軟な形式で、ワイルドカード(https://d123.cloudfront.net/videos/*)を含むリソース URL、オプションの開始時刻(not-before)、さらにオプションで IP アドレス制限を指定できます。ポリシー JSON は URL 内で Base64 エンコードされます。

単一ファイルへの単純なリンクには簡易ポリシーを使用し、ワイルドカードによるリソース照合や IP ベースの制限が必要な場合はカスタムポリシーを使用します。

CloudFront の地理的制限

地理的制限(地域制限とも呼ばれます)は、閲覧者の国に基づいて CloudFront によるコンテンツの配信をブロックまたは許可します。CloudFront は、サードパーティの位置情報データベースを使用し、閲覧者の IP アドレスから国を判定します。

地理的制限は、ディストリビューション単位で、許可リスト(一覧に含まれる国のみがコンテンツにアクセス可能)またはブロックリスト(一覧に含まれる国をブロック)のいずれかとして設定します。制限対象の国にいるユーザーには HTTP 403 レスポンスが返されます。地理的制限は大まかな制御手段であり、個々のパスではなくディストリビューション全体に適用されます。

# Enable geo-restriction: block two countries
aws cloudfront update-distribution \
  --id EDFDVBD6EXAMPLE \
  --distribution-config '{
    ...existing config...
    "Restrictions": {
      "GeoRestriction": {
        "RestrictionType": "blacklist",
        "Quantity": 2,
        "Items": ["CN", "RU"]
      }
    }
  }' \
  --if-match ETVPDKIKX0DER

地理的制限と Route 53 地理的近接性ルーティングの比較

CloudFront の地理的制限と Route 53 の地理的近接性ルーティングは、どちらも地理情報を使用しますが、目的は異なります。

  • CloudFront の地理的制限:CDN レイヤーでコンテンツのエッジ配信をブロックまたは許可します。ブロック対象の国には 403 を返し、ディストリビューション単位で適用されます
  • Route 53 の地理的近接性ルーティング:地理情報に基づいて DNS クエリを異なるエンドポイント(異なるサーバーやページ)へルーティングします。アクセス自体をブロックするのではなく、異なるコンテンツやインフラストラクチャへ誘導します

国全体を対象としたアクセス制御には CloudFront の地理的制限を使用します。ユーザーを地域に適したコンテンツやインフラストラクチャへルーティングするには、Route 53 の地理的近接性ルーティングを使用します。

署名付き URL と S3、OAC の組み合わせ

完全なプライベートコンテンツ配信アーキテクチャは次のとおりです。

  1. S3 バケットをプライベートにする(パブリックアクセスなし)
  2. CloudFront でOACを使用し、ディストリビューションだけが S3 から読み取れるようにする
  3. プライベートコンテンツ用のキャッシュビヘイビアで署名付き URL または Cookieを必須にする(信頼されたキーグループを関連付ける)
  4. アプリケーションサーバーでユーザーを認証し、署名付き URL または Cookie を発行する
  5. ユーザーは時間制限付きの署名付き CloudFront URL 経由でのみコンテンツにアクセスする

ユーザーが S3 URL を推測したり共有したりしても、アクセスはブロックされます。CloudFront URL を共有した場合でも、設定した時間が経過すると有効期限が切れます。この多層構成により、デジタルコンテンツを多層防御で保護できます。

フィールドレベル暗号化

フィールドレベル暗号化は、HTTP POST リクエスト内の機密データフィールドを、オリジンへ転送する前にエッジで暗号化できる高度な CloudFront 機能です。オリジンサーバーが侵害された場合でも、暗号化されたフィールド(クレジットカード番号や SSN など)は、対応する秘密鍵がなければ読み取れません。

CloudFront は、エッジで公開鍵を使用して指定されたフィールドを暗号化します。一致する秘密鍵を持つ意図されたバックエンドサービスだけがデータを復号できます。フィールドレベル暗号化は、すでに TLS で保護された処理経路に、さらに保護の層を追加します。

トークンベースのアクセス制御パターン

国単位のブロックを超えたきめ細かなアクセス制御が必要な動的アプリケーションでは、Lambda@Edge を使用したトークンベースのアクセスが一般的なパターンです。

  1. ユーザーが Cognito または認証サービスで認証し、JWT を受け取る
  2. ユーザーが CloudFront リクエストのクエリパラメータまたは Cookie として JWT を含める
  3. Lambda@Edge Viewer-Request 関数が JWT の署名とクレームを検証する
  4. 有効な場合、Lambda@Edge がリクエストをオリジンへ転送し、無効な場合は 401 を返す

これにより、認証されていないリクエストをオリジンに到達させることなく、CloudFront エッジだけでユーザー単位・リソース単位のきめ細かなアクセス制御を実現できます。

実際のユースケースのまとめ

署名付き URL/Cookie と地理的制限に関する試験シナリオのパターン:

  • 「購入したファイルの時間制限付きダウンロードリンク」 → 有効期限付きの署名付き URL
  • 「ログイン済みのプレミアムユーザーが /premium/* 内のすべての動画にアクセスする」 → ワイルドカードポリシー付きの署名付き Cookie
  • 「ライセンス上の理由により特定の国のユーザーからのアクセスをブロックする」 → CloudFront の地理的制限のブロックリスト
  • 「国ごとに異なるコンテンツを配信する」 → Route 53 の地理的近接性ルーティング + 複数のディストリビューションまたはオリジン
  • 「オリジンの管理者からもクレジットカードフィールドを保護する」 → フィールドレベル暗号化

クイックチェック

このレッスンで扱った AWS Solutions Architect(SAA-C03)の概念について、理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、署名付き URL は有効期限とオプションの IP 制限によって個々のファイルへのアクセスを制限すること、署名付き Cookie は 1 回の認証セッションでパスパターンに一致する複数のファイルへのアクセスを許可すること、そして地理的制限は CloudFront ディストリビューションレベルで国全体をブロックまたは許可することを学びました。次は、WAF と Lambda@Edge を使用した CloudFront について説明します。

よくある質問

「署名付き URL、署名付き Cookie、地理的制限」レッスンは無料ですか?

はい。「署名付き URL、署名付き Cookie、地理的制限」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AWS Solutions Architectコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AWS Solutions Architectコースには全4レッスンが含まれています。

「署名付き URL、署名付き Cookie、地理的制限」で何を学びますか?

署名付き URL と Cookie を使ってプレミアムコンテンツへのアクセスを制限し、地理的制限で特定の国のユーザーをブロックします。 ブラウザで直接実行するハンズオンコードでAWS Solutions Architectを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AWS Solutions Architectを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAWS Solutions Architectは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「署名付き URL、署名付き Cookie、地理的制限」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAWS Solutions Architectレッスンでコードを書いて実行できますか?

はい。すべてのAWS Solutions Architectレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. CloudFront ディストリビューションとオリジン
  2. キャッシュビヘイビアと TTL 設定
  3. 署名付き URL、署名付き Cookie、地理的制限
  4. WAF と Lambda@Edge を組み合わせた CloudFront
← AWS Solutions Architectに戻る