Настроить защищенный доступ к контенту
По умолчанию любой пользователь может получить доступ к вашему контенту.
Вы можете настроить доступ по кодовому слову или собственному скрипту.
Настроить доступ по кодовому слову
Настройка доступа по кодовому слову (Tokenized URL) позволяет сделать ссылки на контент временными и ограничить доступ к контенту по IP-адресу.
К ссылкам на сайте добавляется токен вида md5(kymJ2w55VH4LUMSKGb6ZqA,1704067200). Токен формируется:
- из кодового слова, которое вы придумали;
- пути к файлу на источнике;
- опционально: срока действия ссылки в формате POSIX-времени;
- опционально: разрешенного IP-адреса.
В результате ссылка с токеном будет такого вида:
https://cdn.example.com/md5(kymJ2w55VH4LUMSKGb6ZqA,1704067200)/path/to/file.png.
Когда пользователь переходит по ссылке, CDN-серверы проверяют токен в запросе. Если токен совпадает и время жизни ссылки не истекло, то серверы отдают контент. При этом сами CDN-серверы получают контент от источника независим о от наличия кодового слова.
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу CDN-ресурса → вкладка Ограничения.
-
В блоке Авторизация выберите По кодовому слову.
-
Введите кодовое слово размером от 6 до 32 символов. Можно использовать латинские буквы и цифры.
-
Опционально: чтобы не указывать время действия ссылки, отметьте чекбокс Не ограничивать по времени.
-
Опционально: чтобы не ограничивать доступ к контенту только определенным IP-адресам, отметьте чекбокс Не учитывать IP.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE. -
Настройте генерацию ссылки с токеном на сервере-источнике с помощью скрипта. Посмотреть примеры скриптов можно в подразделе Примеры скрипт а для генерации токена.
Примеры скрипта для генерации защищенной ссылки
Это примеры скрипта для генерации токена с учетом ограничений по IP-адресу и времени действия ссылки.
PHP-скрипт
Python-скрипт
OpenSSL-скрипт
<?php
$secret = '<code_word>';
$ip = '<ip_address>';
$path = '<file_path>';
$lifetime = <link_lifetime>;
$expires = time() + $lifetime;
$link = "$secret$path$ip$expires";
$md5 = md5($link, true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$domain = '<domain>';
$url = "$domain/md5($md5,$expires)$path";
echo $url;
echo "\n";
Укажите:
<code_word>— кодовое слово, которое указали при настройке доступа к контенту по кодовому слову;<ip_address>— IP-адрес, которому вы разрешаете получить контент;<file_path>— относительный путь к файлу на источнике;<link_lifetime>— время жизни ссылки в секундах;<cdn_domain>— домен CDN-ресурса с указанием протокола. Посмотреть домен ресурса можно в панели управления: в верхнем меню нажмите Продукты → CDN → CDN-ресурсы → строка ресурса.
import base64
from hashlib import md5
from time import time
secret = "<code_word>"
ip = "<ip_address>"
path = "<file_path>"
lifetime = <link_lifetime>
domain = "<cdn_domain>"
expires = int(time()) + lifetime
token_byte = base64.encodebytes(
md5(f"{secret}{path}{ip}{expires}".encode("utf-8")).digest()
)
token = (
token_byte
.decode("utf-8")
.replace("\n", "")
.replace("+", "-")
.replace("/", "_")
.replace("=", "")
)
secured_url = f"{domain}/md5({token},{expires}){path}"
print(secured_url)
Укажите:
<code_word>— кодовое слово, которое указали при настройке доступа к контенту по кодовому слову;<ip_address>— IP-адрес, которому вы разрешаете получить контент;<file_path>— относительный путь к файлу на источнике;<link_lifetime>— время жизни ссылки в секундах;<cdn_domain>— домен CDN-ресурса с указанием протокола. Посмотреть домен ресурса можно в панели управления: в верхнем меню нажмите Продукты → CDN → CDN-ресурсы → строка ресурса.
SECRET="<code_word>"
IP="<ip_address>"
PATH="<file_path>"
LIFETIME=<link_lifetime>
DOMAIN="<cdn_domain>"
EXPIRES=$(($(date +%s) + LIFETIME))
HASH_STRING="${SECRET}${PATH}${IP}${EXPIRES}"
TOKEN=$(echo -n "$HASH_STRING" | openssl md5 -binary | openssl base64 | tr '+/' '-_' | tr -d '=')
SECURED_URL="${DOMAIN}/md5(${TOKEN},${EXPIRES})${PATH}"
echo "$SECURED_URL"
Укажите:
<code_word>— кодовое слово, которое указали при настройке доступа к контенту по кодовому слову;<ip_address>— IP-адрес, которому вы разрешаете получить контент;<file_path>— относительный путь к файлу на источнике;<link_lifetime>— время жизни ссылки в секундах;<cdn_domain>— домен CDN-ресурса с указанием протокола. Посмотреть домен ресурса можно в панели управления: в верхнем меню нажмите Продукты → CDN → CDN-ресурсы → строка ресурса.
Настроить доступ по собственному скрипту
Вы можете добавить собственный скрипт для авторизации пользователей.
Когда пользователь переходит по ссылке, решение о доступе контента принимается на основе ответа от скрипта.
В скрипте нужно передать заголовки:
Host— имя домена, для которого предназначен запрос;X-Request-URI— URI запрашиваемого ресурса;X-Forwarded-For— реальный IP-адрес пользователя, который запрашивает ресурс;X-Remote-Addr— IP-адрес пользователя, который запрашивает ресурс, или IP-адрес прокси-сервера.
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу CDN-ресурса → вкладка Ограничения.
-
В блоке Авторизация выберите По внешнему скрипту.
-
Укажите ссылку на ваш скрипт.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE.