HLS 暗号化は、動画コンテンツへの不正アクセスを防ぐために使用され、オンライン教育や金融などの分野で広く利用されています。Alibaba Cloud は、Alibaba Cloud 専用の暗号化 (推奨) と HLS 暗号化の 2 種類の暗号化方式をサポートしています。このトピックでは、ApsaraVideo Media Processing (MPS) における HLS 暗号化の仕組みと実装方法について説明します。
仕組み
基本概念
MPS では、エンベロープ暗号化を使用します。サービスが Key Management Service (KMS) を呼び出して、データキー (DK) とエンベロープ化されたデータキー (EDK) を生成します。DK で動画を暗号化します。暗号化されたファイルと EDK は一緒に保存されます。プレーヤーは、復号サービスから DK を取得し、動画を復号して再生します。
HLS 暗号化では、データキー (DK) を保護する必要があります。
|
概念 |
説明 |
|
データキー (DK) |
動画の暗号化に使用されるプレーンテキストキーです。 |
|
エンベロープ化されたデータキー (EDK) |
DK をエンベロープ暗号化で暗号化して生成された暗号文キーです。復号時にプレーンテキストの DK を復元するために使用されます。 |
|
Resource Access Management (RAM) |
ユーザー ID とリソースアクセス権限を管理します。詳細については、「RAM とは」をご参照ください。 |
|
Key Management Service (KMS) |
キー管理、データ暗号化、認証情報のセキュリティを提供します。詳細については、「Key Management Service とは」をご参照ください。 |
|
Object Storage Service (OSS) |
MPS で処理されたメディアリソースを保存します。詳細については、「OSS とは」をご参照ください。 |
|
コンテンツデリバリーネットワーク (CDN) |
コンテンツを配信し、HLS 再生時に M3U8 ファイル内の復号 URI を動的に変更します。詳細については、「Alibaba Cloud CDN とは」をご参照ください。 |
暗号化フロー
暗号化フローは次のように動作します。

-
MPS、OSS、RAM、KMS、CDN がまだアクティベートされていない場合は、アクティベートします。
-
MPS に KMS へのアクセスを許可します。
説明MPS は、暗号化時に KMS の
GenerateDataKeyAPI を呼び出して、DK と EDK を生成します。 -
出力 OSS バケットドメインを CDN アクセラレーションドメインとして設定します。CNAME レコードとオリジンホストを設定します。
-
暗号化ワークフローを作成します。出力 OSS バケットとキー URI を指定します。
キー URI は、復号サービスのエンドポイントです。MPS は、暗号化後に M3U8 ファイルにこれを書き込みます。
-
動画をアップロードし、アップロード時に暗号化ワークフローを指定します。
-
アップロード後、MPS は自動的に暗号化とトランスコーディングをトリガーします。
MPS は GenerateDataKey を呼び出して DK と EDK を生成し、DK で動画を暗号化してから、キー URI と EDK を M3U8 ファイルに書き込みます。
-
MPS は、M3U8 ファイルと TS ファイルを出力 OSS バケットに保存します。
復号フロー
復号と再生フローは次のように動作します。

-
MtsHlsUriTokenを発行するトークンサービスを構築します。重要トークンサービスは
MtsHlsUriTokenを発行します。 -
KMS の
DecryptAPI を呼び出して DK を取得し、プレーヤーに返す復号サービスを構築します。重要KMS は Base64 でエンコードされたデータキーを返します。サービスは、それをプレーヤーに返す前に Base64 デコードする必要があります。
-
QueryMediaList を呼び出して M3U8 ファイルの URL を取得し、MtsHlsUriToken を付加して URL をプレーヤーに返します。
-
プレーヤーは、
MtsHlsUriTokenを含むリクエストを CDN に送信し、M3U8 ファイルを取得します。CDN は、キー URI と EDK を含むようにファイルを書き換えて返します。プレーヤーは復号キーをリクエストし、動画を再生します。
実装の概要
HLS 暗号化と再生の完全なフローを実装するには、次のコンポーネントを構築する必要があります。
-
暗号化ワークフローを作成します。
説明コンソールでワークフローを作成することもできますが、サーバーサイド SDK を統合することで、より完全で効率的な暗号化サービスを提供できます。
-
MtsHlsUriTokenのトークン発行と検証サービスを構築します。各トークンは 1 回のみ使用する必要があります。 -
KMS の
DecryptAPI を呼び出す復号サービスを構築します。プレーンテキストキーを Base64 デコードし、プレーヤーに返します。
前提条件
HLS 暗号化を使用する前に、次の前提条件を満たす必要があります。
-
必要な Alibaba Cloud サービスをアクティベートします。
MPS、OSS、KMS、RAM、CDN がまだアクティベートされていない場合は、アクティベートします。
-
MPS をアクティベートします。詳細については、「MPS のアクティベート」をご参照ください。
-
OSS をアクティベートします。詳細については、「OSS のアクティベート」をご参照ください。
-
KMS をアクティベートします。詳細については、「KMS のアクティベート」をご参照ください。
-
CDN をアクティベートします。詳細については、「CDN のアクティベート」をご参照ください。
-
-
MPS に KMS へのアクセスを許可します。
-
RAM コンソールにログインします。
-
承認する をクリックして、新規権限 ページに移動します。
-
[プリンシパル] 検索ボックスで、AliyunMtsDefaultRole を検索し、MPS のためにシステムが作成したロールを選択します。
-
[権限] の検索ボックスで KMS を検索し、AliyunKMSFullAccess を選択して [OK] をクリックします。
権限付与後、MPS は KMS API を呼び出して、動画暗号化用のデータキーを取得できるようになります。
-
-
出力 OSS バケットの CNAME レコードとオリジンホストを設定します。詳細については、「アクセラレーションドメイン名の設定」をご参照ください。すでに設定済みの場合は、この手順をスキップしてください。
説明exampleBucket****.oss-cn-hangzhou.aliyuncs.comなどの Alibaba Cloud OSS バケットのパブリックエンドポイントを手動で入力するか、同一アカウント内で高速化する OSS バケットを選択できます。同一リージョン内の内部アクセス用のエンドポイントはサポートされていません。
動画の暗号化
動画を暗号化するには、次の手順を実行します。
-
暗号化ワークフローを作成します。
MPS の依存関係を含む Alibaba Cloud SDK を統合します。コードサンプルのプログラミング言語を選択してください。
重要暗号化ワークフローを作成するときは、キー URI を指定します。MPS は、暗号化中にこの URI を M3U8 ファイルに書き込み、OSS に保存します。例:
example.aliyundoc.com。言語
SDK の統合
暗号化ワークフローのコードサンプル
Java
Python
PHP
-
動画をアップロードして、暗号化とトランスコーディングをトリガーします。MPS コンソールまたは OSS コンソールからアップロードします。
説明アップロード時に暗号化ワークフローを指定すると、自動的に暗号化とトランスコーディングがトリガーされます。
暗号化後、OSS コンソールで出力バケット内の 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-ENDLISTURI には、設定したキー URI と、KMS から取得した EDK が含まれています。
HLS 暗号化動画の再生
動画を復号して再生するには、次の手順を実行します。
-
トークンサービスを構築します。
説明暗号化ロジックに基づいてトークンサービスを構築し、動画のセキュリティを強化することを推奨します。
-
復号サービスを構築します。
動画を復号し、復号キーを返すローカル HTTP サービスを構築します。MPS では、Java と Python のコードサンプルを提供しています。
-
Java コードサンプル
Java SDK には次の依存関係が必要です。
復号サービスのサンプル (固定キー):
KMS 復号サンプル:
-
Python コードサンプル
Python SDK には次の依存関係が必要です。
-
pip install aliyun-python-sdk-core -
pip install aliyun-python-sdk-kms -
pip install aliyun-python-sdk-mts
次は Python コードサンプルです。
-
-
-
QueryMediaListAPI を呼び出して、再生 URL を取得します。API Explorer でこの操作を呼び出すか、サービスに統合してください。
-
暗号化された動画を再生します。
独自のプレーヤーまたは ApsaraVideo Player を使用して、暗号化された動画を再生します。
-
別のプレーヤーを使用する場合は、再生ロジックをご自身で実装してください。
-
ApsaraVideo Player を使用する場合は、トークンと認証情報を取得してから再生を開始してください。詳細については、「動画の再生」をご参照ください。
オンラインプレーヤーで再生をテストできます。
たとえば、ApsaraVideo Player 診断ツールを使用します。再生 URL を貼り付けて、[動画を再生] をクリックします。
説明ブラウザでのデバッグ中、プレーヤーは自動的に認証サーバーに復号キーをリクエストし、動画を復号して再生します。
ApsaraVideo Player での再生プロセスは次のように動作します。
-
プレーヤーは、OSS ドメインを CDN ドメインに置き換え、MtsHlsUriToken を追加して、CDN に M3U8 ファイルをリクエストします。リクエストの例:
https://example.aliyundoc.com/test_01.m3u8?MediaId=fbbf98691ea44b7c82dd75c5bc8b****&MtsHlsUriToken=<サービスによって発行されたトークン>。重要ApsaraVideo Player は自動的に
MtsHlsUriTokenを追加します。別のプレーヤーを使用する場合は、手動でトークンを追加する必要があります。 -
CDN は、M3U8 ファイル内の復号 URI を動的に変更します。 たとえば、
https://example.aliyundoc.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b****はhttps://example.aliyundoc.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b****&MtsHlsUriToken=<お使いのサービスによって発行されたトークン>になります。 -
プレーヤーは、EXT-X-KEY タグ内の URI にアクセスして復号キーを取得します。サービスは Decrypt を呼び出し、平文キーを Base64 デコードして、プレーヤーに返します。プレーヤーは DK を使用して、再生用に TS ファイルを復号します。
-