動画暗号化機能を使用すると、動画コンテンツに対して詳細なセキュリティ処理を実行し、動画データが不正に取得および送信されるのを防ぐことができます。この機能は、オンライン教育や金融など、セキュリティレベルの高いシナリオで動画の漏洩やホットリンクを防ぐために広く使用されています。ApsaraVideo Media Processing(MPS)は、Alibaba Cloud 独自の暗号化と HTTP-Live-Streaming(HLS)暗号化の 2 つの暗号化方式をサポートしています。Alibaba Cloud 独自の暗号化を使用することをお勧めします。このトピックでは、HLS 暗号化のしくみと使用方法について説明します。HLS 暗号化を使用して動画のセキュリティを確保し、動画をスムーズに再生するのに役立ちます。
しくみ
用語
MPS は、エンベロープ暗号化技術を使用して動画を暗号化します。Alibaba Cloud Key Management Service(KMS)を使用して、データキー(DK)とエンベロープデータキー(EDK)を生成できます。次に、DK を使用して動画を暗号化し、暗号化された動画を EDK とともに保存できます。動画を再生する場合、プレーヤーは復号サービスを使用して DK を取得し、動画を復号します。
HLS 暗号化では、DK を保持する必要があります。
用語 | 説明 |
DK | DK はプレーンテキストキーとも呼ばれ、動画の暗号化に使用されます。 |
EDK | EDK は暗号文データキーとも呼ばれ、エンベロープ暗号化技術を使用して生成されます。DK の復号とプレーンテキストデータキーの取得に使用されます。 |
RAM | Resource Access Management(RAM)は、Alibaba Cloud が提供するサービスです。ユーザー ID とリソースアクセス権限を管理できます。詳細については、「RAM とは」をご参照ください。 |
KMS | KMS は、キー管理、データ暗号化、およびシークレット管理のためのエンドツーエンドの serviceplatform です。KMS は、データの暗号化と保護、およびシークレットの管理を行うためのシンプルで信頼性が高く、安全で標準に準拠した機能を提供します。詳細については、「KMS とは」をご参照ください。 |
Object Storage Service (OSS) | OSS は、Alibaba Cloud が提供するデータストレージサービスです。MPS ジョブのメディアファイルは、OSS バケットに保存されます。詳細については、「OSS とは」をご参照ください。 |
Alibaba Cloud CDN | HLS 暗号化の処理において、Alibaba Cloud CDN は M3U8 ファイル内の復号 Uniform Resource Identifier(URI)を動的に変更し、復号 URI をプレーヤーに返します。詳細については、「Alibaba Cloud CDN とは」をご参照ください。 |
暗号化プロセス
次の図は、MPS で動画を暗号化するプロセスを示しています。

MPS、OSS、RAM、KMS、CDN の各サービスを有効にします。
MPS に KMS へのアクセス権限を付与します。
説明これにより、MPS は動画の暗号化中に KMS の GenerateDataKey 操作を呼び出して、DK と EDK を生成できます。
MPS ジョブの出力ファイルを保存する OSS バケットに CDN 高速化ドメイン名を設定します。CNAME レコードを追加し、CDN 高速化ドメイン名の back-to-origin ホストを設定します。
動画暗号化のワークフローを作成し、出力ファイルを保存する OSS バケットやキー URI などの情報を指定します。
キー URI は、サービスのエンドポイントを指定します。キー URI に関するデータは、動画の暗号化後に MPS によって生成された M3U8 ファイルに含まれています。
暗号化する動画をアップロードし、動画に作成したワークフローを指定します。
動画がアップロードされると、MPS は自動的にワークフローをトリガーします。
次に、MPS は GenerateDataKey 操作を呼び出して DK と EDK を生成し、DK を使用して動画を暗号化します。動画が暗号化されると、MPS はキー URI と EDK に関するデータを M3U8 ファイルに書き込みます。
MPS は、M3U8 ファイルと TS ファイルを出力ファイルを保存する OSS バケットに保存します。
復号プロセス
次の図は、HLS 暗号化された動画を復号するプロセスを示しています。

MtsHlsUriToken パラメーターを生成するトークン発行サービスを構築します。
重要トークン発行サービスは、MtsHlsUriToken パラメーターを生成するために使用されます。
KMS の Decrypt 操作を呼び出して復号サービスを構築し、DK をプレーヤーに返します。
重要KMS の Decrypt 操作を呼び出して KMS から Base64 エンコードされた DK を取得した後、Base64 アルゴリズムを使用して DK をデコードし、デコードされた DK をプレーヤーに返します。
MPS の QueryMediaList 操作を呼び出して M3U8 ファイルの OSS URL をクエリし、MtsHlsUriToken パラメーターを OSS URL に追加して、OSS URL をプレーヤーに返します。
プレーヤーは MtsHlsUriToken パラメーターと DK を使用して、CDN から動画のストリーミング URL をリクエストします。CDN は M3U8 ファイルを変更し、キー URI と EDK をプレーヤーに返します。次に、プレーヤーは動画を復号して再生します。
コードロジック
HLS の暗号化と復号のプロセスでは、次のコードロジックを実装する必要があります。
動画暗号化のワークフローを作成します。
説明MPS コンソールでワークフローを作成することもできますが、サーバー SDK を使用してワークフローを作成することをお勧めします。
復号トークンとして使用される MtsHlsUriToken パラメーターを生成するトークン発行サービスを構築します。復号トークンを確認します。各復号トークンは 1 回だけ使用することをお勧めします。
KMS の Decrypt 操作を呼び出して復号サービスを構築します。Base64 アルゴリズムを使用して DK をデコードし、デコードされた DK をプレーヤーに返します。
前提条件
MPS で HLS 暗号化を使用する前に、次の準備を行ってください。
MPS、OSS、KMS、RAM、CDN など、関連する Alibaba Cloud サービスを有効にします。
これらのサービスを有効にしていない場合は、次の手順を実行します。
MPS を有効にします。詳細については、「MPS の有効化」をご参照ください。
OSS を有効にします。詳細については、「OSS の有効化」をご参照ください。
KMS を有効にします。詳細については、「専用 KMS インスタンスの購入」をご参照ください。
Alibaba Cloud CDN を有効にします。詳細については、「Alibaba Cloud CDN の有効化」をご参照ください。
MPS に KMS へのアクセス権限を付与します。
RAM コンソール にログインします。
左側のナビゲーションウィンドウで、承認する を選択します。[権限の付与] ページで、新規権限 をクリックします。[権限の付与] パネルが表示されます。
[プリンシパル] 検索ボックスに AliyunMtsDefaultRole と入力し、システムによって作成され、MPS で使用できるロールを選択します。
[ポリシー] セクションの検索ボックスに KMS と入力します。AliyunKMSFullAccess を選択し、[権限の付与] をクリックします。
これにより、MPS に KMS へのアクセス権限が付与されます。MPS は動画の暗号化リクエストを受信すると、KMS の Decrypt 操作を呼び出して DK を取得できます。
出力ファイルを保存する OSS バケットに CDN 高速化ドメイン名を設定し、CDN 高速化ドメイン名の back-to-origin ホストを設定します。詳細については、「ドメイン名の追加」をご参照ください。CDN 高速化ドメイン名と back-to-origin ホストが設定されている場合は、この手順をスキップします。
説明exampleBucket****.oss-cn-hangzhou.aliyuncs.comなどの OSS バケットのパブリックドメイン名を入力できます。パブリックドメイン名は OSS コンソールで取得できます。または、同じ Alibaba Cloud アカウント内で、コンテンツ配信の高速化が必要な出力ファイルを保存する OSS バケットを選択することもできます。OSS バケットの内部ドメイン名はサポートされていません。
動画の暗号化
動画を暗号化するには、次の手順を実行します。
動画暗号化のワークフローを作成します。
ワークフローを作成するには、Alibaba Cloud SDK を使用し、MPS の依存関係を追加する必要があります。使用するプログラミング言語に基づいて、ワークフロー作成のサンプルコードを表示できます。詳細については、次の表を参照してください。
重要ワークフローを作成する際には、キー URI を指定する必要があります。動画の暗号化中に、MPS はキー URI を M3U8 ファイルに書き込み、出力ファイルを保存する OSS バケットにファイルを保存します。キー URI の例は
example.aliyundoc.comです。プログラミング言語
SDK
サンプルコード
Java
Python
PHP
動画をアップロードしてワークフローをトリガーします。MPS コンソールまたは OSS コンソールで動画をアップロードできます。
説明アップロード設定で動画に作成したワークフローを指定すると、動画のアップロード後に MPS が自動的にワークフローをトリガーします。
動画が暗号化されたら、OSS コンソールにログインし、出力ファイルを保存する OSS バケットで M3U8 ファイルを表示します。次のサンプルコードは、M3U8 ファイルの例を示しています。
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:5 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:METHOD=AES-128,URI="https://example.aliyundoc.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b****" #EXTINF:4.127544, 15029611683170-00001.ts #EXT-X-ENDLISTこの例では、設定したキー URI と EDK が URI フィールドに含まれています。
HLS 暗号化された動画の再生
HLS 暗号化された動画を再生するには、次の手順を実行します。
トークン発行サービスを構築します。
説明高いセキュリティレベルを確保するには、暗号化方式に基づいてトークン発行サービスを構築する必要があります。
復号サービスを構築します。
動画を復号し、復号キーを取得するためのローカル HTTP サービスを構築します。次のサンプルコードは、Java と Python で復号サービスを構築する方法の例を示しています。
Java のサンプルコード
Java 用 SDK で必要な依存関係:
Base64 アルゴリズムを使用した復号のサンプルコード:
KMS を使用した復号のサンプルコード:
Python のサンプルコード
Python 用 SDK で必要な依存関係:
pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-kms
pip install aliyun-python-sdk-mts
Python のサンプルコード:
MPS の QueryMediaList 操作を呼び出して、動画のストリーミング URL をクエリします。
OpenAPI Explorer で操作を呼び出すか、SDK を統合することで呼び出すことができます。
暗号化された動画を再生します。
ApsaraVideo Player またはサードパーティのプレーヤーを使用して、暗号化された動画を再生できます。
サードパーティのプレーヤーを使用する場合は、再生ロジックを指定します。
ApsaraVideo Player を使用する場合は、動画が再生される前に、必要に応じてセキュリティトークンと認証情報を取得します。詳細については、「動画の再生」をご参照ください。
また、オンラインプレーヤーを使用して、HLS 暗号化によって暗号化された動画の再生をテストすることもできます。
たとえば、ApsaraVideo Player 診断ツール を使用できます。このツールを使用する場合は、[ソース] フィールドに動画のストリーミング URL を入力し、[再生] をクリックします。
説明ブラウザのデバッグページで、プレーヤーが認証サーバーにリクエストを送信し、復号キーを取得してから、動画を復号して再生することがわかります。
次の手順では、ApsaraVideo Player が再生をテストする方法について説明します。
ApsaraVideo Player はストリーミング URL を受信すると、OSS バケットのドメイン名を CDN 高速化ドメイン名に置き換えます。次に、ApsaraVideo Player は、復号トークンとして使用される MtsHlsUriToken パラメーターを CDN 高速化ドメイン名に追加し、変更されたストリーミング URL のリクエストを CDN に送信します。リクエストの例:
https://example.aliyundoc.com/test_01.m3u8?MediaId=fbbf98691ea44b7c82dd75c5bc8b****&MtsHlsUriToken=<Token>。重要ApsaraVideo Player を使用すると、MtsHlsUriToken パラメーターが自動的に追加されます。他のプレーヤーを使用する場合は、MtsHlsUriToken パラメーターを手動で追加する必要があります。
CDN はリクエストを受信すると、M3U8 ファイル内のキー URI を動的に変更し、変更されたストリーミング URL をプレーヤーに返します。たとえば、元のストリーミング URL が
https://example.aliyundoc.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b****の場合、返されるストリーミング URL はhttps://example.aliyundoc.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b****&MtsHlsUriToken=<Token>です。プレーヤーは M3U8 ファイルの EXT-X-KEY タグにある URI を解析してアクセスし、復号キーを取得します。KMS の Decrypt 操作を呼び出し、取得した DK を Base64 アルゴリズムを使用してデコードし、デコードされた DK をプレーヤーに返します。プレーヤーは DK を使用して TS ファイルを復号し、動画を再生します。