読者です 読者をやめる 読者になる 読者になる

Develop with pleasure!

福岡でCloudとかBlockchainとか。

CloudFrontでプライベートコンテンツの公開:Restricting End User Access

CloudFront EC2 AWS

Restricting End User Accessを意訳。
このセクションは長かった。。でももっと直訳じゃなく流暢な訳ができるようになりたいなー。

キーペアの作成

URLの署名は、RSA鍵及びポリシーステートメントを使用したRSAデジタル署名を作成するプロセス。このセクションでは、公開鍵と秘密鍵で構成されるキーペアを取得する方法を説明する。AWSは公開鍵を保持し、ユーザが秘密鍵を保持し、それをURLの署名に利用する。

ユーザが保持するキーペアを使用する場合

もし、ユーザが保持するキーペアを利用したい場合は、その公開鍵をAWSにアップロードする。ただし、この公開鍵はPEM形式でエンコードされたRSA鍵である必要がある。

公開鍵のアップロード方法

  1. AWSのWebサイトのAccounts画面のSecurity Credentialsをクリック。
  2. AWSアカウントでログインするとSecurity Credentials画面が表示される。
  3. 画面のAccess CredentialsセクションでKey Pairsタブをクリック。
  4. Amazon CloudFront Key Pairsエリアで、Upload Your Own Key Pairをクリック。
  5. 表示に従い、公開鍵をアップロード。


AWSで生成された公開鍵を使用する方法
まだキーペアを持っていない場合は、AWSでキーペアを生成し公開鍵をユーザのAWSアカウントに紐付けることができる。
AWSでキーペアを生成する方法

  1. AWSのWebサイトのAccounts画面のSecurity Credentialsをクリック。
  2. AWSアカウントでログインするとSecurity Credentials画面が表示される。
  3. 画面のAccess CredentialsセクションでKey Pairsタブをクリック。
  4. Amazon CloudFront Key Pairsエリアで、Create a New Key Pairをクリック。
  5. ダイアログボックスから、生成された秘密鍵をダウンロードする。


秘密鍵はユーザ自身で厳密に管理すること。この鍵だけが、パーミッションが設定されたファイルを読むことができる。秘密鍵は600のパーミッションを設定すること。(Windowsの場合は適切なセキュリティ設定を)

次のステップでは、署名されたURLを要求するようにdistributionの設定を変更する。

署名されたURLを要求する

URLが必ず署名されるようにPrivateコンテンツDistributionを設定する必要がある。ユーザは自分のAWSアカウント以外に最大5つのAWSアカウントまで1つのDistributionのURLに署名できる。ちなみにユーザが認可したそれぞれのAWSアカウントはそれぞれのアカウント毎にキーペアを作成し使用する必要がある。尚、署名されたURLは、URLの中に署名時の鍵IDが含まれる。

URLは必ず署名されるように指定する
URLが必ず署名されるようにするには、distributionもしくはストリーミングdistributionの設定にTrustedSigners 要素を追加する。

誰が署名できるか指定する

  1. もしユーザ自身が署名したい場合は、TrustedSigners要素に空の子要素を追加する。
  2. 自分以外に署名権限を与えたいユーザのAWSアカウントのためにTrustedSigners要素の子要素にAwsAccountNumberを追加する。注意:アカウント番号からダッシュは削除しておく必要がある。


AWSアカウント番号は、AccountActivity画面に右上に表示されている番号↓。

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

以下の例は、PrivateコンテンツDistributionを作成し、ユーザ自身の他に2つのAWSアカウントが署名されたURLを作成できるようにするリクエストである。

POST /2010-11-01/distribution HTTP/1.1
[Required headers]
				
<?xml version="1.0" encoding="UTF-8"?>
<DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2010-11-01/">
  <S3Origin>
     <DNSName>mybucket.s3.amazonaws.com</DNSName>
     <OriginAccessIdentity>
     origin-access-identity/cloudfront/E127G7VVVYK51Z
     </OriginAccessIdentity>
  </S3Origin>
  <CallerReference>20091130090000</CallerReference>
  <Comment>My comments</Comment>
  <Enabled>true</Enabled>
  <TrustedSigners>
    <Self/>
    <AwsAccountNumber>123499998765</AwsAccountNumber>
    <AwsAccountNumber>098711114567</AwsAccountNumber>
  </TrustedSigners>
</DistributionConfig>

もし、ストリーミング用のdisributionを扱う場合は、Privateストリーミングdistributionのリクエストに似ている。

POST /2010-11-01/streaming-distribution HTTP/1.1
[Required headers]
				
<?xml version="1.0" encoding="UTF-8"?>
<StreamingDistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2010-11-01/">
   <S3Origin>
     <DNSName>mystreamingbucket.s3.amazonaws.com</DNSName>
     <OriginAccessIdentity>
     origin-access-identity/cloudfront/E127G7VVVYK51Z
     </OriginAccessIdentity>
  </S3Origin>
  <CallerReference>20091130090000</CallerReference>
  <Comment>My comments</Comment>
  <Enabled>true</Enabled>
  <TrustedSigners>
    <Self/>
    <AwsAccountNumber>123499998765</AwsAccountNumber>
    <AwsAccountNumber>098711114567</AwsAccountNumber>
  </TrustedSigners>
</StreamingDistributionConfig>

一度、信頼できる署名者を指定すると、署名者がActiveになっているか確認する。署名者がActiveになるには、以下の両方が満たされる必要がある。

  • AWSアカウントが少なくとも1つ以上のActiveなキーペアを持っている。
  • CloudFrontにActiveなキーペアを認識されている。(キーペア作成後間もなくはCloudFrontがキーペアに認識していない可能性がある)

distributionのActiveな信頼された署名者を決めるには、distributionの設定内容だけでなくdistribution全体の情報を取得する。ActiveTrustedSigners要素を含むレスポンスは、それぞれの署名者のIDと署名者のAWSアカウントに紐付けられたActiveなキーペアのリストである。もし署名者がActiveなキーペアを持っていない場合は、CloudFront はそのユーザを署名者としては認識しない。

次のレスポンスの例は、自身が2つのActiveなキーペアを持っておりIDが123499998765 のAWSアカウントが1つのActiveなキーペアを持っている。しかし3つめの署名者(IDが09871114567)はまだActiveなキーペアを持っておらず署名者としての作業はできない。

200 OK
ETag: E2QWRUHAPOMQZL
x-amz-request-id: request_id

<Distribution xmlns="http://cloudfront.amazonaws.com/doc/2010-11-01/">
   <Id>EDFDVBD632BHDS5</Id>
   <Status>Deployed</Status>
   <LastModifiedTime>2009-11-19T19:37:58Z</LastModifiedTime>
   <DomainName>d604721fxaaqy9.cloudfront.net</DomainName>
   <ActiveTrustedSigners>
      <Signer>
         <Self/>
         <KeyPairId>APKAI72T5DYBXZDKA7TA</KeyPairId>
         <KeyPairId>APKAU72D8DYNXZDKA8DP</KeyPairId>
      </Signer>
      <Signer>
         <AwsAccountNumber>123499998765</AwsAccountNumber>
         <KeyPairId>APKA9ONS7QCOWWZU7BP6</KeyPairId>
      </Signer>
      <Signer>
         <AwsAccountNumber>098711114567</AwsAccountNumber>
      </Signer>
   </ActiveTrustedSigners>			
   <DistributionConfig> 
      <S3Origin>
         <DNSName>mybucket.s3.amazonaws.com</DNSName>
         <OriginAccessIdentity>
         E74FTE3AJFJ256A
         </OriginAccessIdentity>
      </S3Origin>
      <CallerReference>20091130090000</CallerReference>
      <Comment>My comments</Comment>
      <Enabled>true</Enabled>
      <TrustedSigners>
         <Self/>
         <AwsAccountNumber>123499998765</AwsAccountNumber>
         <AwsAccountNumber>098711114567</AwsAccountNumber>
      </TrustedSigners>
   </DistributionConfig>
   </Distribution>

ストリーミングdistributionのレスポンスはDistribution要素とDistributionConfig要素がStreamingDistribution要素とStreamingDistributionConfig要素に置き換わる。

次のステップでは、署名されたURLを作成する。

署名されたURLの作成

署名されたURLには、ポリシーステートメントと署名の作成が必要となる。このセクションでは、署名されたURLと署名の作成だけでなく、どのように署名されたURLが構築されるかを説明する。

署名されたURLの概要

署名されたURLは、複数のパートで構成されている。以下はCloudFrontの署名されたURLの例。

http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/images/SignedURL.jpg

  1. ファイルもしくはメディアストリームの識別子を持つCloudFrontのドメイン名。(これがベースURL)
  2. 暗号化されたポリシーステートメントのリクエストパラメータ
  3. 暗号化された署名のリクエストパラメータ
  4. 署名を作成したアカウントのキーペアIDのリクエストパラメータ


PrivateURLの最も単純な形式は、署名、ID、有効期限が使用したURL。このURLは有効期限による制限だけのため、暗号化されたポリシーステートメントは省略される。カスタムポリシーは、有効期限でなく署名とポリシーのリクエストパラメータを必要とする。

重要:
署名されたURLには、任意の空白や改行を含めることはできない。文字列の終わりに改行文字が含まれないようにすべき。また、アプリケーションコード内の文字列内にエスケープ文字列を含める必要があるかもしれない。

Private URLの各セグメントについて、以下の例で説明する。

最初のセグメントは、CloudFront distributionのドメイン名と受け取るファイル名(demo.txt)である。クエッションマークは、このマークの後にリクエストパラメータが続くことを意味している。

http://dekrsqm7un9m0.cloudfront.net/demo.txt?

以下のBase64エンコードされた文字列は、リクエストパラメータとして暗号化されたポリシーステートメントである。

Policy=eyANCiAgICJTdGF0ZW1lbnQiOiBb
eyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2Rl
bW8ucGhwIiwgDQogICAgICAiQ29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6
U291cmNlSXAiOiIyMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4i
OnsiQVdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp7IkFX
UzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo=

&で区切られている以下のリクエストパラメータは、Base64エンコードされた署名である。

&Signature=nitfH
RCrtziwO2HwPfWw/yYDhUF5EwRunQA+j19DzZrvDh6hQ73lDx/+ar3UocvvRQVw6EkC/GdpGQyyOSKQi
m+TxAnW7d8F5Kkai9HVx0FIu+5jcQb0UEmatHw3FTxb3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3f
VYNGQI=

リクエストパラメータKey-Pair-Idは、常に必須なパラメータである。

&Key-Pair-Id=APLDH2VGALRTSQKAIQH3


続いて、ポリシーステートメントと署名を作成する必要がある。

ポリシーステートメントと署名の作成

ポリシーステートメントは、Private URLに制限を指定する。ポリシーには、cannedとcustomという2つのバージョンがある。cannedポリシーステートメントは短く、指定する条件は1つで、そのURLが無効となる終了日を指定する。customポリシーは、開始日、終了日、IPアドレスもしくはIPアドレスのレンジを条件に指定できる。cannedとcustomの両ケースともUTF-8のJSON形式で定義される。

署名は、署名者のキーペアの秘密鍵で暗号化されたRSAのSHA1形式のポリシーステートメントのハッシュである。

署名されたURLの作成

  1. ポリシーステートメントを作成。
  2. キーペアの秘密鍵を使用してRSA-SHA1のデジタル署名を作成。
  3. URLセーフな署名を作成
  4. URL内のリクエストパラメータSignatureの値として、署名のURLセーフなバージョンを付加。
  5. その他の必要なリクエストパラメータを付加。


重要:
署名されたURLは、そのURLが指すオブジェクトへアクセスできない場合は機能しない。その場合は、CloudFrontアクセスIDにPrivateコンテンツへの読み取り権限があるか確認する必要がある。権限が無い場合は、S3のオブジェクト(バケットではない)のACLの設定を変更する必要がある。

このセクションのメインは、正しい署名文字列を作成する方法を説明すること。エンドユーザがURLをクリックすると、署名が検証され、エンドユーザが指定したURLにアクセスする権限があるかどうか確認するためにポリシーの内容を評価する。以下の表では、利用可能な2つのタイプのポリシー(canned or custom)について説明する。

タイプ 定義
canned cannedは有効期限に基づいて、単一のURLに対してアクセス制限を行う。URL自体にはポリシーを含めないため、URL自体は短い。またCloudFrontはURL自体の情報からcannedポリシーを構築し、署名を有効にし、エンドユーザがコンテンツへアクセスできるかどうか決定する。
custom ユーザのIPアドレス、アクセス開始日、アクセス終了日の条件を用いてアクセス制限を行う。URL内にポリシーを含める必要があり、結果的にcannedより長いURLとなる。CloudFrontはユーザがコンテンツへアクセスできるかどうか署名を検証するのにポリシーステートメントを使用する。

cannedポリシー
cannedポリシーを使用して署名されたURLは、通常のCloudFrontのURLに加え、次の表の3つのリクエストパラメータで構成される。

パラメータ 定義 タイプ 必須
Expires URLの有効期限。エポックもしくはUNIX時間。 String
Signature 署名のURLセーフなバージョン String
Key-Pair-Id 署名した秘密鍵のキーID String

署名の値は、以下のようなJSONポリシーのRSA-SHA1デジタル署名となる。(RESOURCEとEXPIRESは適宜定義。)

{"Statement":[{"Resource":"RESOURCE","Condition":{"DateLessThan":{"AWS:EpochTime":EXPIRES}}}]}

以下の表では、ポリシーの設定値について説明する。

ポリシーの値 設定値
RESOURCE (HTTP) Expires、Signature、Key-Pair-Idといったリクエストパラメータを除いたURLは以下のステップで作成される。URLに含まれる全てのクエリパラメータを保持する。署名の過程で作成されたフルURLの例を以下に示す。
http://d604721fxaaqy9.cloudfront.net/download/horizon.jpg?large=yes&license=yes &Expires=1258237200&Signature=TBD​ &Key-Pair-Id=PK123456789754
この内、RESOURCEの値は
http://d604721fxaaqy9.cloudfront.net/download/horizon.jpg?large=yes&license=yes
の部分となる。もしリクエストパラメータが無い場合はクエッションマークは必要ない。クォーテーション内の値をポリシー内に入れる。
RESOURCE (RTMP) HTTPであればフルURLがオブジェクトを一意に決定する。URLは署名の中に含めることができる。しかしストリーミング配信のコンテンツは常に完全なURLで定義することができない。ストリーミング配信では、署名を作成するのにストリーム名のみが必要となる。例えば署名を含むストリームは以下のようになる。
example/mp3_name.mp3?Expires=1258237200&Signature=TBD&Key-Pair-Id=PK123456789754
この場合、RESOURCEの値は、
example/mp3_name
となる。ストリーミング配信では、mp4:、mp3:といったプレフィックスをポリシー内のresource nameに含める必要はない。
よくMPEGファイルを参照している際に、署名が同梱されたURLのためにファイルの拡張子を省く必要があるかもしれない。例えば、mp3_name.mp3の代わりにmp3_nameと定義する。
EXPIRES 有効期限のパラメータの値を設定する。値はエポック秒もしくはUNIX時間の数字なのでポリシーの前後にクォーテーションを配置する必要は無い。HTTPの場合は、HTTPリクエストの開始時に有効期限をチェックする。コンテンツをストリーミングする場合は、再生イベントにのみ有効期限のチェックが行われる。これは、例えば一度ストリーミングコンテンツを再生し、その後有効期限が過ぎた後にリプレイをしてもエラーとなる。

署名は、空白や改行が取り除かれたポリシーステートメントのRSA-SHA1デジタル署名で、署名者のキーペアの秘密鍵で暗号化されている。あなたがどう暗号化の実装を行うかはプログラミング言語やプラットフォームに依存する。このドキュメントでは、PerlPHPC#でのサンプルを提供する。これらはJavaの開発リソースのリンク先にある。customURL制限のためのポリシーステートメントの詳細を説明している次のセクションを読んだ後、署名コード、サンプル、ツールの署名コード例を見て。



customポリシー


customポリシーを使って署名されたURLは通常のCloudFrontのURLに加え、以下の表に挙げられている3つのリクエストパラメータで構成される。cannedポリシーと異なり、Expiresパラメータは存在しない。その代わりPolicyパラメータが必須となる。

パラメータ 定義 タイプ 必須
Policy ポリシーのURLセーフなバージョン。URL内にPolicyパラメータがあることは、cannedポリシーではなくcustomポリシーであることを示す。 String
Signature 署名のURLセーフなバージョン String
Key-Pair-Id 署名した秘密鍵のキーID String


署名を作成するためのポリシーは、リソースとリソースにアクセスする条件を指定したUTF-8のJSONドキュメントである。ポリシーフォーマットの使用例を以下に示す。

以下の例では、次の条件を満たした場合にgame_download.zipオブジェクトへアクセスできる設定となっている。

  • エンドユーザのIPアドレスが145.168.143.0/24のレンジ内にある。
  • エンドユーザのアクセスが11/14/2011 at 10:20 p.m.以前であること。

カスタムポリシーステートメントの末尾には1つの改行コードがあるはず。


customポリシーの例

{
   "Statement": [{
      "Resource":"http://d604721fxaaqy9.cloudfront.net/game_download.zip",
      "Condition":{
         "IpAddress":{"AWS:SourceIp":"145.168.143.0/24"},
         "DateLessThan":{"AWS:EpochTime":1258237200}      
      }
   }]
}


次の表では、customポリシーで指定可能なパラメータについて説明する。

パラメータ 定義 必須
Resource (HTTP) キャッシュされたオブジェクト自体のURL。これはCloudFrontのドメイン名を使用したCloudFrontのURLであって、S3のバケットのURLではない。
この値は「http://」が含まれ、URLで指定されたリソースと一致する必要がある。複数の文字と一致するワイルドカード(*)や単一文字と一致するワイルドカード(?)を文字列の任意の場所で使用することができる。例えば「http://d604721fxaaqy9.cloudfront.net/*game_download.zip*」といった値は、「example_game_download.zip?license=yes」というデータとも一致する。
このパラメータを省略すると、URLに署名する際に使用するキーペアと関連付けられているdistributionに属している全てのオブジェクトへエンドユーザがアクセスできることになる。
×
Resource (RTMP) リソースとしてストリーミングコンテンツを使用する際は、ポリシー内でストリーム名を使用する。例えば、「example/mp3_name.mp3?Expires=1258237200 &Signature=TBD&Key-Pair-Id=PK123456789754」といった感じで。
MPEGファイルを参照している時は、署名内のURLにおいてファイルの拡張子を省略する必要があるかもしれない。例えば、「mp3_name.mp3」ではなく「mp3_name」とする。
×
DateLessThan これが唯一の必須パラメータ。このパラメータでURLの有効期限を"AWS:EpochTime":valueというフォーマットで指定する。(valueは秒数でクォーテーションは使用しない。)どんなPrivateコンテンツに対しても永久的なアクセスを許可しないように、この値を設定する。
DateGreaterThan オプションパラメータでURLの開始日(時間)を"AWS:EpochTime":valueというフォーマットで指定できる。(valueは秒数でクォーテーションは使用しない。) ×
IpAddress クライアントがGETリクエストを発行する際のIPアドレスを"AWS:SourceIp":"value"というフォーマットで指定。
IPは「10.52.176.0/24」のようなCIDR形式で定義する必要がある。詳細についてはRFCのサイトを参照。ただ、条件としては1つの値しか設定できない。例えば、2つの異なるレンジのIPをポリシーにセットすることはできない。
もし全てのIPからのリクエストを許可する場合は、このパラメータを省略する。
×

パラメータ名は上記の表のように正確にポリシーで指定する必要がある。ポリシーのパラメータの順序は関係ない。署名されたURLの例で示すように、ポリシーの条件セクションの一部として条件を定義する。

前述のポリシーの例に見られるように、ポリシーを有効にするためステートメントを囲む角括弧が必要となる。

ポリシーステートメントの RSA-SHA1デジタル署名を使用してSignatureリクエストパラメータを計算する必要がある。

署名されたURLの例


このセクションでは、次の表にnon-working credentials(何て訳すんだろ?)に基づく署名例を示す。サンプルの証明書はCloudFront_PrivateContent_SignatureExamples.zipとしてダウンロード可能。

  • 公開鍵
    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA7ki9gI/lRygIoOjV1yymgx6F
    YFlzJ+z1ATMaLo57nL57AavWhb68HYY8EA0GJU9xQdMVaHBogF3eiCWYXSUZCWM/
    +M5+ZcdQraRRScucmn6g4EvY2K4W2pxbqH8vmUikPxir41EeBPLjMOzKvbzzQy9e
    /zzIQVREKSp/7y1mywIDAQAB
    -----END PUBLIC KEY-----
  • 秘密鍵
    -----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQDA7ki9gI/lRygIoOjV1yymgx6FYFlzJ+z1ATMaLo57nL57AavW
    hb68HYY8EA0GJU9xQdMVaHBogF3eiCWYXSUZCWM/+M5+ZcdQraRRScucmn6g4EvY
    2K4W2pxbqH8vmUikPxir41EeBPLjMOzKvbzzQy9e/zzIQVREKSp/7y1mywIDAQAB
    AoGABc7mp7XYHynuPZxChjWNJZIq+A73gm0ASDv6At7F8Vi9r0xUlQe/v0AQS3yc
    N8QlyR4XMbzMLYk3yjxFDXo4ZKQtOGzLGteCU2srANiLv26/imXA8FVidZftTAtL
    viWQZBVPTeYIA69ATUYPEq0a5u5wjGyUOij9OWyuy01mbPkCQQDluYoNpPOekQ0Z
    WrPgJ5rxc8f6zG37ZVoDBiexqtVShIF5W3xYuWhW5kYb0hliYfkq15cS7t9m95h3
    1QJf/xI/AkEA1v9l/WN1a1N3rOK4VGoCokx7kR2SyTMSbZgF9IWJNOugR/WZw7HT
    njipO3c9dy1Ms9pUKwUF46d7049ck8HwdQJARgrSKuLWXMyBH+/l1Dx/I4tXuAJI
    rlPyo+VmiOc7b5NzHptkSHEPfR9s1OK0VqjknclqCJ3Ig86OMEtEFBzjZQJBAKYz
    470hcPkaGk7tKYAgP48FvxRsnzeooptURW5E+M+PQ2W9iDPPOX9739+Xi02hGEWF
    B0IGbQoTRFdE4VVcPK0CQQCeS84lODlC0Y2BZv2JxW3Osv/WkUQ4dslfAQl1T303
    7uwwr7XTroMv8dIFQIPreoPhRKmd/SbJzbiKfS/4QDhU
    -----END RSA PRIVATE KEY-----
  • Key-Pair-Id
    PK123456789754


OpenSSLパッケージを使うと次の例に示すようにリクエストパラメータを算出可能。OpenSSLの詳細については、http://www.openssl.org を参照。

以下のコマンドではURLセーフなポリシー値を作成する

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


以下のコマンドでは、URLセーフな署名値を作成する。

% cat policy | openssl sha1 -sign private-key.pem | openssl base64 | tr '+=/' '-_~'


注意:
必ずBase64エンコードされた結果から、改行文字を削除しておくこと。

いくつからのプログラミング言語での署名の暗号化例については、Signature Code, Examples, and Toolsを参照。




Canned ポリシーの例


以下のCannedポリシーの例は、署名されたURLを持つユーザに対しMon, 14 Nov 2011 22:20:00 GMT以前に「http://d604721fxaaqy9.cloudfront.net/horizon.jpg」へのアクセスを許可する。

オリジナルのURLはCloudFrontとリクエストパラメータで構成される以下のURL。

http://d604721fxaaqy9.cloudfront.net/horizon.jpg?large=yes&license=yes

署名内に暗号化されるポリシーステートメントは、オリジナルのURLとepoch/UNIXの秒単位での有効期限を使用する。

{"Statement":[{"Resource":"http://d604721fxaaqy9.cloudfront.net/horizon.jpg&#8203;?large=yes&license=yes","Condition":&#8203;{"DateLessThan":&#8203;{"AWS:EpochTime":1258237200}}}]}


URLセーフな署名は、RSA SHA1の暗号化の結果と暗号化の結果をBase64エンコードした結果により得られる。このプロセスに関する詳細な情報についてはSignature Code, Examples, and Toolsを参照。

Signature = Nql641NHEUkUaXQHZINK1FZ~SYeUSo&#8203;BJMxjdgqrzIdzV&#8203;2gyEXPDNv0p&#8203;YdWJkflDKJ3xIu&#8203;7lbwRpSkG98NBlgP&#8203;i4ZJpRRnVX4kX&#8203;AJK6tdNx6FucD&#8203;B7OVqzcxkxH&#8203;sGFd8VCG1Bk&#8203;C-Afh9~lOCMIY&#8203;HIaiOB6~5jt9&#8203;w2EOwi6sIIqrg_


以下は許可されたユーザ用の完全なURL。

http://d604721fxaaqy9.cloudfront.net/horizon.jpg?large=yes&license=yes&Expires=1258237200&Signature=Nql641NHE&#8203;UkUaXQHZINK&#8203;1FZ~SYeUSoBJMx&#8203;jdgqrzIdzV2gyEX&#8203;PDNv0pYdWJkfl&#8203;DKJ3xIu7lbwRp&#8203;SkG98NBlgPi&#8203;4ZJpRRnVX4&#8203;kXAJK6tdNx6FucD&#8203;B7OVqzcxkxHsG&#8203;Fd8VCG1BkC-Afh&#8203;9~lOCMIYHI&#8203;aiOB6~5jt9w&#8203;2EOwi6sIIqrg_&Key-Pair-Id=PK123456789754



Custom ポリシーの例1


以下のCustomポリシー例では、Mon, 14 Nov 2011 22:20:00 GMT以前にtrainingディレクトリ内の全てのオブジェクトへのアクセス許可を145.168.143.0/24ネットワークへ許可する。

以下のURLは特定のオブジェクト(training/orientation.avi)を指すが、ポリシーは複数のオブジェクトへアクセス可能なPrivate URLを作成する。

http://d604721fxaaqy9.cloudfront.net/training/orientation.avi


署名に使用するポリシーステートメントは、バケット内の任意のオブジェクトを指すためワイルドカード(*)が含まれる。サンプルの適切な構文を得るため次のポリシーファイルをダウンロードする。署名を算出する際に使用される文字列には空白や改行が含まれることに注意すること。必ず最後に改行文字があるべき。

{ 
   "Statement": [{ 
      "Resource":"http://d604721fxaaqy9.cloudfront.net/training/*", 
      "Condition":{ 
         "IpAddress":{"AWS:SourceIp":"145.168.143.0/24"}, 
         "DateLessThan":{"AWS:EpochTime":1258237200}      
      } 
   }] 
}
	


URLセーフなポリシーは、Base64エンコードされ以下のようにPolicy=の後に記載する。

Policy=eyAKICAgIlN0YXRlbWV&#8203;udCI6IFt7IAogICAgICAiUmVz&#8203;b3VyY2UiOiJodHRwOi8v&#8203;ZDYwNDcyMWZ4YWF&#8203;xeTkuY2xvdWRmcm9udC5&#8203;uZXQvdHJhaW5pbmcv&#8203;KiIsIAogICAgICAiQ29uZ&#8203;Gl0aW9uIjp7IAogICAgICA&#8203;gICAiSXBBZGRyZXNzIj&#8203;p7IkFXUzpTb3VyY2V&#8203;JcCI6IjE0NS4xNjguMT&#8203;QzLjAvMjQifSwgCiAgI&#8203;CAgICAgICJEYX&#8203;RlTGVzc1RoYW4i&#8203;OnsiQVdTOkV&#8203;wb2NoVGltZSI6MTI1&#8203;ODIzNzIwMH0gICAg&#8203;ICAKICAgICAgfSA&#8203;KICAgfV0gCn0K


URLセーフな署名は、RSA SHA1の暗号化の結果と暗号化の結果をBase64エンコードした結果により得られる。このプロセスに関する詳細な情報についてはSignature Code, Examples, and Toolsを参照。

Signature=cPFtRKvUfYNYmxek&#8203;6ZNs6vgKEZP6G3Cb4c&#8203;yVt~FjqbHOnMdxd&#8203;T7eT6pYmhHYzuDsFH4Jps&#8203;ctke2Ux6PCXcKx&#8203;UcTIm8SO4b29~1Q&#8203;vhMl-CIojki3Hd3~Unxjw&#8203;7Cpo1qRjtvrimW0DP&#8203;ZBZYHFZtiZXsaPt87&#8203;yBP9GWnTQo&#8203;aVysMxQ_

以下は許可されたユーザ用の完全なURL。

http://d604721fxaaqy9.cloudfront.net/training/orientation.avi?Policy=eyAKICAg&#8203;IlN0YXRlbWVudCI6IFt&#8203;7IAogICAgICAiUmV&#8203;zb3VyY2UiOiJodHRw&#8203;Oi8vZDYwNDcyMWZ4Y&#8203;WFxeTkuY2xvdWRmcm9udC5u&#8203;ZXQvdHJhaW5pbmcv&#8203;KiIsIAogICAgICA&#8203;iQ29uZGl0aW9uIjp7IAog&#8203;ICAgICAgICAiSXBB&#8203;ZGRyZXNzIjp7IkF&#8203;XUzpTb3VyY2VJcCI&#8203;6IjE0NS4xNjguMT&#8203;QzLjAvMjQifSwgCiAgI&#8203;CAgICAgICJEYXRlTG&#8203;Vzc1RoYW4iOns&#8203;iQVdTOkVwb2NoVGlt&#8203;ZSI6MTI1ODIzNzIwM&#8203;H0gICAgICAKICAgI&#8203;CAgfSAKICAgfV0g&#8203;Cn0K&Signature=cPFtRKvUfYNYmxek6ZNs6v&#8203;gKEZP6G3Cb4cyVt~F&#8203;jqbHOnMdxdT7eT6p&#8203;YmhHYzuDsFH4Jpsctke2U&#8203;x6PCXcKxUcTIm8SO&#8203;4b29~1QvhMl-&#8203;CIojki3Hd3~Unxjw7&#8203;Cpo1qRjtvrimW0DPZ&#8203;BZYHFZtiZXsaPt87yBP9&#8203;GWnTQoaVysMxQ_&Key-Pair-Id=PK123456789754



Custom ポリシーの例2


以下のCustomポリシー例では、指定されたキーペアIDに関連付けられたdistributionに属する全てのオブジェクトへのアクセス許可を216.98.35.1/32レンジのIPへ許可する。これらのオブジェクトが有効なのはSat, 30 Apr 2011 06:43:10 GMTからSun, 16 Oct 2011 06:31:56 GMTの間。

以下のURLは特定のオブジェクト(downloads/pictures.tgz)を指すが、ポリシーは複数のオブジェクトをカバーする。

http://d84l721fxaaqy9.cloudfront.net/downloads/pictures.tgz


署名に使用するポリシーステートメントは、URLの署名の際に使用したキーペアに関連付けられたdistributionから参照される任意のオブジェクトを指定するのにワイルドカード(*)を使用できる。サンプルの適切な構文を得るため次のポリシーファイルをダウンロードする。署名を算出する際に使用される文字列には空白や改行が含まれることに注意すること。必ず最後に改行文字があるべき。

{ 
   "Statement": [{ 
      "Resource":"http://*",
      "Condition":{ 
         "IpAddress":{"AWS:SourceIp":"216.98.35.1/32"},
         "DateGreaterThan":{"AWS:EpochTime":1241073790},
         "DateLessThan":{"AWS:EpochTime":1255674716}
      } 
   }] 
}


URLセーフなポリシーは、Base64エンコードされ以下のようにPolicy=の後に記載する。

Policy=eyAKICAgIlN0YXRlbWVud&#8203;CI6IFt7IAogICAgICAiUmVzb&#8203;3VyY2UiOiJodHRwOi8&#8203;vKiIsIAogICAgICAiQ29uZGl0aW&#8203;9uIjp7IAogI&#8203;CAgICAgICAiSXBB&#8203;ZGRyZXNzIjp7IkFXU&#8203;zpTb3VyY2VJcCI6IjIx&#8203;Ni45OC4zNS4xL&#8203;zMyIn0sCiAgICAgICAg&#8203;ICJEYXRlR3JlYXRlclR&#8203;oYW4iOnsiQV&#8203;dTOkVwb2NoVGltZSI6MT&#8203;I0MTA3Mzc5MH0sC&#8203;iAgICAgICAgI&#8203;CJEYXRlTGVzc1Ro&#8203;YW4iOnsiQVdTOkVw&#8203;b2NoVGltZSI6MTI1NTY3&#8203;NDcxNn0KICAgIC&#8203;AgfSAKICAgfV0&#8203;


URLセーフな署名は、RSA SHA1の暗号化の結果と暗号化の結果をBase64エンコードした結果により得られる。このプロセスに関する詳細な情報についてはSignature Code, Examples, and Toolsを参照。

Signature=rc~5Qbbm8EJXjUTQ&#8203;6Cn0LAxR72g1&#8203;DOPrTmdtfbWVVgQN&#8203;w0q~KHUAmB&#8203;a2Zv1Wjj8dDET4XSL~My&#8203;h44CLQdu4d&#8203;OH~N9huH7QfPSR~O4tIOS1W&#8203;WcP~2JmtVPoQyLlE&#8203;c8YHRCuN3nVNZJ0&#8203;m4EZcXXNAS-0x6Zco&#8203;2SYx~hywTRxWR~5Q_


以下は許可されたユーザ用の完全なURL。

http://d84l721fxaaqy9.cloudfront.net/downloads/pictures.tgz?Policy=eyAKICAgIlN0YXRlbWVudCI6IF&#8203;t7IAogICAgICAiUmVzb3&#8203;VyY2UiOiJodHRw&#8203;Oi8vKiIsIAogICAgICAiQ&#8203;29uZGl0aW9uIjp7&#8203;IAogICAgICAgICAiSXBBZGRyZX&#8203;NzIjp7IkFXUzpTb3Vy&#8203;Y2VJcCI6IjIxNi45OC&#8203;4zNS4xLzMyIn0sC&#8203;iAgICAgICAgICJEYXRlR3JlYXRl&#8203;clRoYW4iOnsiQVdTOk&#8203;Vwb2NoVGltZSI6MTI&#8203;0MTA3Mzc5MH0sCiAgI&#8203;CAgICAgICJEYXRlT&#8203;GVzc1RoYW4iOnsiQVdT&#8203;OkVwb2NoV&#8203;GltZSI6MTI1NTY3ND&#8203;cxNn0KICAgICAgfSAK&#8203;ICAgfV0gCn0K&Signature=rc~5Qbbm8EJX&#8203;jUTQ6Cn0LAxR72g1D&#8203;OPrTmdtfbWVVgQ&#8203;Nw0q~KHUAmBa2Zv1Wjj&#8203;8dDET4XSL~Myh44C&#8203;LQdu4dOH~N9huH7QfPSR~O4tIO&#8203;S1WWcP~2JmtVPoQ&#8203;yLlEc8YHRCuN3nVNZJ0&#8203;m4EZcXXNAS-0x6Zco2S&#8203;Yx~hywTRxWR~5Q_&Key-Pair-Id=PK123456789754