静的コンテンツ配布用にAWSのCloudFrontを試してみました。おさらいしていきます。
署名付きURLを使用します。署名付きCookieについては以下の記事に書いています。
CloudFrontって?
CloudFrontは、Amazonが提供しているCDNです。CDNはContent Delivery Networkの略で、コンテンツ配信の品質を高めるためのサービスです。
CloudFrontではエッジロケーションと呼ばれるデータセンタを世界中に配備していて、物理的に近いエッジロケーションからユーザにコンテンツを配信するので遅延を抑えることができます。分散型のキャッシュサーバなので、メインコンテンツを配信するサーバの負荷を抑えられるという利点もあります。
作ってみたもの
今回構築した構成はこんなイメージです。
Private Cache Distributionパターンとか呼ばれているみたいです。署名付きURLの使用は必須ではありませんが、EC2アプリケーション側で認証済みのユーザのみS3のコンテンツへのアクセスを許可する、といったことを実現する必要がある場合などに導入します。上記構成では、直接S3上にあるファイルへのパスをURLに入力しても、アクセスを拒否するようになっています。
ユーザがS3上にあるファイルをダウンロードするまでのフローを簡単に説明すると、以下のようになります。
- ユーザがEC2インスタンス上にあるアプリケーションにログインする
- ユーザがアプリケーションに署名付きURLの発行を要求する
- アプリケーションが、ログイン済みユーザと判断した場合のみ、アプリケーションからそのユーザに対して署名付きURLを発行する
- ユーザは発行されたURLでCloudFrontにオブジェクト配信の要求をする
- 署名が有効であればユーザにオブジェクトを配信する
署名付きURLにはポリシーと呼ばれる概念でURLの有効期間などを設定することができて、有効期間が終わると認証済みユーザでもそのURLでアクセスできないようにしたりできます。
おわり
アプリケーション側もいじらなければいけないので少し面倒ですが、これでアプリケーション側で認証済みのユーザのみコンテンツへのアクセスを許可することが可能になりました。