このガイドでは、トークンを生成する方法と、トークンの必須フィールドとオプション フィールドについて説明します。
トークンを作成するには、署名する文字列を作成します。このガイドでは、これを署名付き値と呼びます。署名付き値には、保護するコンテンツ、署名付き値の有効期限などを記述するパラメータが含まれます。
署名付き値は、トークン文字列の作成時に使用します。トークン文字列を作成するには、署名付き値の対称鍵ハッシュベースのメッセージ認証コード(HMAC)など、トークンのパラメータを構成します。
Media CDN は、最終的な作成されたトークンを使用してコンテンツを保護します。
トークンの作成
必須のトークン フィールドと必要なオプションのトークン フィールドを含む文字列を連結して、署名付き値を作成します。各フィールドとパラメータはチルダ
~
文字で区切ります。Ed25519 署名または対称鍵 HMAC のいずれかを使用して署名付き値に署名します。
必須のトークン フィールドとオプションのトークン フィールドを含む文字列を連結してトークンを作成します。各フィールドとパラメータはチルダ
~
文字で区切ります。トークンを作成するとき、各パラメータの値は署名付き値とトークン文字列の間で同じですが、次の点が異なります。
FullPath
Headers
次のコードサンプルでは、プログラムでトークンを作成する方法を示します。
Python
Media CDN に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証を設定するをご覧ください。
Java
Media CDN に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証を設定するをご覧ください。
以降のセクションでは、トークンで使用されるフィールドについて説明します。
必須のトークン フィールド
すべてのトークンに次のフィールドが必要です。
Expires
- 次のいずれか。
PathGlobs
URLPrefix
FullPath
- 次のいずれか 1 つ。
Signature
hmac
特に指定のない限り、パラメータ名とその値では大文字と小文字が区別されます。
次の表に、各パラメータの説明を示します。
フィールド名 / エイリアス | トークンのパラメータ | 署名付きの値 |
---|---|---|
|
Unix エポックからの整数の経過秒数(1970-01-01T00:00:00Z) | Expires=EXPIRATION_TIME 。この期間が経過すると、トークンは無効になります。 |
|
アクセス権を付与するパスセグメント(最大 5 つ)のリスト。セグメントは、カンマ(
セミコロン( このため、URL には特殊文字 |
PathGlobs=PATHS |
URLPrefix |
たとえば、「https://example.com/foo/bar.ts」の有効な URLPrefix 値は「https://example.com」、「https://example.com/foo」、`https://example.com/foo/bar」などです。 |
URLPrefix=BASE_64_URL_PREFIX |
FullPath |
なし。トークンで FullPath を指定するとき、署名付き値に指定したパスを複製しないでください。トークンには、= なしでフィールド名を含めます。 |
FullPath=FULL_PATH_TO_OBJECT |
Signature |
ウェブセーフな Base64 エンコードの署名。 | 該当なし |
hmac |
ウェブセーフな Base64 エンコードの HMAC 値のバージョン。 | 該当なし |
PathGlobs
ワイルドカード構文
PathGlobs
ワイルドカード構文の説明を、次の表に示します。
演算子 | 一致 | 例 |
---|---|---|
* (アスタリスク) |
URL のパスに含まれる 0 個以上の文字(スラッシュ(/ )文字を含む)と一致します。
|
|
? (疑問符) |
URL のパスに含まれる 1 文字と一致します。スラッシュ(/ )文字は含まれません。
|
/videos/s?main.m3u8 は/videos/s1main.m3u8 と一致します。/videos/s01main.m3u8 または /videos/s/main.m3u8 のいずれとも一致しません。
|
glob は、URL パスにアスタリスク(*
)またはスラッシュ(/
)で始まる必要があります。
*
と /*
はすべての URL パスと一致するため、署名付きトークンでこれを使用することはおすすめしません。最大限の保護のために、glob が、アクセスを許可するコンテンツと一致していることを確認してください。
オプションのトークン フィールド
特に指定のない限り、パラメータ名とその値では大文字と小文字が区別されます。
次の表は、パラメータ名、エイリアス、オプション パラメータの詳細を示しています。
フィールド名 / エイリアス | パラメータ | 署名付きの値 |
---|---|---|
|
Unix エポックからの整数の秒数(1970-01-01T00:00:00Z) | Starts=START_TIME |
IPRanges |
この URL がウェブセーフな Base64 形式で有効になる、最大 5 つの IPv4 アドレスと IPv6 アドレスの CIDR 形式のリスト。たとえば、IP 範囲「192.6.13.13/32,193.5.64.135/32」を指定するには、 クライアントが WAN 移行の危険にさらされている場合や、アプリケーション フロントエンドへのネットワーク パスが配信パスと異なる場合、IPRanges はトークンに含めるのには役立ちません。
署名付きリクエストに含まれていない IP アドレスに接続すると、Media CDN は 以下のような場合、Media CDN は
これらすべての要因は、動画再生セッション中に特定のクライアントが非確定的な IP アドレスを持つ原因となる可能性があります。アクセスの発行後にクライアント IP アドレスが変更され、クライアントが動画セグメントを再生バッファにダウンロードしようとすると、Media CDN から |
IPRanges=BASE_64_IP_RANGES |
|
任意の文字列。ログの分析や再生トレースに便利です。 無効なトークンが作成されないようにするには、% エンコードまたはウェブセーフの Base64 エンコード文字列を使用します。「 |
SessionID=SESSION_ID_VALUE |
|
任意の文字列。ログ分析に便利です。 無効なトークンが作成されないようにするには、% エンコードまたはウェブセーフの Base64 エンコード文字列を使用します。「 |
data=DATA_VALUE |
Headers |
ヘッダー フィールド名のカンマ区切りリスト。リクエストのルックアップでは、ヘッダー名では大文字と小文字が区別されません。署名付き値のヘッダー名では大文字と小文字が区別されます。ヘッダーがない場合、値は空の文字列になります。ヘッダーのコピーが複数ある場合は、カンマで連結されます。 | Headers=HEADER_1_NAME=HEADER_1_EXPECTED_VALUE,
HEADER_2_NAME=HEADER_2_EXPECTED_VALUE |
例
次のセクションでは、トークンを生成する例を示します。
FullPath
の使用例
FullPath
フィールドを使用した次の例について考えてみます。
- リクエストされたアイテム:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- 有効期間: 160000000
符号付き値は次のとおりです。
Expires=160000000~FullPath=/tv/my-show/s01/e01/playlist.m3u8
トークンを作成するには、Ed25519 署名または対称鍵 HMAC のいずれかを使用して署名付き値に署名します。
署名付き値から作成されたトークンの例を次に示します。
Ed25519 署名
Expires=160000000~FullPath~Signature=SIGNATURE_OF_SIGNED_VALUE
ここで、SIGNATURE_OF_SIGNED_VALUE は以前に作成された符号付き値の ED25519 署名です。
対称鍵 HMAC
Expires=160000000~FullPath~hmac=HMAC_OF_SIGNED_VALUE
ここで、HMAC_OF_SIGNED_VALUE は、以前に作成された署名付き値の対称鍵 HMAC です。
上記の例では、FullPath
がトークンに指定されていますが、値は、署名付き値に指定されたパスから繰り返されません。これにより、トークンでリクエストを複製することなく、リクエストのフルパスに署名できます。
URLPrefix
の使用例
URLPrefix
フィールドを使用した次の例について考えてみます。
- リクエストされたアイテム:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- 有効期間: 160000000
符号付き値は次のとおりです。
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
前の例では、リクエストされたアイテムへのパス http://example.com/tv/my-show/s01/e01/playlist.m3u8
をウェブセーフな Base64 形式のアイテムへのパス aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
に置き換えています。
トークンを作成するには、Ed25519 署名または対称鍵 HMAC のいずれかを使用して署名付き値に署名します。
署名付き値から作成されたトークンの例を次に示します。
Ed25519 署名
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~Signature=SIGNATURE_OF_SIGNED_VALUE
ここで、SIGNATURE_OF_SIGNED_VALUE は以前に作成された符号付き値の ED25519 署名です。
対称鍵 HMAC
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~hmac=HMAC_OF_SIGNED_VALUE
ここで、HMAC_OF_SIGNED_VALUE は、以前に作成された署名付き値の対称鍵 HMAC です。
Headers
の使用例
Headers
フィールドを使用した次の例について考えてみます。
- リクエストされたアイテム:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- 有効期間: 160000000
- PathGlobs 値:
*
- 想定されるリクエスト ヘッダー:
user-agent: browser
accept: text/html
符号付き値は次のとおりです。
Expires=160000000~PathGlobs=*~Headers=user-agent=browser,accept=text/html
トークンを作成するには、Ed25519 署名または対称鍵 HMAC のいずれかを使用して署名付き値に署名します。
署名付き値から作成されたトークンの例を次に示します。
Ed25519 署名
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~Signature=SIGNATURE_OF_SIGNED_VALUE
ここで、SIGNATURE_OF_SIGNED_VALUE は以前に作成された符号付き値の ED25519 署名です。
対称鍵 HMAC
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~hmac=HMAC_OF_SIGNED_VALUE
ここで、HMAC_OF_SIGNED_VALUE は、以前に作成された署名付き値の対称鍵 HMAC です。
前述の例では、Headers=user-agent,accept
がトークンで指定されていますが、想定されるヘッダー値は、署名付き値から繰り返されません。これにより、トークン内の値を複製することなく、特定のリクエスト ヘッダーの Key-Value ペアに署名できます。