タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

CloudFront + 署名付きURL でFlashのcrossdomain.xml に対応する方法(マルチオリジン編)

Why?

CloudFrontを通してHLS動画配信などを行う場合、JWPlayerなどFlashを使うのが一般的です。(PCの場合)

ただし、Flashでは設置するページと、読み込みソースのドメインが異なる場合、/crossdomain.xmlが要求されます。

もし、例えば一部の課金ユーザにのみストリーミングを許可したい場合、CloudFrontの署名付きURL機能を使いますが、そのままでは/crossdomain.xmlにも署名が要求され、Flashのセキュリティエラーが発生します。

Flashで別ドメインから署名付きURLでCloudFrontにアクセスするときの問題 | Developers.IO

そこで、以前 CloudFront + 署名付きURL でFlashのcrossdomain.xml制限を回避した話 - フリーエンジニアライフで、カスタムエラーページで403をハンドリングすることで、無理矢理crossdomain.xmlに対応、署名付きURLでのFlashストリーミングに対応したと書きました。

しかし、最近この動作が修正されたのか?動作しなくなっていたので別の方法を調べた結果、マルチオリジンを使用することであっさり対応できることに気がついたのでメモ。

Amazon Web Services ブログ: 【AWS発表】Amazon CloudFrontが動的コンテンツをサポート

2012年5月ですから、かなり以前から使えましたね…

crossdomain.xml以外でも、1つのCloudFrontディストリビューションで、署名の有る無しを使い分けたい場合に役立つテクニックになりそうです。

前提

としてすでに署名付きURLでCloudFrontを利用する設定ができているものとします。

手順

  1. S3などにcrossdomain.xmlを配置

  2. CloudFrontディストリビューションの設定で、Originsタブを開き、Create Originで1で用意した配信元を追加

  3. Behaviorsタブを開き、Create BehaviorからPath Pattern「crossdomain.xml」の場合、2で作成したOriginを署名無しで使用するように設定

f:id:uzuki05:20141219171314p:plain

Field Value
Path Pattern crossdomain.xml
Origin 2で作成したOrigin
Restrict Viewer Access (Use Signed URLs) No

トラブルシューティング

307 Temporary Redirect

S3バケットを作って間もないと307を返すようです。しばらく待つ。CloudFrontでキャッシュされるっぽいので、Invalidationsしてみます。