Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Cloud CDN
  • Начало работы
    • Обзор сервиса
    • Ресурс
    • Источники и их группы
    • Перенаправление запросов
    • Кеширование контента
    • Защищенные токены
    • Политика доступа по IP-адресам
    • Выгрузка логов
    • Метки
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Решение проблем

В этой статье:

  • Подписанная ссылка
  • Примеры
  • Подписанная ссылка с ограничением доступа по IP-адресу
  • Подписанная ссылка без ограничения доступа по IP-адресу
  • См. также
  1. Концепции
  2. Защищенные токены

Защищенные токены

Статья создана
Yandex Cloud
Обновлена 11 марта 2025 г.
  • Подписанная ссылка
  • Примеры
    • Подписанная ссылка с ограничением доступа по IP-адресу
    • Подписанная ссылка без ограничения доступа по IP-адресу
    • См. также

С помощью защищенных токенов (secure token) вы можете ограничить доступ к файлам CDN-ресурса. Это используется, например, для временного или платного доступа к файлам, а также для обеспечения безопасности чувствительных данных.

Доступ к файлам осуществляется по подписанным ссылкам с ограниченным сроком действия, query-параметры которых содержат защищенный токен. CDN-сервер по хэшу сверяет полученный токен с секретным ключом CDN-ресурса и переданными в HTTP-запросе данными и разрешает или запрещает доступ к файлу.

Также с помощью защищенных токенов можно задать доверенный IP-адрес, с которого будет разрешен доступ к CDN-ресурсу.

Вы можете включить для CDN-ресурса доступ по защищенному токену с помощью консоли управления, CLI, Terraform или API. Для вступления изменений в силу может потребоваться до 15 минут.

Если для CDN-ресурса включен доступ по защищенному токену, контент доступен только по подписанным ссылкам. Чтобы сохранить доступ к части контента по обычным ссылкам, создайте для этого контента еще один CDN-ресурс с отдельным источником.

Подробности о защищенном токене см. в документации CDN-провайдера EdgeЦентр:

  • Secure token. Обзор функции
  • Документация API

Подписанная ссылкаПодписанная ссылка

Подписанная ссылка генерируется вне CDN-ресурса, например на основном легковесном сайте, и содержит следующие query-параметры:

  • md5 — защищенный токен в кодировке Base64, который является MD5-хэшем строки, состоящей из элементов:
    • Секретный ключ — произвольная строка длиной от 6 до 32 символов.
    • Срок действия ссылки — момент времени в Unix-формате, после которого доступ к файлу будет запрещен. Начать скачивание файла можно до истечения срока действия, а завершить можно и после.
    • Путь к файлу в источнике.
    • (опционально) Доверенный IP-адрес, с которого разрешено скачивать файл. Задается, если для CDN-ресурса включено ограничение доступа по IP-адресу. Если ограничение не задано, доступ к файлам будет разрешен с любых IP-адресов. Задать ограничение доступа по IP-адресу можно как при включении доступа по защищенному токену, так и позднее.
  • expires — срок действия ссылки в Unix-формате.

Пример подписанной ссылки:

http://cdn.example.com/files/image.jpg?md5=xu7AXOAOQ********Ua0xw&expires=1701609223

ПримерыПримеры

Чтобы сформировать подписанную ссылку, воспользуйтесь одним из примеров.

Подписанная ссылка с ограничением доступа по IP-адресуПодписанная ссылка с ограничением доступа по IP-адресу

Примечание

Подключение VPN может мешать корректной работе подписанных ссылок с ограничением доступа по IP-адресу. Для корректной работы ссылок отключите VPN.

PHP
Python
OpenSSL
<?php

$secret = '<секретный_ключ>';
$path = '<путь_к_файлу>';
$ip = '<IP-адрес>';
$expires = time() + <срок_действия_ссылки>;
$hostname = '<доменное_имя>';
$link = "$expires$path$ip $secret";
$md5 = md5($link, true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url = "{$hostname}{$path}?md5={$md5}&expires={$expires}";

?>

Где:

  • $secret — секретный ключ — произвольная строка длиной от 6 до 32 символов.
  • $path — путь к файлу, для доступа к которому генерируется ссылка. Например: /files/image.jpg.
  • $ip — доверенный IP-адрес, c которого будет разрешен доступ к файлу. Например: 1.2.3.4.
  • $expires — момент времени в Unix-формате, после которого ссылка станет недействительной, <срок_действия_ссылки> — срок действия ссылки в секундах с момента генерации ссылки.
  • $hostname — доменное имя CDN-ресурса с указанием схемы (http или https). Например: https://cdn.example.com.
  • $url — готовая подписанная ссылка на файл.
import base64 
from hashlib import md 
from time import time 
ip = '<IP-адрес>' 
secret = '<секретный_ключ>' 
path = f'<путь_к_файлу>' 
expires = int(time()) + <срок_действия_ссылки> 
hostname = '<доменное_имя>' 
token = base64.encodebytes(md5(f"{expires}{path}{ip} {secret}".encode()).digest()).decode().replace("\n", "").replace("+", "-").replace("/", "_").replace("=", "") 
secured_url = f"{hostname}{path}?md5={token}&expires={expires}" 

Где:

  • ip — доверенный IP-адрес, c которого будет разрешен доступ к файлу. Например: 1.2.3.4.
  • secret — секретный ключ — произвольная строка длиной от 6 до 32 символов.
  • path — путь к файлу, для доступа к которому генерируется ссылка. Например: /files/image.jpg.
  • expires — момент времени в Unix-формате, после которого ссылка станет недействительной, <срок_действия_ссылки> — срок действия ссылки в секундах с момента генерации ссылки.
  • hostname — доменное имя CDN-ресурса с указанием схемы (http или https). Например: https://cdn.example.com.
  • secured_url — готовая подписанная ссылка на файл.
#!/bin/bash
# This script generates a signed link with IP-based restricted access
let "EXPIRES=$(date +%s) + <срок_действия_ссылки>"
HOSTNAME="<доменное_имя>"
FILEPATH="<путь_к_файлу>"
IP="<IP-адрес>"
SECRET="<секретный_ключ>"
TOKEN=$(echo -n $EXPIRES$FILEPATH$IP' '$SECRET | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d = )
echo $HOSTNAME$FILEPATH'?md5='$TOKEN'&expires='$EXPIRES

Где:

  • $EXPIRES — момент времени в Unix-формате, после которого ссылка станет недействительной, <срок_действия_ссылки> — срок действия ссылки в секундах с момента генерации ссылки.
  • $HOSTNAME — доменное имя CDN-ресурса с указанием схемы (http или https). Например: https://cdn.example.com.
  • $FILEPATH — путь к файлу, для доступа к которому генерируется ссылка. Например: /files/image.jpg.
  • $IP — доверенный IP-адрес, c которого будет разрешен доступ к файлу. Например: 1.2.3.4.
  • $SECRET — секретный ключ — произвольная строка длиной от 6 до 32 символов.

Подписанная ссылка без ограничения доступа по IP-адресуПодписанная ссылка без ограничения доступа по IP-адресу

PHP
Python
OpenSSL
<?php

$secret = '<секретный_ключ>';
$path = '<путь_к_файлу>';
$expires = time() + <срок_действия_ссылки>;
$hostname = '<доменное_имя>';
$link = "$expires$path $secret";
$md5 = md5($link, true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url = "{$hostname}{$path}?md5={$md5}&expires={$expires}";

?>

Где:

  • $secret — секретный ключ — произвольная строка длиной от 6 до 32 символов.
  • $path — путь к файлу, для доступа к которому генерируется ссылка. Например: /files/image.jpg.
  • $expires — момент времени в Unix-формате, после которого ссылка станет недействительной, <срок_действия_ссылки> — срок действия ссылки в секундах с момента генерации ссылки.
  • $hostname — доменное имя CDN-ресурса с указанием схемы (http или https). Например: https://cdn.example.com.
  • $url — готовая подписанная ссылка на файл.
import base64 
from hashlib import md5 
from time import time 
secret = '<секретный_ключ>'
path = f'<путь_к_файлу>'  
expires = int(time()) + <срок_действия_ссылки> 
hostname = '<доменное_имя>' 
token = base64.encodebytes(md5(f"{expires}{path} {secret}".encode()).digest()).decode().replace("\n", "").replace("+", "-").replace("/", "_").replace("=", "") 
secured_url = f"{hostname}{path}?md5={token}&expires={expires}" 

Где:

  • secret — секретный ключ — произвольная строка длиной от 6 до 32 символов.
  • path — путь к файлу, для доступа к которому генерируется ссылка. Например: /files/image.jpg.
  • expires — момент времени в Unix-формате, после которого ссылка станет недействительной, <срок_действия_ссылки> — срок действия ссылки в секундах с момента генерации ссылки.
  • hostname — доменное имя CDN-ресурса с указанием схемы (http или https). Например: https://cdn.example.com.
  • secured_url — готовая подписанная ссылка на файл.
#!/bin/bash
# This script generates a signed link with no IP address restrictions
let "EXPIRES=$(date +%s) + <срок_действия_ссылки>"
HOSTNAME="<доменное_имя>"
FILEPATH="<путь_к_файлу>"
SECRET="<секретный_ключ>"
TOKEN=$(echo -n $EXPIRES$FILEPATH' '$SECRET | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d = )
echo $HOSTNAME$FILEPATH'?md5='$TOKEN'&expires='$EXPIRES

Где:

  • $EXPIRES — момент времени в Unix-формате, после которого ссылка станет недействительной, <срок_действия_ссылки> — срок действия ссылки в секундах с момента генерации ссылки.
  • $HOSTNAME — доменное имя CDN-ресурса с указанием схемы (http или https). Например: https://cdn.example.com.
  • $FILEPATH — путь к файлу, для доступа к которому генерируется ссылка. Например: /files/image.jpg.
  • $SECRET — секретный ключ — произвольная строка длиной от 6 до 32 символов.

См. такжеСм. также

  • Настройка доступа по защищенному токену
  • Создание ресурса
  • Изменение основных настроек ресурса
  • Организация защищенного доступа к контенту в Cloud CDN

Была ли статья полезна?

Предыдущая
Кеширование контента
Следующая
Политика доступа по IP-адресам
Проект Яндекса
© 2025 ООО «Яндекс.Облако»