概要
こちらの記事でAWSサービスを使ったドメインリダイレクト手法についてまとめました。
その中でCloudFront関連の方法を試していこうと思い記事にします。
今回は「CloudFront+S3リダイレクト機能」編です。
実践
構成図
- CloudFrontに代替ドメインでアクセス
- カスタムオリジンとして指定したS3のウェブサイトエンドポイントにリクエストを転送
- ウェブサイトエンドポイントに設定したリダイレクトルールに基づき、別ドメインにリダイレクト
- リダイレクト先のALBにリクエストを転送
デプロイ
環境はGitHubで公開しています。
各コードとデプロイ方法を用意してますのでお試しください。
設定値
各ポイントとなる設定値を見ていきます。
CloudFront
ディストリビューションには代替ドメインを設定
カスタムオリジンとして静的ウェブサイトホスティングが有効化されたS3バケットのウェブサイトエンドポイントを指定
S3
匿名アクセスのためデフォルト暗号化はSSE-S3
AWS キー管理サービス (AWS KMS) は匿名リクエストをサポートしていません。匿名アクセスまたはパブリックアクセスを許可する Amazon S3 バケットは、AWS KMS で暗号化されたオブジェクトにこのアクセスを適用しません。提供したい S3 オブジェクトから AWS KMS 暗号化を削除します。AWS KMS 暗号化の代わりに AES-256 を使用してオブジェクトを暗号化します。
匿名アクセスのためパブリックアクセスはオフ
ACLは無効であることと、意図しないACLによるオブジェクトの公開を防ぐためACLに関してはブロックパブリックアクセスをオンにしています
CloudFront経由でのアクセスのみを許可するバケットポリシー
UserAgentは偽装可能であるためセキュリティは完全でないですが、公開してよいオブジェクトであるため許容しています
特定のURLパスリクエスト時に別ドメインへリダイレクト
- ディストリビューションに設定した代替ドメインへのリクエストパスが「test1/」もしくは「test2/」の場合に、別ドメインへリダイレクトする設定を入れています
動作確認
まずブラウザで「https://ディストリビューション代替ドメイン/」 を検索しリダイレクトルールに引っかからない場合を見ていきましょう。
この場合は、ディストリビューションに設定したデフォルトルートオブジェクトをオリジンから取得しレスポンスを返します。
続いて「https://ディストリビューション代替ドメイン/test1/」 を検索しリダイレクトルールに引っかかる場合を見ていきましょう。
この場合は、リダイレクトルールの HostName で指定したホストにリダイレクトされ、リダイレクト先にコンテンツを取得しに行きます。
「https://ディストリビューション代替ドメイン/test2/」 も同様にリダイレクトされていますね。
まとめ
今回は「CloudFront+S3リダイレクト機能」を試してみました。
リダイレクト機能を簡易的かつセキュアに実装できる点はメリットだなと感じました。
次回は「CloudFront Functions」編を記事にしたいと思います。