CloudFront を利用する際に オリジンの Webサーバ に 「CloudFront を経由しないアクセスを許可したくない」という状況があるかと思います
「CloudFront を経由しないアクセスを許可したくない」を達成する方法として以下の2つを紹介します
① カスタムヘッダの追加による制御
② Origin Access Identityによる制御
留意事項
2022/2/8 にアップデートがありました
CloudFront のオリジンが EC2 や ALB のときはセキュリティグループのルールに 「Cloud Front のAWSマネージドプレフィクスリスト」のみを許可するルールを書くことができます
これにより CloudFront を経由した接続のみ許可可能になりました
こちらもご参照ください
2022年8月に、OAI に代わる OAC という機能が出ました。 こちらも必ずご参照ください。本記事では OAI について記していますが、これからの構築は OAC が推奨になります。
① カスタムヘッダの追加による制御
CloudFront には カスタムヘッダーの追加 機能があり CloudFront のオリジンへ直接アクセスさせないように制御できます
コンテンツへのアクセス制御 カスタムヘッダーを使用して、コンテンツへのアクセスを制御できます。CloudFront によって追加されたカスタムヘッダーが含まれている場合にのみリクエストに応答するようオリジンを設定することで、ユーザーが CloudFront をバイパスして、オリジンで直接コンテンツにアクセスすることを防ぐことができます。詳細については、「 カスタムオリジン上のファイルへのアクセス制限」を参照してください。
CloudFront のオリジンが API Gateway や ELB の場合
CloudFront のオリジンが API Gateway や ELB の場合には AWS WAF を利用可能なため
AWS WAF を利用して CloudFront が付与したカスタムヘッダの制御を行うことが出来ます
例えば CloudFront のオリジンが API Gateway の場合は以下のように構成します
例えば CloudFront のオリジンが ELB の場合は以下のように構成します
CloudFront のオリジンが EC2 や コンテナ の場合
Webサーバの機能を利用してヘッダの制御を行います Webサーバを提供するソフトウェア内の設定となるため方法は割愛します
CloudFront のオリジンが S3の静的ウェブサイトホスティングである場合
CloudFront のオリジンが S3の静的ウェブサイトホスティングである場合は Referer ヘッダを利用します
Referer ヘッダを S3のバケットポリシーで制御可能です
詳細はお手数ですが以下のブログ記事をご参照ください
S3 に置いたコンテンツを CloudFront を利用 してインターネットに公開する方法まとめ
追加できないカスタムヘッダ
追加出来ないカスタムヘッダは以下のため避けてください
オリジンに送信されるリクエストに以下のヘッダーを追加するように CloudFront を設定することはできません。
- Cache-Control
- Connection
- Content-Length
- Cookie
- Host
- If-Match
- If-Modified-Since
- If-None-Match
- If-Range
- If-Unmodified-Since
- Max-Forwards
- Pragma
- Proxy-Authorization
- Proxy-Connection
- Range
- Request-Range
- TE
- Trailer
- Transfer-Encoding
- Upgrade
- Via
- X-Amz- で始まるヘッダー
- X-Edge- で始まるヘッダー
- X-Real-Ip
②Origin Access Identityによる制御
CloudFront のオリジンが S3バケット (静的ウェブサイトホスティングではない )
CloudFront のオリジンが S3バケット (静的ウェブサイトホスティングでは無い場合 ) は Origin Access Identity を利用します
詳細はお手数ですが以下のブログ記事をご参照ください
S3 に置いたコンテンツを CloudFront を利用 してインターネットに公開する方法まとめ
以上