CloudFrontでコンテンツ配信をする際に、特定のユーザにのみコンテンツの公開を許可する場合、Private Content Distributionって設定で公開する必要がある。
Private Contentの定義について、Using a Signed URL to Serve Private Contentをざっくり意訳。
PublicコンテンツとPrivateコンテンツ
- Publicコンテンツ
誰でもアクセス可能なコンテンツ。
誰でもアクセスできるようにS3のACL(Access Control List)を設定する。 - Privateコンテンツ
コンテンツにアクセスできるユーザを制限する。
CloudFrontからのみコンテンツの参照ができるようにS3のACLを設定する。
つまり、エンドユーザはCloudFrontを経由してのみアクセスできるようになる。
アクセス権を与えたいエンドユーザのために署名されたURLを生成する。
CloudFrontのPrivate distributionは以下の制約のいずれかもしくは全てに基づいている。
・署名されたURLが有効になる日付と時間を指定する開始日
・署名されたURLが無効となる終了日
・署名されたURLが利用可能なIPアドレス及びIPアドレスの範囲
Private distributionはSSLやHTTPSとは異なる。CloudFrontのPrivate distributionによって提供されるセキュリティは、SSLやHTTPSのようなネットワーク接続を介して転送されるデータの暗号化とは異なる。
CloudFrontのPrivate distributionは、ベースURLに追加されるリクエストパラメータを暗号化する。暗号化されたパラメータには、ポリシーステートメント(PublicとPrivateコンテンツそれぞれの制約と一緒に)が含まれていて、S3上のURLを認証する署名が含まれる。認証が成功すると、復号化されたポリシーステートメントのコンテンツが、指定された期間、指定されたIPから、バケットへのデータのリクエストを許可する。
Privateコンテンツを提供するプロセスには以下の主要な2つのパートがある。
- エンドユーザがCloudFrontを介してのみコンテンツへのアクセスを許可するようにS3のバケットのセキュリティを確保する。
S3のバケット内の全てのパブリックアクセスを禁止する。但し、CloudFrontがコンテンツを取得する許可は与える。この許可を与えるには、CloudFrontのアクセスID(読み取り権のある仮想ID)を作成する。それらの許可が与えられたCloudFrontは、S3のバケット内のプライベートなコンテンツへのアクセスが可能。 - エンドユーザのキャッシュされたコンテンツへのアクセスを制限する。
アクセスを許可したいエンドユーザへは特別な署名がされたURLを提供する。
1,2の両パートとも実現してもいいし、または1のみを行うことも可能。
もし1だけ行った場合は、Publicコンテンツへのみアクセス可能なベーシックURLをまだ使うことになる。このベーシックURLでのアクセスは、CloudFrontを介してのみPublicなアクセスが可能な状態となっており、この場合は署名されたURLは必要無い。
もし2を行った場合、URLはプライベートでPublicなアクセスはできない。