このガイドでは、トークンを生成する方法と、トークンの必須フィールドとオプション フィールドについて説明します。
トークンを作成するには、署名する文字列を作成します。このガイドでは、これを署名付き値と呼びます。署名付き値には、保護するコンテンツ、署名付き値の有効期限などを記述するパラメータが含まれます。
署名付き値は、トークン文字列を作成するときに使用します。トークン文字列は、署名付き値の対称鍵ハッシュベースのメッセージ認証コード(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 |
HMAC 値のウェブセーフな Base64 エンコード バージョン。 | 該当なし |
PathGlobs
ワイルドカード構文
PathGlobs
ワイルドカード構文の説明を、次の表に示します。
演算子 | 一致 | 例 |
---|---|---|
* (アスタリスク) |
URL のパスに含まれる 0 個以上の文字(スラッシュ(/ )文字を含む)と一致します。
|
|
? (疑問符) |
URL のパスに含まれる 1 文字と一致します。スラッシュ(/ )文字は含まれません。
|
/videos/s?main.m3u8 は/videos/s1main.m3u8 と一致します。/videos/s01main.m3u8 または /videos/s/main.m3u8 のいずれとも一致しません。
|
グロブは、URL パスの場合はアスタリスク(*
)またはスラッシュ(/
)で始める必要があります。
*
と /*
はすべての URL パスと一致するため、署名付きトークンでどちらも使用しないことをおすすめします。最大限の保護を確保するため、グロブがアクセス権を付与するコンテンツと一致するようにしてください。
オプションのトークン フィールド
特に指定しない限り、パラメータ名とその値では大文字と小文字が区別されます。
次の表に、パラメータ名、エイリアス、オプション パラメータの詳細を示します。
フィールド名 / エイリアス | パラメータ | 署名付きの値 |
---|---|---|
|
Unix エポック(1970-01-01T00:00:00Z)からの整数秒数 | Starts=START_TIME |
IPRanges |
この URL がウェブセーフ base64 形式で有効な、CIDR 形式の IPv4 アドレスと IPv6 アドレスのリスト(最大 5 つ)。たとえば、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 ペアに署名できます。