kenjuの日記

About Programming, Mathematics and Security

CloudFrontで署名付きCookieで配信する場合のPolicy Statementsについて

署名付きCookieでコンテンツを配信する場合、コンテンツにアクセスできるユーザーを制御するため、ポリシーを適用することになると思います。

その場合、選択肢としては

  • 既定ポリシー
  • 独自ポリシー

の二つが存在します。

既定ポリシーと独自ポリシーの違い

↓のドキュメントを見る限り、既定ポリシーにできることは独自ポリシーに比べ「ユーザーがコンテンツにアクセスできなくなる日時を指定できる」制限しか提供できない、と機能が限られています。

docs.aws.amazon.com

Resourceオブジェクトでワイルドカード(*)を用いることでポリシーを複数のオブジェクト用に適用する必要がある場合、「独自ポリシー」を選択するしかありません。

独自ポリシーの定義方法

大まかに言うと

  1. ValidなJSON形式のPolicy Statementを生成する
  2. すべての空白文字 (タブと改行文字を含む) を削除
  3. Base64符号化
  4. URLとして無効な文字列の置換

の順でポリシーを生成します。ここで作成したポリシーを元に、以下のヘッダーを付与すると、署名付きCookieとして有効なリクエストが投げられます。

  • CloudFront-Signature: 上記で作成したポリシーをOpenSSLなどを用いて署名したもの
  • CloudFront-Policy : 上記で作成したポリシー
  • CloudFront-Key-Pair-Id : CloudFront キーペアのID

docs.aws.amazon.com

具体例

Linux commandsのみを用いて署名付きCookieを発行する手段についての具体例については、↓が参考になります。

dev.classmethod.jp