CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング

12,299 views

Published on

お手軽に利用でき、大小あらゆる配信規模に対応してくれるCDNサービスCloudFrontの一歩踏み込んだ使いドコロを紹介します。
昨今激増しているモバイルデバイス向け動画配信におけるセキュアな動画配信と、Redshiftを組み合わせたお安く実現するリアルタイム性の高いレポーティングインフラについてご紹介します。

Published in: Technology
0 Comments
39 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,299
On SlideShare
0
From Embeds
0
Number of Embeds
4,484
Actions
Shares
0
Downloads
108
Comments
0
Likes
39
Embeds 0
No embeds

No notes for slide

CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング

  1. 1. 1 CloudFrontで実現する セキュアコンテンツ配信と 効果のトラッキング 2014.03.15 アマゾン  データ  サービス  ジャパン株式会社 ソリューション  アーキテクト 北北迫  清訓 今井  雄太 JAWS DAYS 2014
  2. 2. 22 JAWS DAYS 2014 ⾃自⼰己紹介 !   名前 北北迫  清訓  (きたさこ  きよのり) !   所属   アマゾンデータサービスジャパン       ソリューションアーキテクト !   好きなAWSサービス Amazon Elastic Transcoder
  3. 3. 33 JAWS DAYS 2014 Amazon  CloudFront !  Contents  Delivery  Network
  4. 4. 44 JAWS DAYS 2014 現時点のエッジロケーション Europe   Amsterdam,  Netherlands(2)   Dublin,  Ireland   Frankfurt,  Germany    (3)   London,  England  (3)   Madrid,  Spain   Marseille,  France   Milan,  Italia   Paris,  France  (2)   Stockholm,  Sweden   Warsaw,  Poland       Asia   Chennai,  India   Hong  Kong,  China(2)   Mumbai,  India   Manila,  Philippines   Osaka,  Japan   Seoul,  Korea   Singapore  (2)   Sydney,  Australia   Taipei,  Taiwan   Tokyo,  Japan(2)   South  America   Sao  Paulo,  Brazil   Rio  de  Janeiro,  Brazil   North  America   Atlanta,  GA   Ashburn,  VA  (3)   Dallas,  TX  (2)   Hayward,  CA   Jacksonville,  FL   Los  Angeles,  CA(2)   Miami,  FL   New  York,  NY  (3)   Newark,  NJ   Palo  Alto,  CA     San  Jose,  CA   Seattle,  WA     South  Bend,  IN   St.  Louis,  MO     2014年年03⽉月時点 51  Edge  Locations  
  5. 5. 55 JAWS DAYS 2014 セキュアコンテンツ配信
  6. 6. 66 JAWS DAYS 2014 CloudFrontのセキュア機能 !    HTTPSサポート !    Geo  Restriction !    Signed  URL
  7. 7. 77 JAWS DAYS 2014 CloudFront  Signed  URL ! CloudFront経由で配信するコンテンツ に対して期間指定URLを⽣生成する ことで、配信コンテンツを保護する 既定ポリシ(Canned Policy) •  有効化終了了時刻 •  許可コンテンツフルパス カスタムポリシ(Custom Policy) •  有効化開始時刻 •  アクセス元IPアドレス制限 •  ワイルドカード許可コンテンツパス
  8. 8. 88 JAWS DAYS 2014 CloudFront  Signed  URL 既定ポリシ(Canned Policy) http(s)://{CloudFront Distiburion CNAME}/{コンテンツパス} ?Expires={有効化終了了時刻(Unix Time)} &Signature={署名したポリシー} &Key−Pair-Id={CloudFront Key Pair ID} カスタムポリシ(Custom Policy) http(s)://{CloudFront Distiburion CNAME}/{コンテンツパス} ?Policy={JSONフォーマットのポリシー} &Signature={署名したポリシー} &Key−Pair-Id={CloudFront Key Pair ID} 基本は⾃自分でURLを⽣生成
  9. 9. 99 JAWS DAYS 2014 CloudFront  Signed  URL クライアント Amazon CloudFront オリジンサーバ 署名確認 ダイレクトアクセス SignedURL有効 Distribution OAI 接続元IPアドレス制限 Origin Access Identity オリジンへのダイレクトアクセス
  10. 10. 1010 JAWS DAYS 2014 Geo  Restriction CloudFront  Signed  URL ユーザ認証 アクセス要求 署名付きURL配布 署名確認 署名付きURLで アクセス クライアント 認証サーバ Amazon CloudFront オリジンサーバ 署名URL⽣生成 CloudFront プライベートキー SignedURL有効 Distribution OAI HTTPS通信
  11. 11. 1111 JAWS DAYS 2014 セキュアな動画配信
  12. 12. 1212 JAWS DAYS 2014 動画配信 マルチデバイスへの効率率率的な動画配信 HTTPストリーミング HTTP Live Streaming (HLS) HTTP Dynamic Streaming (HDS) IIS Smooth Streaming
  13. 13. 1313 JAWS DAYS 2014 動画配信 Android  3.2以前 Android  4.0以降降 + + + 救世主?
  14. 14. 1414 JAWS DAYS 2014 動画配信 (参考)2013年年 Google Developers http://developer.android.com/about/dashboards/index.html 79.7% 本⽇日は カジュアルに HTTP Live Streaming (HLS) +
  15. 15. 1515 JAWS DAYS 2014 HLSによるオンデマンド配信 クライアント Webサーバ マニフェストファイル(.m3u8)   セグメントファイル01(.ts)   セグメントファイル02(.ts)   セグメントファイル03(.ts)   セグメントファイル04(.ts)   セグメントファイル05(.ts) : セグメンターで分割 元動画 HTTP/HTTPS AES Encryption マニフェストファイルを取得し、記載順に セグメントファイルを取得し再⽣生 #EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-ALLOW-CACHE:YES #EXT-X-TARGETDURATION:12 #EXTINF:11.333333, segment_hls_1m00000.ts #EXTINF:11.250000, segment_hls_1m00001.ts #EXTINF:7.500000, segment_hls_1m00002.ts : #EXT-X-ENDLIST マニフェストファイル(m3u8) GET
  16. 16. 1616 JAWS DAYS 2014 HLSセキュアオンデマンド配信 マニフェスト ファイル要求 認証サーバ 署名URL⽣生成 マニフェスト ファイル取得 マニフェスト ファイル書換 Amazon CloudFront Amazon S3 SignedURL有効 Distribution 署名付き マニフェストファイル OAI 署名付きURLで セグメントファイル取得 署名確認
  17. 17. 1717 JAWS DAYS 2014 HLSセキュアオンデマンド配信 #EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-ALLOW-CACHE:YES #EXT-X-TARGETDURATION:12 #EXTINF:11.333333, segment_hls_1m00000.ts #EXTINF:11.250000, segment_hls_1m00001.ts #EXTINF:7.500000, segment_hls_1m00002.ts : #EXT-X-ENDLIST #EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-ALLOW-CACHE:YES #EXT-X-TARGETDURATION:12 #EXTINF:11.333333, https://xxx.cloudfront.net/hls/segment_hls_1m00000.ts? Signature=Yana7RByw30iPHZQzFKIyqoAsLHMPPeZ~w-7RPuHeVTY06VDg nW7MbNjQSbGkHn9kWPdlFAWCX7g1q9Mk5kORLXMcJwCOCm165~P6ss9 Bj8rMmYNoIj96u7Nm3xzwbFHfCf5WyafA6aX1PoQ2Vgod98TZVhHGuTdA- IuiMz6Ly8_&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9 kMWJ3amwwb3JteW9veC5jbG91ZGZyb250Lm5ldC9obHMvKiIsIkNvbmRpd GlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTM5NDI0Nj MwM319fV19&Key-Pair-Id=APKAIZ4RI4PUMO3SNKLQ #EXTINF:11.250000, https://xxx.cloudfront.net/hls/segment_hls_1m00001.ts? Signature=Yana7RByw30iPHZQzFKIyqoAsLHMPPeZ~w-7RPuHeVTY06VDg nW7MbNjQSbGkHn9kWPdlFAWCX7g1q9Mk5kORLXMcJwCOCm165~P6ss9 Bj8rMmYNoIj96u7Nm3xzwbFHfCf5WyafA6aX1PoQ2Vgod98TZVhHGuTdA- IuiMz6Ly8_&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9 kMWJ3amwwb3JteW9veC5jbG91ZGZyb250Lm5ldC9obHMvKiIsIkNvbmRpd GlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTM5NDI0Nj MwM319fV19&Key-Pair-Id=APKAIZ4RI4PUMO3SNKLQ #EXTINF:7.500000, : #EXT-X-ENDLIST SignedURL Custom Policy ワイルドカードで許可コンテ ンツパスを⽣生成し、同じ署名 をすべてのセグメントファイ ルで利利⽤用 https://xxx.cloudfront.net/hls/* オリジナル マニフェストファイル 署名付き マニフェストファイル
  18. 18. 1818 JAWS DAYS 2014 HLSセキュアオンデマンド配信 !  保護しながらもキャッシュを活かした効率率率 的なコンテンツ配信 1.  マニフェストファイル内で #EXT-X-ALLOW-CACHE:NO 2.  S3上のセグメントファイルのMetadataに Cache-Control: max-age=0, s-maxage=⻑⾧長め 1.  セグメントファイル をキャッシュせず 毎回リクエスト 2.  s-maxage期間 CloudFrontがセグメ ントをキャッシュ セグメントファイル キャッシュ コンテンツ保護 負荷軽減
  19. 19. 1919 JAWS DAYS 2014 HLSライブ配信 クライアント ストリーミングサーバ/Webサーバ HTTP/HTTPS GET LIVE   LiveEncoder   マニフェストファイルの末尾に #EXT-X-ENDLISTがなければ再要求 クライアント側挙動 マニフェストファイル(.m3u8)   セグメントファイル01(.ts)   セグメントファイル02(.ts)    :   マニフェストファイルは定期的に更更新 セグメントファイルは都度度追加 サーバ側挙動 リアルタイム ⽣生成
  20. 20. 2020 JAWS DAYS 2014 HLSセキュアライブ配信 !  セキュアライブ配信のポイント –  ライブの場合、マニフェストファイルの書き換えタ イミングが難しい –  マニフェストファイルは相対パスでセグメントファ イルを記載しているのでCloudFrontのDistribution は同⼀一パスの必要がある CloudFrontのBehaviorを利利⽤用して、 マニフェストファイルだけ署名付きURLに設定
  21. 21. 2121 JAWS DAYS 2014 セキュアライブ配信 マニフェストファイル(*.m3u8)のBehaviorを登録し、 「Restrict Viewer Access(Use Signed URLs」を有効 マニフェストファイルへのアクセスだけ署名付きURLが必要 となり、保護することが可能
  22. 22. HLSセキュアライブ配信 マニフェスト ファイルURL要求 認証サーバ Amazon CloudFront SignedURL有効 Distribution 署名付き マニフェストファイルURL セグメントファイル 取得 配信サーバ LIVE   LiveEncoder   署名付きURLで マニフェストファイル取得 署名確認
  23. 23. 2323 JAWS DAYS 2014 中まとめ ! CloudFrontで⼩小規模から⼤大規模まであら ゆる配信ニーズに答えられるだけでなく、 プレミアムコンテンツなどのアクセス制限 が必要なセキュアな動画配信も実現するこ とが可能 !  Elastic  TranscoderはHLS変換をサポート しています。
  24. 24. 2424 JAWS DAYS 2014 効果のトラッキング
  25. 25. 2525 JAWS DAYS 2014 ⾃自⼰己紹介 !   名前 今井  雄太(いまい  ゆうた) !   所属   アマゾンデータサービスジャパン       ソリューションアーキテクト !   好きなAWSサービス Amazon Simple Storage Service
  26. 26. 2626 JAWS DAYS 2014 アジェンダ !   アクセス可視化とは !   ツールやエコシステム !   ⾃自前で作るなら
  27. 27. 2727 JAWS DAYS 2014 アクセス可視化とは
  28. 28. 2828 JAWS DAYS 2014 なんのために⾏行行う? !  売上予測 !  コスト予測 !  キャパシティプランニング !  異異常検知
  29. 29. 2929 JAWS DAYS 2014 気をつけるべきこと !  APIやHTMLへのアクセス解析との棲み分 け – 両⽅方同じことをしても意味がない LogLog Log LogLog Log
  30. 30. 3030 JAWS DAYS 2014 CloudFrontで アクセス可視化して嬉しいものは !  地域(エッジロケーション)別アクセス – コスト把握 – ユーザーの地理理的分布はAPI側のログでも 取れる !  キャッシュヒット率率率 – オリジンのキャパシティプランニング !  トラフィックスループット – コスト把握
  31. 31. 3131 JAWS DAYS 2014 ツールやエコシステム
  32. 32. 3232 JAWS DAYS 2014 Just  Released! !  おまたせしました!CloudFrontにもや っとレポート機能が出ました! !   現状取れるのは •  HTTP/HTTPSそれぞれのアクセス数 •  HTTP/HTTPSそれぞれの転送量量 •  オリジンへの転送量量
  33. 33. 3333 JAWS DAYS 2014 Sumo  Logic ! SaaSっぽいタイプ !  S3上のログを解析してくれる !  ログの量量は500MB/⽇日まで無料料 !  グラフを⾃自由に作り込める
  34. 34. 3434 JAWS DAYS 2014 Splunk !  ホストベースのタイプ !  ログをSplunkにロードして利利⽤用 !  Market  PlaceにAMIがある !  ログ可視化ツールなのでアクセス解析 に限らない http://blogs.splunk.com/2012/08/14/splunking-app-net/
  35. 35. 3535 JAWS DAYS 2014 Cedexis !   サービス型 !   ログはビーコンで収集するので リアルタイム性が⾼高い(と思う) !   アクセス数にかかわらず無料料でレポート利利⽤用 が可能
  36. 36. 3636 JAWS DAYS 2014 Google  Analytics !   ⾔言わずと知れたSaaSタイプの解析サービス !   アクセス解析にʼ’超ʼ’特化されている !   1000万アクセス/⽉月まで無料料 http://www.google.co.jp/analytics/
  37. 37. 3737 JAWS DAYS 2014 ⾃自前でやるなら
  38. 38. 3838 JAWS DAYS 2014 まずはCloudFrontのログについて !  ディストリビューションごとに出⼒力力先のS 3を設定 !  ⾃自動的に指定のS3バケットに出⼒力力される !  出揃うのにだいたい3〜~4時間 !  ⼩小さな多数のファイルとして出⼒力力される –  HadoopやRedshiftで取り扱いにくい
  39. 39. 3939 JAWS DAYS 2014 まずはCloudFrontのログについ て(続き) !  命名規則 – Prefix指定でListObjectすることで絞込 がしやすい! – s3DistCpで正規表現でも絞りやすい! ${DISTRIBUTION_̲NAME}-‐‑‒${YYYY}-‐‑‒${MM}-‐‑‒${DD}-‐‑‒${HH}.*
  40. 40. 4040 JAWS DAYS 2014 スポット解析 !  EMRにS3DistCpで必要なデータだけ読 み込んで好きなようにクエリする SELECT COUNT(*) FROM…. S3DistCp
  41. 41. 4141 JAWS DAYS 2014 スポット解析 !  ⼤大まかな⼿手順 – スクリプトでEMR起動 •  hiveインストール •  S3DistCPで指定された範囲のログをS3から hdfs:///dataにconcatして読み込み •  hdfs:///dataをLocationに指定してExternal   Tableを作成 – Hiveで解析 – 終わったらクラスタを破棄する
  42. 42. 4242 JAWS DAYS 2014 スポット解析 !  起動スクリプト #EMRクラスタの起動 FLOW=`̀elastic-‐‑‒mapreduce  -‐‑‒-‐‑‒create  -‐‑‒-‐‑‒alive  -‐‑‒-‐‑‒hive-‐‑‒interactive  -‐‑‒-‐‑‒key-‐‑‒pair  $ {KEYPAIR}  -‐‑‒-‐‑‒name  emr-‐‑‒cluster-‐‑‒${TARGET}  -‐‑‒-‐‑‒master-‐‑‒instance-‐‑‒type  $ {MASTER_̲INSTANCE_̲TYPE}  -‐‑‒-‐‑‒slave-‐‑‒instance-‐‑‒type  $ {SLAVE_̲INSTANCE_̲TYPE}  -‐‑‒-‐‑‒num-‐‑‒instances  ${NUM_̲INSTANCES}  -‐‑‒-‐‑‒log-‐‑‒uri   ${LOG_̲URI}  |  awk  '{print  $4}'`̀ #S3DistCpステップの追加 elastic-‐‑‒mapreduce  -‐‑‒-‐‑‒jobflow  $FLOW  -‐‑‒-‐‑‒jar   /home/hadoop/lib/emr-‐‑‒s3distcp-‐‑‒1.0.jar   -‐‑‒-‐‑‒arg  -‐‑‒-‐‑‒s3Endpoint  -‐‑‒-‐‑‒arg  "$S3ENDPOINT"   -‐‑‒-‐‑‒arg  -‐‑‒-‐‑‒src  -‐‑‒-‐‑‒arg  "$CFLOG"   -‐‑‒-‐‑‒arg  -‐‑‒-‐‑‒dest  -‐‑‒-‐‑‒arg  'hdfs:///data'   -‐‑‒-‐‑‒arg  -‐‑‒-‐‑‒groupBy  -‐‑‒-‐‑‒arg  '.*([0-‐‑‒9]{4}-‐‑‒[0-‐‑‒9]{2}-‐‑‒[0-‐‑‒9]{2}-‐‑‒[0-‐‑‒9]{2}).*'   -‐‑‒-‐‑‒arg  -‐‑‒-‐‑‒targetSize  -‐‑‒-‐‑‒arg  '128'   -‐‑‒-‐‑‒arg  -‐‑‒-‐‑‒srcPattern  -‐‑‒-‐‑‒arg  ".*${TARGET}.*"   -‐‑‒-‐‑‒arg  -‐‑‒-‐‑‒outputCodec  -‐‑‒-‐‑‒arg  'lzo'   -‐‑‒-‐‑‒step-‐‑‒name  s3distcp ${TARGET}でS3上の対象ファ イルを絞込み ざっくり⾔言うと •  対象ファイル絞り込んで •  ⼩小さいファイルを128MBご とにまとめて •  LZOにして •  hdfs:///dataに読み込む
  43. 43. 4343 JAWS DAYS 2014 スポット解析 !  起動スクリプトのつづき !  呼び出されるHiveスクリプト #Hiveテーブルに読み込み elastic-‐‑‒mapreduce  -‐‑‒-‐‑‒jobflow  $FLOW   -‐‑‒-‐‑‒hive-‐‑‒script  $HIVESCRIPT   -‐‑‒-‐‑‒step-‐‑‒name  table_̲construction CREATE EXTERNAL TABLE cflog ( dt STRING, tm STRING, edge STRING, bytes STRING, ip STRING, method STRING, host STRING, uri STRING, status STRING, referer STRING, ua STRING, querySTRING STRING, cookie STRING, resultType STRING, requestId STRING, hostHeader STRING, protocol STRING, csBytes STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' LOCATION '/data'; Hiveスクリプトを呼び出して テーブルを作成するステップ
  44. 44. 4444 JAWS DAYS 2014 ダッシュボード(定常的レポート) !  DynamoDB  +  Javascript  SDK S3DistCp AWS SDK LINQ.JS D3.js 指定したインターバルごとに起動 EC2やRDSなどのインスタンスものを1箇所も使わずに済む ↓ 運⽤用の⼿手間なし!
  45. 45. 4545 JAWS DAYS 2014 ダッシュボード(定常的レポ ート) !  DynamoDBからデータをSCANして、 ブラウザ側でD3.js等を使ってダッシュ ボードを⽣生成
  46. 46. 4646 JAWS DAYS 2014 ダッシュボード !  サーバーサイドの⼤大まかな⼿手順 – S3からHDFSにデータ読み込み – hiveで⼀一次集計 – 同じくhiveでDynamoDBに出⼒力力 – 定期的に繰り返す
  47. 47. 4747 JAWS DAYS 2014 ダッシュボード(定常的レポート) !  ⼀一次集計
  48. 48. 4848 JAWS DAYS 2014 ダッシュボード(定常的レポート) ! DyamoDBのテーブル
  49. 49. 4949 JAWS DAYS 2014 ダッシュボード(定常的レポ ート) !  hive  <-‐‑‒>  DynamoDB CREATE  EXTERNAL  TABLE  dynamodb  (        recordid  STRING,        ts  STRING,        uri  STRING,        edge  STRING,        count  STRING ) STORED  BY   'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES  (    "dynamodb.table.name"  =  "cloudfront-‐‑‒digger",    "dynamodb.region"  =  "ap-‐‑‒northeast-‐‑‒1",    "dynamodb.throughput.write.percent"  =  "1.0",    "dynamodb.throughput.read.percent"  =  "1.0",    "dynamodb.column.mapping"  =   "recordid:Record_̲ID,ts:Timestamp,uri:URI,edge:Edge,count:Count" );
  50. 50. 5050 JAWS DAYS 2014 ダッシュボード(定常的レポート) !  DynamoDBへのインサート! INSERT  OVERWRITE  TABLE  dynamodb SELECT    concat(ts,'-‐‑‒',uri,'-‐‑‒',edge),    ts,    uri,    edge,    count(1) FROM    source WHERE  ts  !=  'NULL' GROUP  BY    ts,    uri,    edge ;
  51. 51. 5151 JAWS DAYS 2014 ダッシュボード(定常的レポート) 1.  STSを使ってセキュリティトークンを払い出し 2.  DynamoDBから1週間分のデータをSCANで取得 3.  LINQ.jsでGroupByやらPivotやらCountやら 4.  D3.jsを使ってグラフ化! !  クライアントサイドの⼤大まかな構成
  52. 52. 5252 JAWS DAYS 2014 ダッシュボード(定常的レポ ート) !   ちなみに・・・ –  1⽇日1,000万リクエストくらいならEMRはm1.small⼀一台 で⼗十分だった –  毎時1回起動して過去3時間分のデータを処理理した際の 所要時間 –  今回は間に合わなかったが、スポット使えばもっとお得
  53. 53. 5353 JAWS DAYS 2014 BIツールで解析する !  Redshift  +  BIツール COPY ⼀一次集計
  54. 54. 5454 JAWS DAYS 2014 BIツールで解析する !  テーブルの定義 !  S3からのデータロード CREATE  TABLE  cflog  (        recordid  VARCHAR,        ts  CHAR,        uri  VARCHAR,        edge  CHAR,        count  INTEGER ) SORTKEY(ts); COPY  cflog   FROM      's3://BUCKET_̲NAME/PREFIXʼ’  CREDENTIALS   'aws_̲access_̲key_̲id=AAAAA;aws_̲secret_̲access_̲key=BBBBʼ’ DELIMITER  't'   MAXERROR  200;
  55. 55. 5555 JAWS DAYS 2014 まとめ !  BIしたいか、ダッシュボードがほし いか、スポット解析かでやりかたはい ろいろある !  便便利利なサービスもいろいろある !  要件にあった選択を ! CloudFrontのレポーティングへの機能 要望もお待ちしてます!
  56. 56. 56 JAWS DAYS 2014

×