リモート認証は、リソースを保護するためのアクセスの制御機能です。この機能は、Alibaba Cloud Content Delivery Network (CDN) のエッジノードに送信されたユーザーリクエストを検証することで機能します。認証サーバからの検証結果に基づき、CDN は各リクエストの処理方法を決定します。リモート認証を有効にすると、承認されたユーザーのみがリソースにアクセスできるようになります。このトピックでは、リモート認証の仕組み、コンソールでの有効化方法、および関連 API リファレンスについて説明します。
仕組み
ApsaraVideo VOD は、URL 署名とリモート認証の両方をサポートしており、リソースの不正なダウンロードや使用を防止します。これら 2 つの機能は、技術的な実装が異なります:
URL 署名:ドメイン名の認証ルールを CDN エッジノードに送信します。その後、エッジノードが認証プロセス全体を処理します。詳細については、「URL 署名」をご参照ください。
リモート認証:お客様自身で認証サーバをセットアップし、管理する必要があります。CDN エッジノードが認証を必要とするユーザーリクエストを受信すると、そのリクエストを認証サーバに転送して検証します。
以下の図は、リモート認証の仕組みを示しています。
ユーザーがリソースアクセスリクエストを CDN エッジノードに送信します。リクエストには認証パラメーターが含まれています。
CDN エッジノードはユーザーリクエストを受信し、認証サーバに転送します。
認証サーバはリクエスト内のパラメーターを検証し、結果を判断して CDN エッジノードに返します。
CDN エッジノードは認証結果に基づいてユーザーリクエストを処理します。認証が成功した場合、アクセスは許可されます。失敗した場合は、アクセスが拒否または制限されます。例:
例 1:認証が成功した場合。CDN エッジノードはキャッシュデータをユーザーに提供します。
例 2:認証が失敗した場合。CDN エッジノードは HTTP 403 ステータスコードをユーザーに返します。
例 3:認証が失敗した場合。CDN エッジノードはユーザーのアクセスをスロットルします。
例 4:認証がタイムアウトした場合。CDN エッジノードはタイムアウト時のデフォルトアクションを実行します。この場合、リクエストは許可されます。
注意事項
リモート認証を有効にすると、すべてのユーザーリクエストが認証されます。リクエストの量が多いと予想される場合は、認証サーバの処理負荷とパフォーマンスを考慮してください。
操作手順
ApsaraVideo VOD コンソールにログインします。
左側のナビゲーションウィンドウで、設定の管理 を選択します。
配信の高速化設定 > ドメイン名 をクリックして、ドメイン名ページに移動します。
設定するドメイン名を見つけ、設定 をクリックします。
RAM をクリックします。
リモート認証 タブをクリックします。
リモート認証 をオンにし、パラメーターを設定します。

以下の表で、各パラメーターについて説明します。パラメーター
説明
認証サーバアドレス
認証サーバのパブリックにアクセス可能なアドレス。入力されたアドレスのフォーマットと値はシステムによって検証されます。
フォーマット要件
フォーマットは以下のいずれかである必要があります:
http://example.com/auth
https://example.com/auth
http://192.0.2.1/auth
https://192.0.2.1/auth
値の要件
値に 127.0.0.1 または localhost を含めることはできません。これらのローカルアドレスは無効です。
リクエストメソッド
認証サーバがサポートするリクエストメソッド。有効な値は GET、HEAD、POST です。
POST
パラメーターはリクエストボディで送信されます。アドレスバーは変更されません。
理論的には、データ転送サイズに制限はありません。
リクエストはキャッシュされず、ブラウザの履歴にも保存されません。
比較的高いセキュリティ。
GET
パラメーターはリクエストラインで送信されます。アドレスバーには送信されたパラメーター値が表示されます。
ブラウザの制限により、最大データ転送サイズは 1024 バイトです。
リクエストはキャッシュ可能で、ブラウザの履歴に保存されます。
比較的低いセキュリティ。
HEAD
HEAD メソッドは GET メソッドと同じですが、サーバーは応答でリクエストボディを返しません。
認証するファイルタイプ
[すべてのファイルタイプ]:すべてのファイルが認証されます。
[指定されたファイルタイプ]:指定されたファイルタイプのみが認証されます。
複数のファイルタイプを指定するには、縦棒 (|) で区切ります。例:mp4|flv。
ファイルタイプでは大文字と小文字が区別されます。たとえば、jpg と JPG は異なるファイルタイプです。
パラメーター保持設定
ユーザーのリクエスト URL からどのパラメーターを認証に含めるかを制御します。[すべてのパラメーターを保持]、[指定されたパラメーターを保持]、または [すべての URL パラメーターを削除] を選択できます。
指定されたパラメーターを保持するには、複数のパラメーターを縦棒 (|) で区切ります。例:user|token。
パラメーターでは大文字と小文字が区別されます。たとえば、key と KEY は異なるパラメーターです。
カスタムパラメーターの追加
CDN エッジノードが認証サーバに転送するリクエスト URL にカスタムパラメーターを追加します。
[カスタム] を選択してパラメーターと値を設定するか、[パラメーターの選択] から ApsaraVideo VOD コンソールのプリセット変数を使用できます。
カスタムパラメーターと値を設定する場合は、次の点に注意してください:
複数のパラメーターを縦棒 (|) で区切ります。例:token=$arg_token|vendor=ali_cdn。
パラメーターでは大文字と小文字が区別されます。たとえば、key と KEY は異なるパラメーターです。
プリセット変数を使用する場合、変数の値を抽出し、CDN が認証サーバに転送するリクエストに追加できます。
たとえば、$http_host 変数を選択すると、host=$http_host がユーザーのリクエスト URL に追加されます。ここで、host はユーザーのリクエストヘッダーの host フィールドの値を表します。変数名とその意味については、「変数」をご参照ください。
リクエストヘッダー保持設定
ユーザーのリクエストからどのヘッダーを認証に含めるかを制御します。[すべてのヘッダーを保持]、[指定されたヘッダーを保持]、または [すべてのリクエストヘッダーを削除] を選択できます。
指定されたヘッダーを保持するには、複数のヘッダーを縦棒 (|) で区切ります。例:user_agent|referer|cookies。
パラメーターでは大文字と小文字は区別されません。たとえば、http_remote_addr と HTTP_Remote_Addr は同じパラメーターです。
説明[すべてのヘッダーを保持] を選択した場合、CDN POP はデフォルトで HOST ヘッダーを削除します。HOST ヘッダーを保持するには、[指定されたヘッダーを保持] または [カスタムパラメーターの追加] を使用します。認証サーバに転送される HOST ヘッダーには CDN ドメイン名が含まれているため、デフォルトで HOST ヘッダーは削除されます。これにより、認証サーバがリクエストを認識できず、404 エラーや認証失敗が発生する可能性があります。
カスタムパラメーターの追加
CDN エッジノードが認証サーバに転送するリクエストヘッダーにカスタムパラメーターを追加します。
[カスタム] を選択してパラメーターと値を設定するか、[パラメーターの選択] から ApsaraVideo VOD コンソールのプリセット変数を使用できます。
カスタムパラメーターと値を設定する場合は、次の点に注意してください:
複数のリクエストヘッダーを縦棒 (|) で区切ります。例:User-Agent=$http_user_agent|vendor=ali_cdn。
パラメーターでは大文字と小文字は区別されません。たとえば、http_remote_addr と HTTP_Remote_Addr は同じパラメーターです。
プリセット変数を使用する場合、変数の値を抽出し、CDN が認証サーバに転送するリクエストに追加できます。
たとえば、$http_host 変数を選択すると、host=$http_host がユーザーのリクエスト URL に追加されます。ここで、host はユーザーのリクエストヘッダーの host フィールドの値を表します。変数名とその意味については、「変数」をご参照ください。
成功ステータスコード
認証が成功した場合に認証サーバが返す HTTP ステータスコード。これを 2xx ステータスコードに設定することを推奨します。
たとえば、これを 200 に設定すると、認証サーバからの 200 の応答は成功を意味します。サーバーが成功または失敗のコードではないステータスコードを返した場合、リクエストはタイムアウトします。
認証失敗ステータスコード
認証が失敗した場合に認証サーバが返す HTTP ステータスコード。これを 4xx ステータスコードに設定することを推奨します。
たとえば、これを 403 に設定すると、認証サーバからの 403 の応答は失敗を意味します。サーバーが成功または失敗のコードではないステータスコードを返した場合、リクエストはタイムアウトします。
カスタム応答ステータスコード
認証が失敗した場合に CDN エッジノードがユーザーに返すステータスコード。
たとえば、これを 403 に設定すると、リクエストの認証が失敗した場合に CDN エッジノードはユーザーに 403 を返します。
タイムアウト期間
CDN エッジノードが認証リクエストを送信してから、認証サーバから応答を受信するまでの時間。
単位はミリ秒です。最大値は 3000 ミリ秒です。
タイムアウト時のアクション
認証サーバとのやり取りがタイムアウトした場合に、CDN エッジノードがユーザーリクエストに対して実行するアクション。有効な値:
[許可]:CDN POP はユーザーリクエストを許可します。
[拒否]:CDN POP はリクエストを拒否し、設定したカスタム応答ステータスコードを返します。
[OK] をクリックして設定を完了します。
リモート認証を設定した後、リモート認証 タブで変更または無効にすることができます。
変数
カスタムパラメーターを追加する際に、ApsaraVideo VOD コンソールで利用可能なプリセット変数を使用できます。これらの変数については、以下の表で説明します。
変数名 | 説明 |
$http_host | リクエストヘッダーの host フィールドの値。 |
$http_user_agent | リクエストヘッダーの user_agent フィールドの値。 |
$http_referer | リクエストヘッダーの referer フィールドの値。 |
$http_content_type | リクエストヘッダーの content_type フィールドの値。 |
$http_x_forward_for | リクエストヘッダーの x_forward_for フィールドの値。 |
$remote_addr | リクエストのクライアント IP アドレス。 |
$scheme | リクエストのプロトコルタイプ。 |
$server_protocol | リクエストのプロトコルバージョン。 |
$uri | リクエストの元の URI。 |
$args | リクエストのクエリ文字列。疑問符 (?) は含まれません。 |
$request_method | リクエストメソッド。 |
$request_uri | uri + '?' + args の内容。 |