リモート認証は、リソースを保護するためのアクセス制御機能です。ユーザーリクエストが Alibaba Cloud CDN の POP (Point of Presence) に到達すると、POP はそのリクエストを認証サーバーに転送して検証し、その結果に基づいてリクエストを処理します。これにより、承認されたユーザーのみがコンテンツにアクセスできるようになります。
仕組み
ApsaraVideo VOD は、URL 署名とリモート認証の両方をサポートしており、コンテンツが不正にダウンロードされたり、ホットリンクされたりするのを防ぎます。これら 2 つの機能は、実装方法が異なります。
-
URL 署名:ドメイン名の認証ルールを定義し、CDN POP に配信します。その後、CDN POP が認証プロセス全体を処理します。詳細については、「URL 署名」をご参照ください。
-
リモート認証:お客様自身で認証サーバーを用意し、管理する必要があります。CDN POP が認証を必要とするリクエストを受信すると、そのリクエストをお客様のサーバーに転送して検証します。
以下の図は、リモート認証のプロセスを示しています:
-
ユーザーがリソースをリクエストする際、認証パラメーターを含めて CDN POP に送信します。
-
CDN POP はユーザーリクエストを受信し、お客様の認証サーバーに転送します。
-
認証サーバーはリクエスト内のパラメーターを検証し、その結果を CDN POP に返します。
-
CDN POP は認証結果に基づいてユーザーリクエストを処理します。認証が成功した場合、POP はリクエストを許可します。認証が失敗した場合、POP はリクエストを拒否または制限します。以下に例を示します。
-
例 1:認証成功。CDN POP はキャッシュされたコンテンツをユーザーに提供します。
-
例 2:認証失敗。CDN POP は 403 ステータスコードをユーザーに返します。
-
例 3:認証失敗。CDN POP はユーザーのアクセスに対してスロットリングを実行します。
-
例 4:認証タイムアウト。CDN POP はユーザーリクエストを許可します。これがデフォルトの動作です。
-
注意事項
リモート認証を有効にすると、すべてのユーザーリクエストに対して認証が必要になります。大量のトラフィックが予想される場合は、認証サーバーがその負荷を処理できることを確認してください。
操作手順
-
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
-
パラメーターはリクエストボディで送信され、アドレスバーの URL は変更されません。
-
送信されるデータ量に実質的な制限はありません。
-
リクエストはキャッシュされず、ブラウザの履歴にも保存されません。
-
セキュリティは比較的高くなります。
-
-
GET
-
パラメーターはリクエストラインで送信され、その値はアドレスバーに表示されます。
-
ブラウザの制限により、送信可能なデータ量は 1,024 バイトに制限されます。
-
リクエストはキャッシュ可能で、ブラウザの履歴に保存されます。
-
セキュリティは比較的低くなります。
-
-
HEAD
HEAD メソッドは GET メソッドと同じですが、サーバーがレスポンスでメッセージボディを返さない点が異なります。
ファイルタイプ
-
すべてのファイルタイプ:すべてのファイル形式のリクエストを認証します。
-
指定されたファイルタイプ:指定されたファイル形式のリクエストのみを認証します。
-
複数のファイル形式を指定するには、縦棒 (|) で区切ります (例:
mp4|flv)。 -
ファイル形式では大文字と小文字が区別されます。たとえば、
jpgとJPGは異なるファイル形式と見なされます。
-
パラメーターの保持
ユーザーリクエスト URL のどのパラメーターを認証に使用するかを制御します。[すべてのパラメーターを保持]、[指定されたパラメーターを保持]、または [すべての URL パラメーターを削除] を選択できます。
-
指定されたパラメーターを保持することを選択した場合、複数のパラメーターを縦棒 (|) で区切ります (例:
user|token)。 -
パラメーターでは大文字と小文字が区別されます。たとえば、
keyとKEYは異なるパラメーターと見なされます。
カスタムパラメーターの追加
CDN POP が認証サーバーに転送するリクエスト URL にカスタムパラメーターを追加します。
[カスタム] を選択してカスタムパラメーターと値を設定するか、[パラメーターの選択] を選択してコンソールから定義済み変数を使用できます。
-
カスタムパラメーターと値を設定する場合:
-
複数のパラメーターを縦棒 (|) で区切ります (例:
token=$arg_token|vendor=ali_cdn)。 -
パラメーターでは大文字と小文字が区別されます。たとえば、
keyとKEYは異なるパラメーターと見なされます。
-
-
定義済み変数を使用する場合、その値を抽出し、CDN POP が転送するリクエストに追加できます。
たとえば、
$http_host変数を選択すると、host=$http_hostがリクエスト URL に追加されます。ここで、$http_hostはユーザーリクエストの Host ヘッダーの値です。変数とその説明の一覧については、「変数名」をご参照ください。
リクエストヘッダーの保持
ユーザーリクエストのどのヘッダーを認証に使用するかを制御します。[すべてのヘッダーを保持]、[指定されたヘッダーを保持]、または [すべてのリクエストヘッダーを削除] を選択できます。
-
指定されたヘッダーを保持することを選択した場合、複数のヘッダーを縦棒 (|) で区切ります (例:
user_agent|referer|cookies)。 -
リクエストヘッダーでは大文字と小文字は区別されません。たとえば、
http_remote_addrとHTTP_Remote_Addrは同じヘッダーと見なされます。
説明デフォルトでは、CDN POP は
Hostヘッダーを削除します。これは、転送されたリクエストのHostヘッダーに加速ドメイン名が含まれているためです。認証サーバーがこのドメイン名を認識できず、404 エラーや認証の失敗を引き起こす可能性があります。Hostヘッダーを保持するには、[指定されたヘッダーを保持] または [カスタムヘッダーの追加] を使用します。カスタムヘッダーの追加
CDN POP が認証サーバーに転送するリクエストにカスタムヘッダーを追加します。
[カスタム] を選択してカスタムヘッダーと値を設定するか、[パラメーターの選択] を選択してコンソールから定義済み変数を使用できます。
-
カスタムパラメーターと値を設定する場合:
-
複数のヘッダーを縦棒 (|) で区切ります (例:
User-Agent=$http_user_agent|vendor=ali_cdn)。 -
リクエストヘッダーでは大文字と小文字は区別されません。たとえば、
http_remote_addrとHTTP_Remote_Addrは同じヘッダーと見なされます。
-
-
定義済み変数を使用する場合、その値を抽出し、CDN POP が転送するリクエストに追加できます。
たとえば、
$http_host変数を選択すると、host=$http_hostがリクエストヘッダーに追加されます。ここで、$http_hostはユーザーリクエストの Host ヘッダーの値です。変数とその説明の一覧については、「変数名」をご参照ください。
成功ステータスコード
認証サーバーからの成功を示す HTTP ステータスコード。2xx ステータスコードの使用を推奨します。
たとえば、このパラメーターを 200 に設定すると、認証サーバーからの 200 レスポンスは認証成功を示します。サーバーが成功コードでも失敗コードでもないステータスコードを返した場合、リクエストはタイムアウトとして扱われます。
失敗ステータスコード
認証サーバーからの失敗を示す HTTP ステータスコード。4xx ステータスコードの使用を推奨します。
たとえば、このパラメーターを 403 に設定すると、認証サーバーからの 403 レスポンスは認証失敗を示します。サーバーが成功コードでも失敗コードでもないステータスコードを返した場合、リクエストはタイムアウトとして扱われます。
カスタムレスポンスステータスコード
リクエストが認証に失敗した場合に CDN POP がユーザーに返すステータスコード。
たとえば、これを 403 に設定すると、ユーザーのリクエストが認証に失敗したときに CDN POP は 403 ステータスコードをユーザーに返します。
タイムアウト
CDN POP が認証サーバーからのレスポンスを待機する最大時間。
単位:ミリ秒。最大値は 3000 です。
タイムアウト時の動作
認証サーバーへの認証リクエストがタイムアウトした場合に CDN POP が実行する動作。有効な値:
-
allow:タイムアウトが発生した場合、CDN POP はユーザーリクエストを許可します。
-
reject:タイムアウトが発生した場合、CDN POP は指定された [カスタムレスポンスステータスコード] をユーザーに返します。
-
-
[OK] をクリックして設定を保存します。
リモート認証を設定した後、リモート認証 タブに戻り、設定を変更したり、機能を無効にしたりすることができます。
変数名
カスタムパラメーターを追加する際に、以下の定義済み変数を使用できます。
|
パラメーター |
説明 |
|
$http_host |
リクエストの Host ヘッダーの値。 |
|
$http_user_agent |
リクエストの User-Agent ヘッダーの値。 |
|
$http_referer |
リクエストの Referer ヘッダーの値。 |
|
$http_content_type |
リクエストの Content-Type ヘッダーの値。 |
|
$http_x_forward_for |
リクエストの X-Forwarded-For ヘッダーの値。 |
|
$remote_addr |
リクエストのクライアント IP アドレス。 |
|
$scheme |
リクエストのプロトコル (例: |
|
$server_protocol |
リクエストのプロトコルバージョン (例: |
|
$uri |
リクエストの元の URI。 |
|
$args |
リクエストのクエリ文字列。疑問符 (?) は含まれません。 |
|
$request_method |
リクエストメソッド。 |
|
$request_uri |
クエリ文字列を含む完全なリクエスト URI ( |