CloudFront multi-tenantを使ってみる

Last-modified: Thu, 15 May 2025 15:39:33 JST (277d)
Top > CloudFront multi-tenantを使ってみる

CloudFront Multi-tenant を使ってみます。
オリジンであるS3について、バケット指定と静的ウエブホスティングの違いについても検証します。

前提条件

  • S3をオリジンとするSPAをホストし、各テナントはS3のディレクトリで分離されている。
  • 静的ウエブホスティングの設定は無効。
    file-05.png
  • ブロックパブリックアクセスはオンの状態(バケットを作った初期設定のまま)
    file-06.png
  • S3のファイル構成は以下のとおり。
    test
     |---index.html
     |--hoo
     |   |--index.html
     |--hoge
         |--index.html
  • SSL証明書はACMでバージニアリージョンで取得済み。
  • 必要なR53も設定済み。

CloudFront Multi-tenantディストリビューション作成

  1. AWSコンパネより、「ディストリビューションを作成」をクリックします。
    file-07.png
  2. 「Multi-tenant architecture」を選択します。
    file-08.png
  3. Distribution nameには作成するCloudFrontのNameタグに設定する内容をセットします。
    また、Wildcard certificate にはACMで取得したSSL証明書をセットします。
    file-09.png
  4. Origin typeはAmazon S3を選択します。
    file-10.png
  5. S3 originにはホストするS3バケット名をセットします。Insert parameterプルダウンをクリックし、Create new parameterをクリックします。
    file-11.png
  6. Parameter nameにS3のパス名を指定するパラメタ名を作成します。これがテナントを識別するための変数名となります。
    file-12.png
  7. Origin pathに作成したパラメタ変数をセットします。
    file-13.png
  8. セキュリティ設定ですが、検証目的なのでWAFは省略します。
    file-14.png
  9. サマリーが表示されるので作成をします。
    file-15.png
  10. SettingsタブからEditをクリックします。
    file-30.png
  11. 下の方にあるDefault root objectにindex.htmlを追加します。
    file-16.png
  12. 同じくSettingsタブ内にあるCreate custom error responseをクリックします。
    file-17.png
  13. SPA用に403と404のそれぞれのレスポンスを作成します。
    file-18.png

テナントの作成

  1. Domain & tenantsタブをクリックし、ディストリビューションテナントを作成をクリックします。
    file-19.png
  2. ディストリビューションテナント名はAWSアカウント内でユニークな識別子をつけます。テナントIDでなくてもいいですが、一度設定をすると変更不可です。
    たとえば同じAWSアカウント内に開発とステージング環境が同居している場合、同じディストリビューションテナント名をつけられないので注意してください。
    file-20.png
  3. テナントに割り当てるSSL証明書をセットします。ここでNoneを選択するとSSL証明書がセットされないのではなく、デフォルトとしてCloudFront Multi-tenantディストリビューションにセットしたSSL証明書が使用されます。つまりその場合ディストリビューションのサブドメインになるという事です。
    SSL証明書に対応するテナントに割り当てるドメインもペアでセットします。
    file-21.png
  4. Tenant parameter configurationで先ほど作成をしたパラメタ変数にセットする値を入れます。
    file-22.png
  5. セキュリティ設定はテナント毎に上書きをすることができます。今回はWAF無効化のままにします。
    file-23.png
  6. サマリーが表示されるので作成をします。
    file-24.png

動作検証

  1. R53に作成をしたテナントのCloudFrontを割り当てます。手順は通常のCloudFrontをエイリアスレコードで指定するのと同じです。
    file-25.png
  2. 正しく表示されました。
    file-26.png
  3. ではサブディレクトリにアクセスしてみます。すると正しく表示されず、ゼロバイトのファイルがダウンロードされます。
    これは、CloudFrontのDefault root object設定はサブディレクトリに対しては補完をしてくれないからです。
    サブディレクトリに対してもindex.htmlを補完しないといけない用途では、次の静的ウエブホスティングをオリジンとする必要があります。
    file-27.png

静的ウエブホスティングの有効化とオリジンの差し替え

  1. S3のバケット設定より、静的ウエブホスティングを有効化します。
    file-28.png
  2. 有効化したら、バケットウエブサイトエンドポイントを控えておきます。
    file-29.png
  3. CloudFrontのオリジンタブよりCreate originをクリックし、新たに静的ウエブホスティングをオリジンに追加します。
    file-31.png
  4. Origin typeはOtherを選択します。
    file-32.png
  5. Custom originの箇所に先ほど控えておいたS3のバケットウエブサイトエンドポイントからhttp://を除外した文字列をセットします。
    Origin pathの箇所は同じです。
    file-33.png
  6. オリジンを差し替えるため、先ほど作成したテナントを無効化した上で削除します。
    file-35.png
  7. S3バケットの方のオリジンを削除します。
    file-34.png
  8. オリジンタブから作成したオリジンを選択し、Editをクリックします。
    file-37.png
  9. S3の静的ウエブホスティングはHTTPのみですので、プロトコルの箇所をHTTPのみに変更をします。これをしないとオリジンへアクセス不能になります。
    file-38.png

テナントの再作成

テナントを再度作成します。手順は同じなので省略します。

動作検証

  1. テナントの作成が完了しましたら、動作検証をします。アクセスしますが、403 Forbiddenとなり正しく動作しません。
    file-39.png
  2. S3バケットのパブリックアクセスを全てブロックをオフにします。
    file-40.png
  3. バケットポリシーについて、設定されているOACのポリシーを削除し、外部からの参照を許可するポリシー設定に変更します。
    file-41.png
  4. こうすることで正しく表示されます。
    file-42.png
  5. また、サブディレクトリに対しても正しくindex.htmlが補完されます。
    file-43.png

Counter: 325, today: 1, yesterday: 0

このページの参照回数は、325です。