LoginSignup
1
1

More than 1 year has passed since last update.

CloudFrontマルチオリジン [APIGateway / S3]

Last updated at Posted at 2022-11-15

概要

  • サーバレスアーキテクチャのフロントエンドを構築
  • CloudFrontを前段に置いてマルチオリジンを構成する
  • オリジンはAPIGateWayとS3で構成し、URIによってどちらかのオリジンにアクセス
  • APIGatewayの後ろはLambdaだがここでは書かない
  • 最後にWAFでIPアドレスによるアクセス制限

前提

  • ドメインと証明書は取得済み
  • ここではdev-<projectname>.comを取得ドメイン名とする

詳細

  • こんな感じの完成イメージ

Distribution作成

  • オリジンドメインは作成したS3のアドレスを入力
  • オリジンパスはここでは無し
  • OAIを任意の名前で作成
  • バケットポリシーはここではひとまず自動
  • ビュワーはHTTPSオンリーでも良いかも。APIGatewayはHTTPSのみしか対応してないはず
  • キャッシュポリシーとオリジンリクエストポリシーは後で変更予定。ここではとりあえずデフォルト
  • デフォルト
  • デフォルトルートオブジェクトに"index.html"
  • 以上でとりあえずDistribution作成

S3バケット作成

  • パブリック・アクセスのバケットを作成
  • 詳細手順は割愛
  • Identityがない方のバケットポリシーを削除

ACM証明書作成

  • 詳細手順は省略
  • 申請した手続きをRoute53にレコード作成して認証にする

Distributionに証明書をセット

  • CNAMEにドメインをセット
  • 証明書をセット

Route53レコード登録

  • Route53にAレコードを作成。Distributionのドメインを入力

APIGateaway

  • RestAPIを任意の名前で作成

リソースの作成

  • リソース”/api”と”/admin”を作成
  • apiの下にadminを作成
  • リソースの作成後、レスポンスさせたいリソースを選択、[アクション]から[メソッドの作成]を選択。
  • [メソッドの作成]後、HTTPメソッドが選択可能、今回は"GET"を選択し、確定。
  • シンプルに使いたい場合は、統合レスポンスのマッピングテーブルを作成
  • デフォルトの統合レスポンスを順番に展開し、マッピングテンプレートのContent-Type:application/jsonにレスポンスしたい内容を入力。入力完了後、[保存]。

API動作確認(テスト)

APIデプロイ

  • テストで動作に問題がないことを確認したあとは、実際にデプロイ
  • 生成されたURLでアクセス。APIGatewayで任意のステージ名を作成した場合、最初のパスになる
  • APIGateway単体でのアクセス成功を確認

※末尾のパスが設定できていない場合、下図のようにMissing Authentication Tokenエラーが返ってくる
※APIGatewayでStage名が”dev”だった場合、CloudFrontのオリジンパスは"/dev"に設定する
※ステージ名(ステージ変数)が$defaultだった場合オリジンパスの入力は不要

CloudFront経由でAPIアクセス

  • Distirbutionではオリジンパスを設定
  • APIGatewayのステージ変数が$defaultの場合は不要
  • Behavor
  • ここでは詳細は書かないがキャッシュポリシーは”CachingDisabled”、オリジンリクエストポリシーは任意で作成したポリシーを設定
  • S3のBehavorは以下の通り
  • APIGatewayのパスにアクセス
  • S3のパスにアクセス

WAFによるIPアクセス制限

  • 接続可能なIPをまとめたIPSetを作成する
  • 対象のCloudFrontディストリビューションを使用してACLを作成
  • 作成したルールを選択し、対象IP以外はBlock
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1