Node.js メディア プロキシを使用したビデオ ブロブの地域別保護 (機械翻訳)
Bruno Terkaly
Ricardo Villalobos
コード サンプルのダウンロード
Windows Azure はそのクラウド ・ ストレージ ・ システムの 3 つの便利なオプションを提供します。テーブル、blob、およびキューは、すべての冗長、弾力性のあるグローバルなインフラストラクチャでバックアップ。我々 のテーブルで前回のコラムで見て (msdn.microsoft.com/magazine/dn166928)。 今我々 blob には、特にそれらを使用するときに発生することができます特定のセキュリティ問題を解決する方法に焦点を合わせます。
Blob はバイナリ データを格納するために使用し、Windows Azure により 2 つの種類から選択します。ページ blob にランダムなデータ アクセスのため使用され、最大 1 tb まで拡張できます。 ブロック blob をアップロードして目的のストリーミングに最適化されています 200 GB のデータを含めることができます。Blob として財団は OS でフォーマットされたディスク ・ ビデオ資産を含む、Windows Azure で多くのサービスのために使用されます。パフォーマンスの面では、各 blob のスループット目標最大 60 MB/秒です。図 1 blob ストレージ構成、パーティション アクセスと方法を示しています。
図 1 Windows Azure のブロブ ストレージの概念について
Blob は、HTTP および HTTPS プロトコルを介して世界にさらされている、パブリックまたはプライベートにすることができます。Blob がプライベートとしてマークされている場合は、特定の期間の特定の blob または特定のコンテナー内のすべての blob へのアクセスを許可するポリシーに基づいて共有アクセス署名 (URL) が使用されます。ただし、特定の blob の URL が知られていると、アクセスを防ぐする唯一の方法は変更する有効期限が切れるや対応するセキュリティ ポリシーを削除します。
この条件使用する場合、blob の URL は公開目的のストリーミングを共有する必要がある場合などビデオ資産へのアクセスを制限するための課題となります。2 つの一般的なレベルの保護は、多くの場合必要があります。国または地域のビデオを再生することができます制限する地理的なアクセス。 ドメインまたは Web サイトでビデオを埋め込むことができます制限するリファラー アクセス。これは、場所ベースの広告を作成するマーケティング代理店だけでなくなどのイベント、オリンピックやワールド カップ サッカー) 特定の国で放送するデジタル権利を取得メディア企業にとっては特に重要です。
この記事では、我々 に示すようにこれらのセキュリティ要件にソリューションを提供する Windows Azure をリバース プロキシ サーバーを作成する方法を紹介します図 2。
図 2 リバース プロキシ サーバーを使用してビデオの資産の保護地域
当社のソリューションは Node.js を使用します、JavaScript ベースの強力なサーバー側プラットフォーム我々 以前のコラムで説明した (「実世界シナリオ Node.js の Windows Azure」を参照してください msdn.microsoft.com/magazine/jj991974).Node.js を使用する理由は簡単です:それは、何千ものサーバーごとの接続をサポートしながら、最小限のメモリと CPU を使用する必要があります。必要に応じて、トラフィックに基づいて、需要を Windows Azure アプリケーションを展開することによって、我々 スケールすることができます。ここで私たちに従ってくださいよ基本的な流れです。
- リモート クライアントによって生成された Web サーバーからのビデオを埋め込むには、元の要求をキャプチャします。
- リファラー ページを識別し、ビデオを埋め込むには、ドメインが承認されていることを検証します。
- 要求の送信元国を識別する、それが承認されていることを確認します。
- すべての条件が満たされている場合は、クライアントへのビデオをストリームします。
- 場合はすべての条件が満たされている、エラー メッセージを表示するビデオ ストリームします。
当社のソリューションを動作させる我々 次のクラウド リソースを使用されます。
- Windows Azure のメディア サービスがコードで使用するビデオのアセットを生成します。
- Windows Azure の承認された国と参照元のリストを格納するテーブル。
- MongoDB (mongodb.org) IP 地理位置情報データベースをホストします。
- サンプル Web ページのリバース、Node.js をホストする Windows Azure の Web サイトには、プロキシ。
Windows Azure でビデオ コンテンツをホスティング
あなたを開始する前に、アップロードし、テスト目的のためクラウドでいくつかのビデオ コンテンツをエンコードする必要があります。Windows Azure ポータルにサインインしては簡単に行うことができます manage.windowsazure.comとメディア サービス] をクリックします。(メディア サービスについてはで私達の 2012 年 6 月の記事を「民主化ビデオ コンテンツを Windows Azure メディア サービス」を参照してください msdn.microsoft.com/magazine/jj133821.)購読を持っていない場合にトライアル アカウントを要求することができます bit.ly/YCNEd3。この例では、我々 アップロードの 3 つの動画にエンコードされた図 3。
図 3 ビデオ資産の例を使用して
各ビデオに関連付けられている URL を発行するリンク時し、その他のページに埋め込まれたことができます。私たちのプロキシ サーバーはこれらのリンクを使用して場所と要求の送信元ページを検証した後、世界中の視聴者にメディア コンテンツをストリームします。
検証情報を Windows Azure テーブル ストレージに格納します。
次のステップは、検証プロセスを支援する Windows Azure ストレージにいくつかのテーブルを作成することです。我々 は以前のコラムで説明したように、これらのテーブルは、厳密にキーと値のペアに基づいていますが、彼らのこのプロジェクトの目的を果たします。図 4、テーブルの構造について説明します。
図 4 ストレージ テーブル構造のビデオ コンテンツ
proxycountries | PartitionKey:国の略名 RowKey:"true"または"false"(アクセス用) |
proxyreferrers | PartitionKey:ビデオがホストされているドメイン RowKey:"true"または"false"(アクセス用) |
proxyvideos | PartitionKey:動画アセットのフレンドリ名 RowKey:エンコード形式 URL:メディア サービスで動画アセットの公開 URL |
proxyrejects | PartitionKey:「エラー」または「拒否する」 RowKey:カテゴリ別にエラーや拒否 説明:エラーまたは拒否についての詳細 |
Windows Azure ストレージの利用可能な無料ツールのいずれかのダウンロードを使用してこれらのテーブルを作成できます。我々 は特に Azure ストレージ エクスプ ローラーで CodePlex からダウンロードすることができます Neudesic から好き bit.ly/H3rOC。基本的な機能には、少なくとも 1 つのエンティティを proxycountries、proxyreferrers テーブルに挿入する必要があります、PartitionKey を「未定義」= よ、RowKey ="true".Node.js メディア プロキシをローカルでテストできます。先月の記事では、正しいパーティションと行キー最適なクエリ パフォーマンスを選択することの重要性を説明しました。
地理位置情報データベースの準備
データベースと目的に地理位置情報サービスを提供するいくつかの企業です。MaxMind はそれらの 1 つは、クリエイティブ ・ コモンズ ・ ライセンスの下で使用することができます GeoLite バージョン、会社を提供するため、我々 私たちのプロジェクトに含めることを決めた。CSV ファイルからダウンロードすることができます bit.ly/W5Z7qA。このデータベース私たちのビデオの要求がどこから来ている国を識別する IP アドレスに基づくことができます。
クラウドでこのデータベースをホストする場所私たち次の意思決定に関与。我々 (Windows Azure テーブル ストレージではサポートしないネイティブ) このテーブル範囲の検索を実行する必要がありますので、MongoDB、開発し、10gen によってサポートされている、オープン ソース ドキュメント指向 (JSON) データベース エンジンを使用することを選んだ。MongoDB 複数のインデックスおよび複雑なクエリは、当社のソリューションのために最適ですをサポートします。良いニュースは、いくつかの企業がこのデータベース MongoLab、Windows Azure の店で利用できるなど、サービスとして提供することです。あなたもアカウントにサインアップすることができます mongolab.com、Windows Azure をホスティング プロバイダーとして選択します。Windows Azure ストレージ テーブルを作成、同じデータ センターを選択することを確認します。
MongoDB データベースを作成したら、このような URL を使用してアクセスすることができます。
mongodb://{username}:{password}!@{server_name}.mongolab.com:{port_number}/{database_name}
MaxMind の CSV ファイルをデータベースにインポートするのには、単に、MongoDB から mongodb.org/downloads ダウンロード ツール。お使いのコンピューターにそれらをインストールすると、次のコマンドを実行します。
mongoimport -h {servername}.mongolab.com:{port_number} -d {database_name} -c {collection_name} -u {username} -p {password} --file {MaxMind CSV file} --type csv --headerline
今は、地理位置情報データベースに対してクエリを実行することができます。
ソース コードの見直し
あなたは既にしていない場合は、この記事からのソース コードをダウンロードしてください archive.msdn.microsoft.com/mag201305AzureInsidr。コードでは、3 つの異なるファイルで構成されます。server.js、config.json、package.json。
最初の行に定義されているいくつかのモジュールが表示されます server.js のコードの主な部分で (彼らはよ自動的にダウンロードし、後からインストール npmjs.org)。
- 要求:送信や外部のサイトへの要求をストリーミング プロセスを簡素化します。
- azure:テーブルを含む、Windows Azure ストレージにアクセスを提供します。
- url:URL 文字列の解析が容易になります。
- mongodb:MongoDB データベースへのアクセスを提供します。
- nconf に:設定とアプリケーション設定を取得するプロセスを簡素化します。
また、いくつかの変数は、この形式を次のコードの最初の部分で設定されます。
var port = process.env.PORT || nconf.get("PORT_NUMBER");
これの値 (パラメーターが Windows Azure 環境で見つからない場合に) (1 回がクラウドにデプロイ) Windows Azure の Web サイトの構成パラメーターまたはローカル config.json ファイルから取得することができます。最後に、クライアント、Windows Azure テーブルが作成されます、既定のエージェントは、後続の要求が定義されているエラー ログ オブジェクトのプレース ホルダーは次の初期化コードに示すように null にインスタンスです。
// Create Windows Azure Storage Table
clientconsole.log('Connecting to Windows Azure Table Service');
var tableService = azure.createTableService(storageServiceName,
storageKey, storageServiceUrl);
// Create custom agent for requests; number of sockets can be tweaked
var agent = new http.Agent();agent.maxSockets = 1000;
// Placeholder for errorEntity objectvar errorEntity = null;
初期化プロセスが実行されている一度は、HTTP サーバーを Node.js の対応するコールバック関数を作成する時間です。高度な擬似コードの基本的な滝の構造 — からの Node.js—looks、イベント ベースの非同期の性質このような派生します。
Create HTTP Server (request, response)
{callback to}
Find the page where the video is hosted, using the http-referer header value
Find the origin IP address by using the x-forwarded-for header value
Split the request URL to find the video-friendly name and encoding
{callback to}
Query the proxyreferrers table for validation
{callback to}
Query the MongoDB database to find the request country
{callback to}
Query the proxycountries table for validation
{callback to}
Stream the video using the request function
付属のソース コードでは、詳細を見つけることができますが、我々 はいくつかの側面を強調したい:
- 起源 IP アドレス MaxMind によって定義されている数式を使用して、整数値に変換されます (bit.ly/15xuuJE)。この番号は、MongoDB データベースに対応する国を検索する次のクエリで使用されます。
{ convstart: { $lte: ipValue }, convend: { $gte: ipValue } }
IpValue は convstart (以下以上) と MaxMind 表で提供される convend (より大きいまたは等しい) 列の間に定義された範囲に比較されます。値が見つからない場合は、国「未定義」が
- メインのストリーミング プロセスは要求コマンドこのような関数 streamVideo は、内部で発生します。
request({options},{callback_function}).pipe(resp);
クライアントに直接パイプ処理されている受信このプロセスを簡素化、要求モジュールのおかげで、データをクライアントに送信されます。これは、迅速で効率的なアプリケーションに、リバース プロキシになります。(完全なコードのオプションの中で) を発見する keep-alive ヘッダーはクライアント/サーバ接続複数の要求でサーバーにオープン保つことによってサーバーのパフォーマンスを向上させる、非常に重要です。
リバース プロキシ サーバーをローカルでテスト
Node.js インストーラーを nodejs.org からダウンロードすることによって、アプリケーションをローカルでテストすることができます。ソース ファイルのコピー先フォルダーには、コマンド プロンプト ウィンドウを開き、必要なモジュールをインストールします「故宮博物院インストール」コマンドを実行します。次に、さまざまなオプション Windows Azure テーブル ストレージ情報、MongoDB 接続文字列、エラー メッセージを含むビデオの場所など、config.json ファイル内の設定します。"ノード server.js"を入力することによって、ソリューション、同じコマンド プロンプト ウィンドウで起動すること今することができます。
Windows Azure の Web サイトに、リバース プロキシの展開
リバース プロキシを Windows Azure にデプロイするためには、管理ポータルで新しい Web サイトの作成し、展開を有効にする Git(地元のものを含む) 任意の Git リポジトリからコードをチェックインすることができますメンター。どのようにこれを達成するために特定の指示を見つけることができます bit.ly/KCQo9V。ソース コード ファイルは、既に Windows Azure でエンジンのバージョンのソリューションが機能するため、必要なモジュールを定義する package.json があります。Web サイトを作成すると、ファイルがあるフォルダーに移動して、次のコマンドを実行するコマンド プロンプト ウィンドウから直接を展開できます。
> git init
> git add .
> git commit –m "Initial commit"
> git push {git URL from Windows Azure portal} master
必要な資格情報を提供した後、コードは Windows Azure にデプロイされます。
我々 は rvvideo.azurewebsites で、Web サイトを作成しました。私たちリバース ・ プロキシを指している人気の HTML5 対応 JW プレーヤーが含まれているサンプル ページを見ることができるネット (図 5)。アメリカ合衆国に位置している場合は、ビデオを見ることができるでしょう。 それ以外の場合は、あなたの国または地域で利用されていないビデオについての警告を取得します。Localhost サーバーには、ローカル デバッグを容易にするため指す Web サイト上のタブもあります。
図 5 サンプル Web サイト Node.js プロキシ サーバーを指す
まとめ
この例では、Windows Azure ブロブ ストレージに格納されている動画に地理位置情報セキュリティの余分なレイヤーを追加するには、複数のクラウド コンポーネントを結合する方法を説明しました。Node.js の出番ユース ケースの 1 つは、遮断、ルーティングおよび HTTP 要求の操作です。また、テーブル ストレージなどサードパーティの Windows Azure サービスとの対話をやすい紹介しました-パーティー プロバイダー Windows Azure ストア MongoLab など。最後に、Windows Azure の Web サイトに当社のソリューションを展開することによって、要求とトラフィックに基づいてその容量を拡張することができます。
Bruno Terkaly は、マイクロソフトの開発者エバンジェリストです。彼の深い知識は、多数のプラットフォーム、言語、フレームワーク、SDK、ライブラリ、および API を使用してコードを作成し、現場で長年の経験を積むことで得られたものです。彼は具体的には、Windows Azure プラットフォームを使用してコードの記述、ブログ、ライブ プレゼンテーションをクラウド ベースのアプリケーションの構築に費やしています。彼のブログで読むことができます blogs.msdn.com/b/brunoterkaly。
Ricardo Villalobos は、経験豊かなソフトウェア アーキテクトとして、サプライ チェーン管理業界の企業用アプリケーションを 15 年以上にわたって設計および作成しています。異なる技術的な証明として、修士の学位でダラス大学経営を保持して、彼はマイクロソフトの Windows Azure CSV インキュベーション グループのクラウドの建築家として動作します。彼のブログで読むことができます blog.ricardovillalobos.com。
ブルーノ ・ リカルド共同存在で大規模な産業カンファレンス。彼らは Windows Azure にお問い合わせくださいにインサイダーの読者を奨励します。ブルーノで行くことができます bterkaly@microsoft.comとリカルドで行くことができます Ricardo.Villalobos@microsoft.com。
この記事のレビュー、次技術専門家のおかげで:デビッド Makogon (マイクロソフト)