Develop with pleasure!

福岡でCloudとかBlockchainとか。

CloudFrontでプライベートコンテンツの公開:Overview of Private Content

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はSSLHTTPSとは異なる。CloudFrontのPrivate distributionによって提供されるセキュリティは、SSLHTTPSのようなネットワーク接続を介して転送されるデータの暗号化とは異なる。
CloudFrontのPrivate distributionは、ベースURLに追加されるリクエストパラメータを暗号化する。暗号化されたパラメータには、ポリシーステートメント(PublicとPrivateコンテンツそれぞれの制約と一緒に)が含まれていて、S3上のURLを認証する署名が含まれる。認証が成功すると、復号化されたポリシーステートメントのコンテンツが、指定された期間、指定されたIPから、バケットへのデータのリクエストを許可する。

Privateコンテンツを提供するプロセスには以下の主要な2つのパートがある。

http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/images/PrivateContent_TwoParts.gif

  1. エンドユーザがCloudFrontを介してのみコンテンツへのアクセスを許可するようにS3のバケットのセキュリティを確保する。
    S3のバケット内の全てのパブリックアクセスを禁止する。但し、CloudFrontがコンテンツを取得する許可は与える。この許可を与えるには、CloudFrontのアクセスID(読み取り権のある仮想ID)を作成する。それらの許可が与えられたCloudFrontは、S3のバケット内のプライベートなコンテンツへのアクセスが可能。
  2. エンドユーザのキャッシュされたコンテンツへのアクセスを制限する。
    アクセスを許可したいエンドユーザへは特別な署名がされたURLを提供する。


1,2の両パートとも実現してもいいし、または1のみを行うことも可能。
もし1だけ行った場合は、Publicコンテンツへのみアクセス可能なベーシックURLをまだ使うことになる。このベーシックURLでのアクセスは、CloudFrontを介してのみPublicなアクセスが可能な状態となっており、この場合は署名されたURLは必要無い。
もし2を行った場合、URLはプライベートでPublicなアクセスはできない。