0Pricing
AWS Solutions Architect · Урок

Подписанные URL, подписанные файлы cookie и географические ограничения

Ограничьте доступ к премиум-контенту с помощью подписанных URL и файлов cookie и заблокируйте пользователей из определённых стран с помощью географических ограничений.

«Подписанные URL, подписанные файлы cookie и географические ограничения» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.

Ограничение доступа к содержимому CloudFront

По умолчанию CloudFront предоставляет содержимое любому пользователю, знающему URL. Для платного или закрытого содержимого — видеокурсов, платных загрузок программного обеспечения и ресурсов только для участников — необходимо ограничить доступ, чтобы получать его могли только авторизованные пользователи.

CloudFront предоставляет два механизма авторизованного доступа: подписанные URL (один URL предоставляет доступ к одному определённому объекту) и подписанные файлы cookie (набор файлов cookie предоставляет доступ к нескольким объектам, соответствующим шаблону пути). Оба механизма используют криптографические подписи, созданные с помощью пары ключей RSA.

Подписанные URL CloudFront

Подписанный URL — это URL CloudFront, содержащий криптографическую подпись с закодированным сроком действия и, при необходимости, ограничением по IP-адресу. URL действителен только до истечения срока действия и только с разрешённого IP-адреса, если он указан. После истечения срока действия CloudFront возвращает ошибку 403 Forbidden.

Подписанные URL лучше всего подходят для предоставления одному пользователю доступа к одному конкретному файлу (например, созданному отчёту в формате PDF), создания ссылок на скачивание с ограниченным сроком действия или случаев, когда клиент не может устанавливать файлы cookie (например, мобильные приложения или потоковая передача RTMP).

# Generate a signed URL using AWS CLI (requires a CloudFront key pair)
aws cloudfront sign \
  --url https://d1234abcdef.cloudfront.net/premium/video.mp4 \
  --key-pair-id APKA1234567890 \
  --private-key file://private-key.pem \
  --date-less-than 2026-06-21T00:00:00Z

Подписанные файлы cookie CloudFront

Подписанные файлы cookie работают аналогично подписанным URL, но предоставляют доступ к нескольким файлам без изменения каждого URL. После успешной аутентификации сервер создаёт три файла cookie (CloudFront-Policy, CloudFront-Signature, CloudFront-Key-Pair-Id) и добавляет их в ответ браузеру. Последующие запросы из этого браузера к CloudFront содержат эти файлы cookie, предоставляя доступ ко всему соответствующему содержимому.

Подписанные файлы cookie лучше всего подходят для предоставления авторизованным пользователям доступа ко всему разделу с платным содержимым (например, ко всем видео в /members/*) или когда Вы не можете управлять форматом URL каждого отдельного ресурса.

Доверенные группы ключей

Для создания подписей CloudFront необходима пара ключей CloudFront. Современный подход использует доверенные группы ключей: создайте пару ключей RSA, загрузите открытый ключ в CloudFront, добавьте его в группу ключей, а затем свяжите группу ключей с поведением кэширования, для которого требуется подписанный доступ.

Закрытый ключ надёжно хранится (например, в Secrets Manager) на сервере, создающем подписи. Когда пользователь проходит аутентификацию, сервер использует закрытый ключ для подписания политики URL или файла cookie. CloudFront проверяет подписи с помощью соответствующего открытого ключа из доверенной группы ключей.

# Upload a public key to CloudFront
aws cloudfront create-public-key \
  --public-key-config '{
    "Name": "MySigningKey",
    "EncodedKey": "-----BEGIN PUBLIC KEY-----\n...<key>...\n-----END PUBLIC KEY-----",
    "CallerReference": "2026-06-20-key"
  }'

Стандартные и пользовательские политики подписанных URL

Подписанные URL могут использовать один из двух типов политик:

  • Стандартная политика: простейшая форма, содержащая только URL ресурса и срок действия. Подпись получается компактной и легко создаётся.
  • Пользовательская политика: более гибкая форма, содержащая URL ресурса с необязательными подстановочными символами (https://d123.cloudfront.net/videos/*), необязательное время начала действия и, при необходимости, ограничение по IP-адресу. JSON политики кодируется в URL с помощью Base64.

Используйте стандартные политики для простых ссылок на отдельные файлы, а пользовательские — когда требуется сопоставление ресурсов по подстановочным символам или ограничения по IP-адресам.

Географические ограничения CloudFront

Географическое ограничение (также называемое географическими ограничениями) блокирует или разрешает выдачу содержимого CloudFront в зависимости от страны пользователя. CloudFront определяет страну пользователя по его IP-адресу с помощью сторонней базы данных геолокации.

Вы настраиваете географическое ограничение для каждого распределения как список разрешённых стран (доступ к содержимому имеют только указанные страны) или список заблокированных стран (указанные страны блокируются). Пользователи из ограниченных стран получают ответ HTTP 403. Географическое ограничение — грубый инструмент: оно применяется ко всему распределению, а не к отдельным путям.

# Enable geo-restriction: block two countries
aws cloudfront update-distribution \
  --id EDFDVBD6EXAMPLE \
  --distribution-config '{
    ...existing config...
    "Restrictions": {
      "GeoRestriction": {
        "RestrictionType": "blacklist",
        "Quantity": 2,
        "Items": ["CN", "RU"]
      }
    }
  }' \
  --if-match ETVPDKIKX0DER

Географические ограничения и геомаршрутизация Route 53

Географические ограничения CloudFront и геомаршрутизация Route 53 используют географию, но служат разным целям:

  • Географические ограничения CloudFront: блокируют или разрешают выдачу на периферии на уровне CDN — заблокированным странам возвращается ответ 403; применяются к каждому распределению
  • Геомаршрутизация Route 53: направляет запросы DNS к разным конечным точкам (разным серверам или страницам) в зависимости от географии — не блокирует доступ, а перенаправляет к другому содержимому или другой инфраструктуре

Используйте географические ограничения CloudFront для управления доступом (блокировки целых стран), а геомаршрутизацию Route 53 — для направления пользователей к содержимому или инфраструктуре, подходящим для их региона.

Объединение подписанных URL с S3 и OAC

Полная архитектура доставки частного содержимого:

  1. Бакет S3 является частным (публичный доступ отсутствует)
  2. CloudFront использует OAC, поэтому только распределение может читать данные из S3
  3. Для поведения кэширования частного содержимого требуются подписанные URL или файлы cookie (связанная доверенная группа ключей)
  4. Сервер приложения аутентифицирует пользователей и выдаёт подписанные URL или файлы cookie
  5. Пользователи получают доступ к содержимому только через подписанные URL CloudFront с ограниченным сроком действия

Даже если пользователь угадает URL S3 или поделится им, доступ будет заблокирован. Даже если он поделится URL CloudFront, срок его действия истечёт через настроенное время. Такой многоуровневый подход обеспечивает эшелонированную защиту цифрового содержимого.

Шифрование на уровне полей

Шифрование на уровне полей — это расширенная функция CloudFront, позволяющая шифровать конфиденциальные поля в HTTP-запросах POST на периферии перед их передачей на исходный сервер. Даже если исходный сервер будет взломан, зашифрованные поля (например, номера банковских карт и номера SSN) останутся нечитаемыми без соответствующего закрытого ключа.

CloudFront шифрует указанные поля на периферии с помощью открытого ключа. Расшифровать данные может только предназначенная для этого внутренняя служба с соответствующим закрытым ключом. Шифрование на уровне полей добавляет уровень защиты в уже защищённый с помощью TLS конвейер.

Шаблон управления доступом на основе токенов

Для динамических приложений, которым требуется детальное управление доступом помимо блокировки на уровне стран, часто используется следующий шаблон: управление доступом на основе токенов с помощью Lambda@Edge:

  1. Пользователь проходит аутентификацию через Cognito или Вашу службу аутентификации и получает JWT
  2. Пользователь добавляет JWT в качестве параметра запроса или файла cookie к запросам CloudFront
  3. Функция Viewer-Request Lambda@Edge проверяет подпись и утверждения JWT
  4. Если данные действительны, Lambda@Edge передаёт запрос исходному серверу; если нет — возвращает ошибку 401

Это обеспечивает детальное управление доступом для каждого пользователя и каждого ресурса непосредственно на периферии CloudFront, без обращения к исходному серверу для неавторизованных запросов.

Краткий обзор практических сценариев

Типовые экзаменационные сценарии для подписанных URL, файлов cookie и географических ограничений:

  • «Ссылка на скачивание приобретённого файла с ограниченным сроком действия» → Подписанный URL со сроком действия
  • «Авторизованные пользователи получают доступ ко всем видео в /premium/*» → Подписанные файлы cookie с политикой подстановочных символов
  • «Заблокировать доступ пользователям из определённых стран из-за лицензионных ограничений» → список заблокированных стран в географическом ограничении CloudFront
  • «Показывать разное содержимое пользователям из разных стран» → геомаршрутизация Route 53 + несколько распределений или исходных серверов
  • «Защитить поля банковской карты даже от администраторов исходного сервера» → шифрование на уровне полей

Быстрая проверка

Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.

Итоги урока

В этом уроке Вы узнали, что подписанные URL ограничивают доступ к отдельным файлам с учётом срока действия и необязательного ограничения по IP-адресу, подписанные файлы cookie предоставляют доступ к нескольким файлам, соответствующим шаблону пути, в рамках одного аутентифицированного сеанса, а географические ограничения блокируют или разрешают доступ целым странам на уровне распределения CloudFront. Далее мы рассмотрим CloudFront вместе с WAF и Lambda@Edge.

Часто задаваемые вопросы

Урок «Подписанные URL, подписанные файлы cookie и географические ограничения» бесплатный?

Да — полный текст урока «Подписанные URL, подписанные файлы cookie и географические ограничения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.

Чему я научусь в уроке «Подписанные URL, подписанные файлы cookie и географические ограничения»?

Ограничьте доступ к премиум-контенту с помощью подписанных URL и файлов cookie и заблокируйте пользователей из определённых стран с помощью географических ограничений. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AWS Solutions Architect?

Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Подписанные URL, подписанные файлы cookie и географические ограничения»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AWS Solutions Architect?

Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Дистрибутивы и источники CloudFront
  2. Поведение кэша и настройки TTL
  3. Подписанные URL, подписанные файлы cookie и географические ограничения
  4. CloudFront с WAF и Lambda@Edge
← Назад к AWS Solutions Architect