CloudFront のオリジンへ直接アクセスさせない方法まとめ

記事タイトルとURLをコピーする

CloudFront を利用する際に オリジンの Webサーバ に 「CloudFront を経由しないアクセスを許可したくない」という状況があるかと思います

「CloudFront を経由しないアクセスを許可したくない」を達成する方法として以下の2つを紹介します
① カスタムヘッダの追加による制御
② Origin Access Identityによる制御

留意事項

2022/2/8 にアップデートがありました
CloudFront のオリジンが EC2 や ALB のときはセキュリティグループのルールに 「Cloud Front のAWSマネージドプレフィクスリスト」のみを許可するルールを書くことができます
これにより CloudFront を経由した接続のみ許可可能になりました こちらもご参照ください

blog.serverworks.co.jp

2022年8月に、OAI に代わる OAC という機能が出ました。 こちらも必ずご参照ください。本記事では OAI について記していますが、これからの構築は OAC が推奨になります。

blog.serverworks.co.jp

① カスタムヘッダの追加による制御

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 を利用 してインターネットに公開する方法まとめ

以上