CloudFrontとは
AWSが提供する **CDN(Content Delivery Network)**サービス
ユーザーへの静的および動的なウェブコンテンツ(.html
、.css
、.js
、イメージファイルなど)の配信を高速化する
CloudFrontの仕組み
- クライアントがCloudFrontにアクセスすると、DNSサーバーにCloudFrontのドメイン名を問い合わせる
- DNSサーバーは、CloudFrontのドメイン名をCloudFrontに問い合わせる
- CloudFrontは、クライアントの位置情報を元に位置情報DBから最適なエッジサーバーのIPアドレスを応答する
- DNSサーバーからエッジサーバーのIPアドレスの応答を受けたクライアントは、そのエッジサーバーにアクセスし、コンテンツを要求する
- コンテンツの要求を受けたエッジサーバーは、キャッシュが無ければオリジンサーバーからコンテンツを取得する
- エッジサーバーが応答としてクライアントにコンテンツを送る
- オリジンサーバー:配信するオリジナルのファイルが配置されているサーバー
- エッジサーバー:オリジンサーバーからコンテンツをキャッシュし、ユーザーにコンテンツを配信するサーバー
- ディストリビューション:ドメインごとに割り当てられるCloudFrontの設定
暗号化通信
クライアント - エッジサーバー間の暗号化
- デフォルトのドメイン名(
cloudfront.net
ドメイン)で利用する場合は、SSL通信(HTTPS)を行うことが可能 - 独自ドメインを利用している場合、X.509PEM形式のSSL証明書をインポートして利用可能
エッジサーバー - オリジンサーバー間の暗号化
オリジンサーバーの実装方法によって利用出来る暗号化の種類が異なる
1. S3バケット
デフォルトでは、S3バケットオリジンサーバーからコンテンツを取得する際の通信は、クライアントからアクセスされたプロトコルで行われる
HTTPS通信を必須にするためには、Viewer Protocol Policy の値を Redirect HTTP to HTTPS または HTTPS Only にする
2. S3静的ウェブサイトホスティング
S3静的ウェブサイトホスティングのエンドポイントがHTTPS通信を受け入れていないため、エッジサーバーとの通信でHTTPSを利用出来ない
→ カスタムオリジンとして暗号化を行う必要がある
3. カスタムオリジン
CloudFront側で Origin Protocol Policy の値を Redirect HTTP to HTTPS または HTTP Only にし、カスタムオリジンサーバーにSSL/TLS証明書をインストールする
署名付きURL
コンテンツへのアクセスを一定期間に限定したい場合、URLの有効期間などを詳細に制御することが出来るもの
- 生成する際に有効期間を選択する
- 限定された目的でコンテンツを配信する場合は短時間を指定する(例:映画レンタルや音楽ダウンロードのオンデマンド配信など)
- 既知のユーザーに配信する場合は長期間を指定する(例:投資家への事業計画の配信、従業員への教育資料の次配信など)
オリジンサーバーの保護
CloudFrontのオリジンサーバーのURLが外部に漏洩し、オリジンサーバーに直接アクセスされることはセキュリティ的に大きな問題になるため、リスク回避のためにオリジンサーバーを保護するための機能を備えている
オリジンサーバーの実装方法によって保護方法が異なる
1. S3バケット
Origin Access Identity(OAI) を利用することで、S3バケットへのアクセスをCloudFrontからのみに制限可能
2. S3静的ウェブサイトホスティング
CloudFrontからアクセスするためにはS3静的ウェブサイトホスティングをパブリックに設定する必要があるため、外部からのアクセスに注意が必要
3. カスタムオリジン
オリジンカスタムヘッダーを利用し、CloudFrontで指定された任意のヘッダーをオリジンサーバー側でチェックすることで、アクセスをCloudFrontからのみに制限可能
※ オリジンサーバーへのアクセス自体はパブリックに設定する必要があるため、オリジンサーバーのURLの外部漏洩に注意が必要