はじめに
この記事はAWS SAA試験勉強のための、CloudFrontに関する知識のまとめです。
CloudFrontとは
コンテンツの効果的な配信を達成するのに役立つCDN(Content Delivery Network)のサービス。エッジロケーションにキャッシュを保存します。
(CDNとは、動画や音声などの大容量のデータを利用する際に,インターネット回線の負荷を軽減するようにサーバを分散配置するネットワーク。)
AWSには世界中に400を超えるエッジロケーションと13のリージョン別エッジキャッシュがあり、CloudFrontを使うと、利用者から最も近いエッジロケーションからコンテンツを高速に配信することができます。
オンプレミスサーバーをポイントしてカスタムオリジンとして設定することで、オンプレミス環境のサーバーにも適用可能なコンテンツ配信サービスとなっています。
CloudFrontの基本的性質
-
CloudFrontを導入することで、導入したサービスは自動的に通信のSSL/TLS暗号化が行われます
-
CloudFront では、Gzip および Brotli 圧縮形式を使用してオブジェクトを圧縮できます。ビューワーが両方の形式をサポートしている場合、Brotli が優先されます。エッジロケーションによる圧縮処理を実施することでコストを削減できます
-
S3のtransfer accelerationを利用することはできません
-
EC2インスタンスを複数のアヴェイラビリティゾーンに分散させることはできません
S3バケットの配信コンテンツに対してアクセスを制限するための方法
CloudFrontのOrigin Access Identity(OAI)を作成し、S3バケット内のオブジェクトへのアクセスをそのOAIに許可します。
WAFとの連携
Amazon S3バケットにCloudFrontディストリビューションによるコンテンツ配信を構成することで、AWS WAF を利用してReferer制限を実装することができます。
AWS WAF は、CloudFront に転送される HTTP および HTTPS リクエストをモニタリングして、WEBアクセスの拒否ルールなどを設定できるウェブアプリケーションファイアウォールです。AWS WAFのReferer制限によって直接にURLリンクを参照することを制限することができます。
署名付きCookies機能
CloudFrontの署名付きCookies機能によりプライベートファイルにアクセスできるユーザー権限を管理することができます。現在のURLを変更したくない場合に用います。
署名付きURL
個別のファイルへのアクセスを制限する場合や、ユーザーがCookieをサポートしていないクライアントを使用している場合に用います。
Cache-Control
Cache-Controlのmax-ageディレクティブが低い値に設定されている場合、キャッシュ保持期間が非常に短いためリクエストは頻繁にオリジンサーバーに送信されます。
Route53の位置情報ルーティングとの違い
Route53はあくまでも既存のオンプレミスサーバーのルーティング方法を構成するだけですが、CloudFrontであればユーザーの近くにキャッシュサーバーにコンテンツを配置して、高速なアクセスを実現することができます。
ALBとの関係
ALBをオリジンとしてAmazon CloudFrontディストリビューションを設定できます。
HTTPS通信の有効化
CloudFrontにACM(AWS Certificate Manager)の証明書を連携して、HTTPS通信を有効化することで、Amazon CloudFrontからのコンテンツ配信はすべてHTTPS通信にすることができます。
OACとOAI
CloudFrontとS3を使用して静的Webサイトを構成する場合に、S3バケットのオブジェクトへ直接アクセスさせずにCloudFront経由のアクセスのみ許容する方法には、Origin Access ControlとOrigin Access Identityがあります。
OAIは高可用性かつセキュリティが強化されたWebサイトを公開する時などに用います。
Accept-Languageリクエストヘッダー
各地域に応じた言語表示を実施するためにはCloudFrontのAccept-Languageリクエストヘッダーを利用します。
地理的制限(Geo Restriction)
AWS CloudFrontには地理的制限(Geo Restriction)機能があります。この機能を使用すると、特定の国や地域からのアクセスを許可または拒否することができます。
キャッシュを保持する時間
CloudFrontキャッシュを保持する時間はTTL(Time to Live)値で制御できます。設定するTTL値の期間を短くすると動的なコンテンツに対応します。反対に、期間を長く設定すると、元々のサーバーやストレージにファイルを取りにいかなくなるため、ユーザー側のパフォーマンス向上とともに、オリジン側の負荷軽減になります。
フィールドレベル暗号化
フィールドレベル暗号化では、特定のデータフィールド(個人情報などの機密データがあるフィールド)に対して、特定のアプリケーションのみがアクセスできるようにデータを保護することができます。
Lambda@Edge
CloudFrontには、アプリケーションのユーザーに近いロケーションでLambda関数のコードを実行できるLambda@Edgeというサービスがあります。これによりエッジロケーションでプログラミングを実行することが可能になります。