24
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS CloudFront 署名付きcookieの作り方

Last updated at Posted at 2016-12-05

はじめに

CloudFrontでプライベートなコンテンツを配布する必要があり、署名付きcookieを使うことになりました。公式のドキュメントに説明はありますが、ドキュメントが分散していたり、わかりづらかったので手順をまとめてみました。

手順

1. CloudFront用のキーペアを作成する

コンソールから作成する方法と、ローカルでキーペアを作成してからAWSにアップロードする方法とがある。
コンソールから作成する方法は、このページ(http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html )の「AWS マネジメントコンソールで CloudFront キーペアを作成するには」を参照。
プライベートキーをダウンロードして、「private_pk.pem」のファイル名で保存する。また、アクセスキーをメモしておく。

ルートアカウントでログインしないと、CloudFront用のキーペアは作成できないので注意。IAMユーザーでキーペアを作成しようとすると、権限がないとのエラーになる。

2. ポリシーステートメントを用意する

ポリシーステートメントの例:

{"Statement":[{"Resource":"http*://test.example.com/*","Condition":{"DateLessThan":{"AWS:EpochTime":1501372800}}}]}

JSON形式でドメインや有効期限などを設定する。他にも、DateGreaterThanやIpAddress(特定のIPからのみアクセスを許可)といったオプショナルパラメータを指定できる。「policy.json」のファイル名で保存する。

パラメータの説明はこちらを参照: http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html#private-content-custom-policy-statement-cookies-values

3. 1.で作ったポリシーステートメントをbase64エンコードする

cat ./policy.json | openssl base64 | tr '+=/' '-_~'

「./policy.json」は2.で作ったポリシーステートメントのパス。trは、URLクエリ内の無効な文字を置き換えるため。上のコマンドで出力された文字列をメモしておく。
コマンドの説明はこちらを参照: http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-linux-openssl.html

4. 1で作ったポリシーステートメントを署名し、base64エンコードする

cat ./policy.json | openssl sha1 -sign ./private_pk.pem | openssl base64 | tr '+=/' '-_~'

「./private_pk.pem」は、1.でダウンロードしたプライベートキーのパス。上のコマンドで出力された文字列をメモしておく。

5. cookieをセットする

CloudFront-Key-Pair-Id={1.でメモしたアクセスキー}
CloudFront-Policy={3.で作ったbase64エンコードされたポリシーステートメント}
CloudFront-Signature={4.で作った署名済みのポリシーステートメント}
で、プライベートコンテンツをダウンロードするブラウザにcookieをセットする。

コード例:

// cfKeyPairId/cfPolicy/cfSignatureに、上記の値が入っている
document.cookie = "CloudFront-Key-Pair-Id=" + cfKeyPairId + "; "
document.cookie = "CloudFront-Policy=" + cfPolicy + "; "
document.cookie = "CloudFront-Signature=" + cfSignature + "; "

6. 動作チェック

正しく設定できていれば、5.でcookieをセットしたブラウザからだけ、ポリシーステートメントで指定したURLにアクセスできる。

24
15
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?