Amazon Web Services ブログ

AWSでセキュアなビデオオンデマンド(VOD)プラットフォームを構築する方法

動画の活用は情報共有や学習の主要な手段となっており、お客様はeラーニングや動画配信の分野に参入するために、革新的なソリューションに投資を始めています。動画コンテンツはお客様のIP (知的財産) であり、保護され安全に配信される必要があります。オンライン動画は、企業、教育機関、政府機関などあらゆる業界がますます活用するようになっている強力なテクノロジーです。

多くの企業や組織はセキュアなストリーミングソリューションを必要としています。特に、医療機関、大学・学校、企業、OTT・メディア事業者、知的財産権・著作権保護団体、弁護士、官公庁などはセキュリティが絶対に必要であると考えるべきでしょう。

今日より多くの企業がコンテンツをホストし共有するために動画ストリーミングプラットフォームを使用しています。ライブストリーミングとビデオオンデマンド(VOD) は、あらゆる種類の企業や会社が、収益の増加、効果的なコミュニケーション、視聴者の獲得に利用できる非常に強力なツールです。

AWSでは、Amazon Simple Storage Service (S3)Amazon CloudFrontを使って動画を簡単にストリーミングすることができます。しかし、動画を様々な出力形式にトランスコードするためにサーバーを立ち上げたくはありません。ポストクラウドの世界ではAWSはサーバーレスのオプションを提供しています。この記事では、AWSサービスを使用して完全に自動化されたセキュアなビデオオンデマンドソリューションを作成する方法を説明します。

アーキテクチャの概要

Visual workflow diagram of the solution described in this blog

このサーバレスVODワークフローソリューションは,Amazon CognitoAWS AppSyncAmazon S3AWS LambdaAmazon DynamoDBAWS Secrets ManagerAWS Elemental MediaConvertAmazon CloudFrontAWS AmplifyAWS CloudFormationなどのようなAWSサービスを活用して作られています。

このソリューションでは、CognitoはGraphQL APIへのアクセスを保護するCognito User Poolsを通じてWebアプリケーションのユーザーを認証します。APIは、Cognito User Poolのグループに基づいて、きめ細かいアクセス制御が可能です。また、CognitoはS3にコンテンツをアップロードするためのアクセス用に権限の制限された一時的な AWS 認証情報を生成します。

GraphQL APIを使用するAppSyncは、クライアントアプリがサーバーからータをフェッチ、変更、サブスクライブすることを可能にします。今回のソリューションでは、GraphQL APIを使って動画のCRUD(Create/Read/Update/Delete)操作を行い、その動画をS3バケットに保存しています。

このワークフローでは、2つのS3バケットを使用しています。1つはソースの動画を保存するため、もう1つは出力フォーマットやビットレートが異なる動画を保存するためです。

複数の Lambda 関数が、MediaConvert ジョブのトリガー、DynamoDB へのメタデータの格納、署名付き URL トークンの作成、MediaConvert ジョブの終了時の通知など、さまざまな目的で利用されています。

MediaConvertはアップロードされた動画を2Mbps、1Mpbs、600Kbps、400KbpsのHLS形式で自動的にトランスコードします。動画コンテンツはアダプティブビットレートストリームとしてエンコードされ、ネットワーク帯域幅の接続が異なる複数のデバイスで再生できるようになります。

Secrets ManagerはCloudFrontの秘密鍵をセキュアに保管しCloudFrontのURLに署名するために使用されます。CloudFrontはアプリケーション実行時に認可されたユーザーにCDNエッジロケーションを介してコンテンツをセキュアに配信します。

追加設定

  • Signed Cookies/URLs: CloudFrontで各URLのExpiry Time、Allowed IP Address、FileNameを許可できるように設定します。CDNで配信されたコンテンツには デフォルトでは、「Read Access」は割り当てられていません。コンテンツは、アプリが生成した適切なSigned Cookiesを使用して要求された場合にのみダウンロードおよびアクセスが可能です。
  • S3 CORS 設定: S3/CDN経由でコンテンツへのアクセスを許可するWebサイトを設定します。S3 CORSの設定についてはこちらの記事をご覧ください。
  • AmplifyとCloudFormationはソリューションのバックエンドに関わるリソースやサービスの迅速な展開を可能にします。

ワークフローのウォークスルー

  1. 管理者はCognitoで認証されたアプリケーションにログインし、動画をアップロードします。
  2. AppSyncはGraphQL APIを使ってS3の入力バケットに動画をアップロードします。
  3. 動画が入力バケットにドロップされるとすぐにLambda関数がトリガーされます。この関数は、異なるフォーマットの動画を変換するためにMediaConvertジョブを開始します。
  4. さらに、変換された動画のメタデータをDynamoDBに格納するためのLambda関数が起動されます。
  5.  変換された動画は、出力バケットに格納されます。
  6. CloudFrontは登録されたエンドユーザーに動画をストリーミング配信します。
  7. 認証されたユーザーが動画をリクエストすると、CloudFrontの署名入りURLが生成されます。最終的なストリームはApple HLSのアダプティブビットレートストリームとして再生されます。

このソリューションの利点

  • CloudFront CDNを利用した動画配信ソリューションの拡張性
  • S3やCloudFrontの署名付きURLを利用して、不正アクセスを防ぎ、お客様のアプリケーション以外では再生できないようにする動画コンテンツセキュリティ
  • MediaConvertによる動画コンテンツの自動トランスコーディング
  • アダプティブビットレートストリーミングを用いたマルチデバイス対応により、あらゆるネットワーク環境でバッファリングの遅延なく再生可能
  • Secrets Managerによる秘密鍵の安全な保存と取得
  • AmplifyとCloudFormationを使用したソリューションの迅速な構築とデプロイ

お客様環境でのソリューションの展開

こちらから詳細なLabガイドをダウンロードして、ご自身のAWS環境で上記のソリューションを構築してください。テストが終了したら追加コストの発生を避けるために、このソリューションの一部としてデプロイしたサービスを必ずオフにしてください。

このLabガイドは以下の内容で構成されています。

  1. AWS Amplifyを使用してデプロイするためのステップバイステップの手順
  2. CloudFormationテンプレート
  3. Lambda関数
  4. MediaConvertのジョブテンプレート

AWS Solutions ArchitectのSam Patzerには、コードの開発や問題のトラブルシューティングに協力していただきました。このブログに掲載されているコードは、Githubで公開されている彼のコードに触発されたものです。

結論

この記事では開発者やアーキテクトがGraphQL API、Lambda関数、Cognito、AWS Elemental Media Services、その他のAWSサービスを使用して、安全でエンドツーエンドのビデオオンデマンドの自動化プロセスを完成させる方法について説明しました。エンドユーザーに大規模な動画ストリーミングすることができ、低レイテンシーのコンテンツを配信することだけではなく最も重要なことは予期せぬダウンロードから動画を保護することができることです。このソリューションは手動での開発ステップから複雑さを除くことができます。これを活用することでお客様環境でソリューションを構築しデモを行うための十分な準備ができたはずです。

その他リソース


 

AWS Media & Entertainment 参考コンテンツ

 

AWSのメディアチームの問い合わせ先: awsmedia@amazon.co.jp

※毎月のメルマガをはじめました。最新のニュースやイベント情報を発信していきます。購読希望は上記宛先にご連絡ください。

 

翻訳は BD山口とSA金目が担当しました。原文はこちらをご覧ください。