元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

CloudFront + 署名付きURL でFlashのcrossdomain.xml制限を回避した話

JWPlayer + CloudFrontで動画配信しようとした時に悩んだのでメモ。

前提

  • 動画ファイルはS3に配置(直接アクセスは不許可)
  • CloudFront は署名付きURLのアクセスのみ許可し、
  • JWPlayer(Flashモード)で再生

問題

このとき、

  1. Flashは動画ファイルのURLのルートにcrossdomain.xmlを探しに行く
  2. 署名していないURLなので403エラー

となり再生できない。

参考

CloudFront+S3で署名付きURLでプライベートコンテンツを配信する

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

でもどうしても、CloudFrontから配信したい・・・!

対処

かなり無理矢理ですが、2013年9月にサポートの発表のあった、カスタムエラーページ機能で回避しました。

【AWS発表】 Amazon CloudFrontがカスタムエラーページとレスポンスをサポート

やったことは

  • Distributionのカスタムエラーページで、403エラーの場合に、/crossdomain.xml200 OKで返すように設定
  • /crossdomain.xmlをアップロード

/crossdomain.xml以外にも200を返してしまうのが問題ですが、ひとまずFlashから署名付きURLのメディアファイルを読み込むことができるようになりました。

本来はエラーであるべきところを200を返すようなことは絶対にすべきではないと考えていますが、他に手を思い付かず・・・

他に良い方法があれば教えてください。