■CloudFront の特徴
- データ、動画、アプリケーション、API を低レイテンシーの高速転送により視聴者に安全に配信する高速コンテンツ配信ネットワーク (CDN) サービスです。
- WEBアプリケーションでグローバルな高速な配信処理を達成することができます。
- AWS WAF を利用して CloudFront に転送される HTTP/HTTPS リクエストを監視することができます。
- CloudFront には AWS Shield Standard が組み込まれているので、常時 DDoS 攻撃を防御しています。
- CloudFront では、代替ドメイン名 (CNAME とも呼ばれる) を使用すると、CloudFront によってディストリビューションに割り当てられたドメイン名ではなく独自のドメイン名 (例:www.example.com等) をファイルへのリンクで使用できます。
- リージョナルエッジキャッシュは、エッジロケーションとオリジンの間に設置されるイメージで、エッジロケーションにキャッシュがない場合にリージョナルエッジキャッシュにキャッシュがあれば返します。ない場合はオリジンから返します。
- エッジロケーションとリージョナルエッジキャッシュは AWS 側が自動的に選択します。
■Black Belt(PDF版)
https://d1.awsstatic.com/webinars/jp/pdf/services/20190730_AWS-BlackBelt_Amazon_CloudFront.pdf
Amazon CloudFront と AWS WAF を組み合わせるとアプリケーションを保護することができます。
エッジロケーションとは
- エッジロケーションにコンテンツをキャッシュし、必要なときにのみオリジンからコンテンツを取得することで、オリジンのワークロード(作業負荷)を減らすことができます。
- オリジンサーバーが直接応答するリクエストの数を減らすことができます。
※ワークロードとは作業負荷のことを言います。
■エッジロケーションの機能
- コンテンツ配信
- キャッシュ蓄積
■エッジロケーションを使用する AWS サービス
- Amazon CloudFront
- Lambda(Lambda@Edge を利用すると Lambdaファンクションをオリジンサーバではなくエッジロケーションで実行でき、プロセスの作成に要する時間を短縮できたり、レイテンシーが大幅に軽減されます。)
- S3(Amazon S3 Transfer Acceleration を使用すると、クライアントと S3 バケットの間で、長距離にわたるファイル転送を高速、簡単、安全に行えるようになります。Transfer Acceleration では、Amazon CloudFront の世界中に分散したエッジロケーションを利用しています。)
ディストリビューションとは
- distribution ← 流通。配布。分布。
CloudFront を使用してコンテンツを配信するときは、ディストリビューションを作成して構成を設定します。
ディストリビューションを作成して、コンテンツを配信する場所と、コンテンツ配信の追跡と管理の方法の詳細を CloudFront に指示します。
CloudFront 側で SSL 証明書を保持して利用できる
CloudFront 側で SSL 証明書を保持して利用できます。
SSL 証明書をインポートすることもできますし ACM(AWS Certificate Manager)を利用することもできます。
※他には ELB、Amazon API Gateway の API などで ACM 管理の SSL 証明書を利用できます。
また、以下の環境で SSL 証明書を利用できます。
-
ビューワー(閲覧者)と CloudFront との間
-
CloudFront とオリジンとの間で HTTPS を使用するための証明書
CloudFrontでHTTPS接続だけ許可する設定手順
CloudFrontでHTTPS接続だけ許可する設定手順です。
- CloudFront の Viewer Protocol Policy の設定で HTTPS Only を設定する。
- CloudFront の Viewer Protocol Policy の設定で Redirect HTTP to HTTPS を設定する。
- CloudFront の Viewer Protocol Policy の設定で SSL/TLS 証明書を利用できるように設定する。
CloudFrontのセキュリティについて
Amazon CloudFront はデフォルトで DDoS 攻撃に対処するサービスである Amazon Sheild Standard が適用されており、Web アプリケーションを保護できます。(追加料金がなく自動で Amazon Sheild Standard が適用されます)
これにより SYNフラッドや UDPリフレクション攻撃などの多くの一般的な DDoS 攻撃がオリジンに到達するのを防ぎます。
また、Amazon CloudWatchアラームを追加してこうした攻撃による影響発生をモニタリングできます。
CloudFront 単独では SQLインジェクションなどの攻撃を予防することはできないため、WAF によって防ぐ必要があります。
CloudFrontとS3の構成
静的なWebページを構築する場合は、CloudFrontとS3だけで構成できます。
CloudFrontとS3の静的Webページでアカウント制限をかける場合
CloudFront の OAI(オリジンアクセスアイデンティティ)という特別な CloudFront ユーザーを作成して、S3バケットポリシーの特定のユーザーに許可することで、CloudFront 経由で特定のユーザだけが S3バケットにアクセスできるように構成することができます。
逆に言うと OAI を使用することで直接 S3 バケットの URL を経由してアクセスすることができなくなります。セキュリティの向上につながります。
CloudFrontとS3の静的Webページでアカウント制限とIPアドレス制限をかける場合
CloudFrontのOAI(オリジンアクセスアイデンティティ)と WAF の機能を利用することで、特定のユーザと特定の IPアドレスのみが S3バケットにアクセスできるように制限することができます。
CloudFront で標準的に連携されている AWS WAF を利用して、特定の IPアドレスのみが CloudFront経由でアクセスできるように設定することができます。
AWS WAF を利用してのアクセス制限は IPアドレスベースとなるので、特定のユーザだけ排除するなどといった制限は AWS WAF ではできません。
CloudFrontとS3の構成で特定のユーザに対してアクセス制限をする場合
CloudFront と S3 の構成の場合、バケット内のオブジェクトのアクセス権限を全員に割り当ててから CloudFront で「署名付き URL」または「署名付き Cookie」を作成して Amazon S3 バケット内のファイルへのアクセスを制限します。
その後、OAI(オリジンアクセスアイデンティティ)ザーを作成して配布に関連付けます。
エッジロケーションでコンテンツをZIP圧縮が可能
エッジロケーションでの ZIP 圧縮によって配信データサイズを少なくしてコスト削減ができます。
ビューワー(閲覧者)がリクエストヘッダーに Accept-Encoding: gzip を含めるてリクエストした場合は、CloudFront が自動的にファイルを圧縮して供給できます。
ファイルが小さくなるとダウンロード時間が短縮されます。
特定地域だけアクセス制限をすることが可能
CloudFront の地域制限(地理的ブロッキング)を使用して特定地域だけアクセス制限(アクセス拒否)をすることが可能です。
具体的にはエッジロケーションによる地理的制限を有効化することで、ディストリビューションに関連するすべてのファイルへのアクセスを制限し、国レベルでアクセスを制限できます。
署名付き URL と署名付き Cookie
署名付き URL と署名付き Cookie の使いどころです。
■署名付き URL を使うケース
- アプリケーションのダウンロードなど、個々のファイルへのアクセスを制限したい。(みんな同じファイルにアクセスをする。)
- ユーザーがクッキーをサポートしていないクライアントを使用している。
- URL が変更しても構わない。
■署名付き Cookie を使うケース
- HLS形式の動画のすべてのファイル、またはWebサイトの購読者領域のすべてのファイルなど、制限のある複数のファイルへのアクセスを提供したい。例えば、AさんはファイルAにアクセス可能、BさんはファイルBにアクセス可能など。
- URL を変更したくない。
Amazon CloudFront のコスト
AWS からのデータ転送とリクエストによって決まります。
リクエストは数であったりリクエストの種類であったり場所であったりします。
■Amazon CloudFront のコストについて
- データ転送出力(転送アウト)(GB 単位) (インターネット/オリジン)
- HTTP/HTTPS リクエスト
-
オリジンへのリージョン内データ転送アウト (GB 単位)
- トラフィックの分散(データ転送とリクエストの価格は地域によって異なり、価格はコンテンツが配信されるエッジの場所に基づいています。)
オリジンサーバのフェイルオーバー設定も可能
オリジンサーバの可用性を向上させるためにオリジンサーバのグループを作成し、CloudFrontのプライマリオリジンとセカンダリオリジンを設定できます。
プライマリオリジンが HTTP ステータスコードでエラーを返したらセカンダリオリジンにフェイルオーバーさせることができます。
オリジンアクセスアイデンティティー(Origin Access Identity)で S3バケットへのアクセスを制御する
オリジンアクセスアイデンティティー(Origin Access Identity)で S3バケットへのアクセスを制御することが可能です。
-
オリジンアクセスアイデンティティ(OAI)と呼ばれる特別な CloudFront ユーザーを作成し、ディストリビューションに関連付けます。
-
CloudFront が OAI を使用してバケット内のファイルにアクセスしてユーザーに提供できるように、S3 バケットのアクセス許可を設定します。ユーザーが S3 バケットへのダイレクト URL を使用して、そこにあるファイルにアクセスできないようにします。
オンプレミス環境も CloudFront のオリジンサーバに設定できる
CloudFront のオリジンサーバは EC2 インスタンスなど AWS のリソースだけでなくオンプレミス環境のサーバでもオリジンサーバに設定できます。
この機能により手っ取り早くオンプレミス環境のサーバのパフォーマンスアップや負荷分散を実現できます。
AWS 認定試験の勉強方法
最近はコロナ禍という状況が影響しているのかどうか分かりませんが、勉強や学習意欲が非常に高くなっています。
インフラエンジニアとして AWS をメインに業務を行っていることもあり、毎日 AWS 認定試験の試験勉強をしています。
資格について IT エンジニアの場合は実績が重要なので資格は必要ないという意見もありますが、個人的には資格取得の勉強をすることにより
- 自分が知らない分野の知識やスキルが身につく
- 食わず嫌いで今まで取り組んでこなかった知識が身につくので業務を改善する新しいアイデアが生まれる
- 業務が捗る
というメリットを感じています。
AWS 認定試験についは、Udemy を利用して飽きずに楽しく勉強しています。
■Udemy のメリット
大量に問題があるので、飽きずに楽しく勉強ができます。
私の場合はテキストを読んで勉強することが非常に苦手ですぐに飽きてしまします。
しかし Udemy の大量の模擬試験問題集を解き、解答を確認して、不明な点は AWS の公式サイトを確認して学習しているので、集中して学習を続けることができます。
とにかく大量の問題を解くことが私にとって学習を続けられる唯一の方法のような気がします。
ちなみに Udemy ではたまにプレゼント企画もやっています。
先日は1つの講座を申し込んだ際に「How to Learn: Effective Approaches for Self-Guided Learning」の講座を無料で受講することが出来ました。
コメント