Amazon CloudFront +カスタムオリゞン

箄1幎間、AmazonはCloudFrontサヌビスのカスタムオリゞンサポヌトを远加したした。 私は長い間、さたざたなCDNに泚目しおいたす。



正盎に蚀っお、掚定トラフィックが1か月あたり50〜100 GBを超えおはならない小さなプロゞェクトや開始のために、珟圚CDNを芋぀けるのは困難です。 圌らは非垞に高䟡であるか、倧量のトラフィックを生成するサむトでのみ動䜜し、ほずんどすべおがプリペむドベヌスで動䜜したす。 実際に䜿甚したトラフィックに察しお支払うのではなく、ある皋床の金額に察しおは解決できない堎合がありたす。



この点で、Amazon CloudFrontは競合他瀟ず比范しお有利です。 ここでの料金は、実際に䜿甚されたトラフィックに察しおのみ請求され、GBあたり平均$ 0.15の地域にもよりたすが、少額です。 ただし、CloudFrontをS3サヌビスず連携しお䜿甚する必芁があり、コストが増加する前に、独自のサヌバヌをオリゞンサヌバヌずしお䜿甚できるようになりたした。



プロゞェクトでCloudFrontサポヌトを接続、支払い、远加した方法に぀いお詳しく説明したいず思いたす。



お支払い



最初に、サヌビスに察する支払い方法ず、この段階で盎面した困難に぀いおお話したいず思いたす。



ですから、私自身はりクラむナ出身ですが、すべおたたは倚くのCIS諞囜にずっお、この情報は重芁だず思いたす。 Amazonで提䟛されおいる支払い方法は、クレゞットカヌドによる支払いのみです。 ぀たり WebMoneyのような電子マネヌは受け入れられたせん。 したがっお、私は銀行に行っおクレゞットカヌドを開かなければなりたせんでした。 Avalを遞択したしたが、ほずんどの堎合銀行は重芁ではありたせんが、クレゞットカヌド自䜓は重芁です。 ドルVisa Classicを発芋し、それを開いたずきに、銀行の埓業員に、このカヌドを䜿甚しお倖囜のカヌドでむンタヌネットでの賌入に察しお支払うこずができるかどうかを明確にしたした。 カヌドを開くには10営業日かかりたした。



今、私が遭遇した問題に぀いお

1.カヌドのアクティベヌション-ここで、私は少し自分でやったこずを認めなければなりたせん。 銀行のキャッシュデスクを介しおカヌドにお金を入れたすが、ATMを介しお䜕らかのアクションを実行するずお金が既に存圚しおいるはずですが残高確認が行われたす。 いずれにせよ、銀行でカヌドがどのように有効化されおいるかを銀行員に確認する䟡倀がありたす。



2. CVV-アマゟンは、私をずおも驚かせたしたが、カヌドのCVVコヌドを芁求したせん。 登録時には、カヌド番号、有効期限、カヌド名矩人の名前のみを入力する必芁がありたす。 刀明したように、AmazonはこのCVVが䞍芁なスキヌムに埓っお動䜜したすが、支払い時たたは氞続的に、CVVコヌドによるカヌドの保護を無効にする必芁がありたす。 これは、銀行のコヌルセンタヌを介しお電話で行うか、カヌドを開いた郚門で明现曞を䜜成しお行いたす。



原則ずしお、これらはすべお私の支払いで生じた問題です。



登録ずキヌ



登録プロセスは、 CloudFrontペヌゞから開始できたす。 登録は非垞に簡単です。登録手順の1぀で、カヌドに関する情報を入力する必芁があり、怜蚌に合栌するず、アカりントが登録されたす。 CloudFrontアカりントずずもに、カスタムオリゞンを䜿甚する堎合でも、S3サヌビスのアカりントが自動的に䜜成されたす。



登録埌、APIず通信し、ファむルの安党なURLを生成するために必芁なキヌを生成する必芁がありたす。 これを行うには、アカりントのセキュリティ資栌情報セクションに移動したす。 ここには3぀のタブがありたす。

1.アクセスキヌ-このタブのデヌタは、APIぞのリク゚ストの認蚌ヘッダヌを生成するために必芁です。



2. X.509蚌明曞-SOAPを介したAPI芁求のキヌ。



3.キヌペア-安党なURLを生成するためのキヌ。



REST APIず通信するずきの暙準ヘッダヌ





すべおのREST APIリク゚ストには、次のヘッダヌが必芁です。

1. x-amz-date-リク゚ストの日付。 日付は、 RFC 2616仕様の「日付/時刻圢匏」セクションで説明されおいる圢匏のいずれかでなければなりたせん。



2. Content-Type-リク゚ストボディタむプ、通垞は「application / xml」。



3. Content-Length-リク゚スト本文の長さ。



4.承認-承認ヘッダヌの構造は次のずおりです "AWS aws_secret_key_idsignature"、ここで

4.1 AWS-定数文字列ずそれに続く空癜文字。

4.2 aws_secret_key_id-アカりントの[アクセスキヌ]タブの[ セキュリティ認蚌情報]ペヌゞにありたす。

4.3眲名-x-amz-dateヘッダヌで指定したリク゚スト日ずaws_secret_key_idが配眮されおいるペヌゞにある秘密鍵に基づいお、sha1ハッシュアルゎリズムを䜿甚しお生成された怜蚌眲名。 以䞋は、眲名を生成するPHPコヌドです。

  1. $signature = base64_encode ( hash_hmac ( 'sha1' , $requestDate , $awsSecretKey , true ) ) ;





配垃





Amazon CloudFrontを介しおファむルを配垃する機䌚を埗るには、Distributionを䜜成する必芁がありたす。

1぀のアカりントで、最倧100個のDistributionを䜜成できたす。1぀のDistribution内のファむルの数は制限されおいたせん。

配垃には2぀のタむプがありたす。

1.ダりンロヌド-HTTPおよびHTTPSを介しおファむルを配垃したすHTTPSは少し高䟡です。



2.ストリヌム-RTMPプロトコルを介したビデオおよびオヌディオファむルの配信甚。 すぐに倱望したいのですが、Streamタむプの配信はカスタムオリゞンでは機胜せず 、オリゞンサヌバヌずしおのS3でのみ機胜したす。



蚘事のタむトルず段萜2に基づいお、ダりンロヌド配垃のみを怜蚎したす。 新しいダりンロヌド配垃を䜜成するためのXML芁求の䟋をすぐに提䟛したす。

<?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  1. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  2. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  3. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  4. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  5. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  6. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  7. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  8. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  9. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  10. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  11. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  12. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  13. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  14. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  15. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  16. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >



  17. <?xml version = "1.0" encoding = "UTF-8" ?> <DistributionConfig xmlns = "http://cloudfront.amazonaws.com/doc/2010-11-01/" > <CustomOrigin > <DNSName > www.example.com </DNSName > <HTTPPort > 80 </HTTPPort > <OriginProtocolPolicy > http-only </OriginProtocolPolicy > </CustomOrigin > <CallerReference > your unique caller reference </CallerReference > <CNAME > mysite.example.com </CNAME > <Comment > My comments </Comment > <Enabled > true </Enabled > <TrustedSigners > <Self /> </TrustedSigners > <Logging > <Bucket > mylogs.s3.amazonaws.com </Bucket > <Prefix > myprefix/ </Prefix > </Logging > </DistributionConfig >





リク゚ストURL  cloudfront.amazonaws.com/2010 –11–01 /配垃

リク゚スト方法 POST



各タグの意味をさらに詳しく説明したす。

1. CustomOriginは、オリゞンサヌバヌのパラメヌタヌが蚭定される領域です。

1.1 DNSName-ドメむンオリゞンサヌバヌ。

1.2 HTTPPort-HTTP経由でオリゞンサヌバヌにアクセスするためのポヌト。

1.3 OriginProtocolPolicy-Amazonは、オリゞンサヌバヌからファむルを2぀の方法でリク゚ストできたす。httpのみ-垞にHTTPプロトコルを䜿甚、match-viewer-゚ンドナヌザヌがファむルのリク゚ストに䜿甚したプロトコルを䜿甚したすが、HTTPたたはHTTPSのみ。

2. CallerReference-リク゚ストの䞀意の識別子。数倀でもアルファベットでもかたいたせん。䞻なものは䞀意です。

3. CNAME-ディストリビュヌションごずに、Amazonはcloudfront.netドメむンのサブドメむンを䜜成したす。 このドメむンでは、1぀たたは耇数のCNAMEをハングさせるこずができたす。

4.コメント-配垃甚のコメント。

5.有効-配垃がアクティブかどうかを蚭定したす。

6. TrustedSigners-配垃は、それらぞのアクセスのタむプパブリックずプラむベヌトによっおも分けられたす。 誰もがパブリックディストリビュヌションのファむルにアクセスできたす。プラむベヌトファむルにアクセスするには、有効期限、IPアクセスなどを指定できる安党なURLを䜜成する必芁がありたす。 プラむベヌト配垃を䜜成するには、このセクションを指定する必芁がありたす。

7.ログ-ク゚リログパラメヌタを蚭定するセクション

7.1バケット-AmazonはS3サヌビスを䜿甚しおログを保存するため、それらを䜿甚する堎合はS3に远加料金を支払う必芁がありたす。 このパラメヌタヌは、ログが保存されるS3バケットを蚭定したす。

7.2接頭蟞-ログ接頭蟞、私が理解しおいるように、これはログのディレクトリのようなものです。



Distributionを䜜成した盎埌は、InProgressステヌタスになっおいたすが、ステヌタスをActiveに倉曎した埌にのみ䜜業を開始できたす。 通垞、10〜15分かかりたす。 Distributionのステヌタスを確認するには、APIリク゚ストを䜿甚しおDistributionに関する情報を取埗できたす。



リク゚ストURL  cloudfront.amazonaws.com/2010 –11–01 / distribution / distribution_id

リク゚スト方法 GET



distribution_id-Amazonは、Distributionを䜜成するリク゚ストの成功に応答しお戻りたす。



ファむルアップロヌド機胜



それで、最も重芁なこずに到達したした-CDN経由でのファむルの返华です。 いく぀かの機胜がありたす。

1. Amazon CloudFrontは、CDN.Tからファむルがリク゚ストされたずきに転送されたURLパラメヌタヌをオリゞンサヌバヌに送信したせん。 e。゚ンドナヌザヌがファむルexample_sub_domain.cloudfront.net/image_1.jpg?param=valueを芁求した堎合、サヌバヌのオリゞンからこのファむルを芁求するず、「param = value」を受け取りたせんが、ログには完党なURLが含たれたす。



2. Distributionでファむルを曎新したす。 次の堎合にファむルが芁求される堎合がありたす。

2.1 CloudFrontサヌバヌ䞊にない堎合;

2.2ファむルの有効期限が切れおいる堎合。 有効期限は、ヘッダヌを䜿甚しお制埡できたすcache-control、expires、pragma。 デフォルトでは、ファむルは24時間キャッシュされたす。

2.3 無効化リク゚ストを䜿甚しおDistributionからファむルが削陀された堎合。

゚ンドナヌザヌがファむルをリク゚ストした堎合、Amazonは他のCDNが行うようにファむルの倉曎日をチェックしないこずに泚意しおください。 ファむルを倉曎するずきにAmazonサヌバヌが自動的にファむルを取埗するようにする堎合は、ファむル名にバヌゞョンたたは倉曎日を指定する必芁がありたす。



3.オリゞン偎のファむルの保護-オリゞンサヌバヌずしお独自のものを䜿甚する堎合぀たり、蚘事で説明する堎合Amazonは、オリゞンサヌバヌ䞊のファむルを䞍正アクセスから保護したせん。このタスク完党に起源の所有者にありたす。 ただし、同時に、Amazon自䜓がHTTPたたはHTTPSを介しおこれらのファむルにアクセスできるように、ファむル保護を実装する必芁がありたす。 同時に、Amazonはファむルをリク゚ストするずきにデヌタを送信したせん。これにより、リク゚ストは他のリク゚ストず区別されたす。 これに基づいお、オリゞンサヌバヌ䞊のメンバヌファむルを保護するための唯䞀のオプションがありたす-IP保護。 次の圢匏の.htaccessでメンバヌファむルを保護したす。



  1. 泚文 拒吊 、 蚱可
  2. すべお から 拒吊




Amazonがファむルにアクセスできるように、次のルヌルを.htaccessに远加したした
  1. Amazon CloudFront
  2. 216.137.60.0/ 23 から 蚱可




ここでマスク216.137.60.0/23を取りたした 。



公開URL



ファむルが次のオリゞンサヌバヌで利甚可胜であるず仮定したす。







  1. origin.example.com/images/image_1.jpg




次に、Amazon CloudFrontを介しお提䟛するには、次のURLを生成する必芁がありたす。







  1. example_sub_domain.cloudfront.net/images/image_1.jpg




ここで、example_sub_domain.cloudfront.netは、origin.example.comの発信元に䞀臎するそのDistributionのドメむンです。



プラむベヌトURL



プラむベヌトURLは2぀のタむプに分けられたす。

1.猶詰-URLの有効期限のみを指定できたす。

2.カスタム-URlが有効になる期間ず、URLを䜿甚できる1぀以䞊のIPアドレスを指定できたす。



URLが有効になる日付のみが必芁だったので、定型URLを生成する䟋を瀺したす。



  1. 関数 getSignedUrl  $ url 
  2. {
  3. //有効期限を準備したす
  4. $ expireDate = time   + SECURE_URL_TIMEOUT ;
  5. // Cloudfrontプラむベヌトキヌペアを読み取りたす
  6. $ fp = fopen  CLOUD_FRONT_KEY_PAIR_PATH 、 "r"  ;
  7. $ privateKey = fread  $ fp 、 8192  ;
  8. fclose  $ fp  ;
  9. //秘密鍵を䜜成したす
  10. $ privateKey = openssl_get_privatekey  $ privateKey  ;
  11. if   $ privateKey  {
  12. falseを 返し たす 。
  13. }
  14. // JSONポリシヌを準備したす
  15. $ json = '{"Statement"[{"Resource" "' 。 $ url 。 '"、 "Condition"{"DateLessThan"{"AWSEpochTime"' 。 $ expireDate 。 '}}}]}' ;
  16. //秘密鍵でポリシヌに眲名したす
  17. if   openssl_sign  $ json 、 $ signature 、 $ privateKey 、 OPENSSL_ALGO_SHA1   {
  18. falseを 返し たす 。
  19. }
  20. // URLセヌフ眲名ポリシヌを䜜成したす
  21. $ signature = str_replace  array  '+' 、 '=' 、 '/'  、 array  '-' 、 '_' 、 '〜'  、 base64_encode  $ signature   ;
  22. // URLを構築したす
  23. $ urlを 返したす
  24. 。 'Expires =' 。 $ expireDate
  25. 。 'Signature =' 。 $眲名
  26. 。 'Key-Pair-Id =' CLOUD_FRONT_KEY_PAIR_ID ;
  27. }




この関数は、次のパラメヌタヌず定数を䜿甚したす。

1. $ urlは、http//example_sub_domain.cloudfront.net/images/image_1.jpgずいう圢匏の゜ヌスURLです。

2. SECURE_URL_TIMEOUT-URLのタむムアりト秒単䜍。

3. CLOUD_FRONT_KEY_PAIR_PATH-秘密キヌぞのパス。[キヌペア]タブの[ セキュリティ資栌情報]ペヌゞで生成できたす。

4. CLOUD_FRONT_KEY_PAIR_ID-秘密キヌの識別子。キヌ自䜓ず同じ堎所にありたす。



この関数の出力はプラむベヌトURLになりたす。これにより、゚ンドナヌザヌは、割り圓おられたタむムアりトで、プラむベヌトDistributionにあるコンテンツにアクセスできたす。



䟿利なリンク



1. Amazon CloudFront-サヌビスのメむンペヌゞ。

2. 開発者ガむド -CloudFrontサヌビスの詳现な説明。

3. APIリファレンス -CloudFrontサヌビスのREST APIドキュメント。

4. AWS SDK for PHP-すべおのAmazonサヌビスを操䜜するためのクラスを含むPHPラむブラリ。 非垞に䟿利なもの。

5. テストコヌド -テストプロセス䞭に䜜成した小さなコヌド。



PS



基本的に私が曞きたかったのはこれだけです。 この蚘事は、CloudFrontのカスタムオリゞンサヌバヌの䜿甚に関する完党なガむドであるずは䞻匵しおいたせんが、S3を必芁ずしない人にずっお圹立぀こずを願っおいたす。 ご枅聎ありがずうございたした。



All Articles