Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Практические руководства
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Централизованная публикация в интернете и защита приложений от DDoS
    • Передача логов с виртуальной машины в Cloud Logging
    • Запись логов балансировщика в PostgreSQL
    • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
      • Обзор
      • Консоль управления, CLI, API
      • Terraform
    • Передача логов с Container Optimized Image в Cloud Logging
    • Добавление HTML-страницы для работы SmartCaptcha
    • Создание L7-балансировщика с профилем безопасности
    • Настройка алертов в Monitoring
    • Загрузка аудитных логов в MaxPatrol SIEM
    • Загрузка аудитных логов в SIEM Splunk
    • Загрузка аудитных логов в SIEM ArcSight
    • Шифрование для бакета Object Storage на стороне сервера
    • Шифрование секретов в HashiCorp Terraform
    • Управление ключами KMS с HashiCorp Terraform
    • Auto Unseal в HashiCorp Vault

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте облачную сеть и подсеть
  • Создайте группу безопасности
  • Подготовьте файлы для загрузки в бакет
  • Создайте виртуальную машину с веб-сервером
  • Создайте и настройте публичную зону DNS
  • Добавьте TLS-сертификат в Yandex Certificate Manager
  • Подготовьте бакет-источник для CDN-ресурса
  • Создайте CDN-ресурс
  • Создайте ресурсную запись CNAME для CDN-ресурса
  • Опубликуйте сайт на веб-сервере
  • Выгрузите сертификат из Certificate Manager
  • Настройте веб-сервер
  • Создайте сайт
  • Проверьте работу защищенного доступа к файлам
  • Как удалить созданные ресурсы
  1. Безопасность
  2. Организация защищенного доступа к контенту в Cloud CDN
  3. Консоль управления, CLI, API

Организация защищенного доступа к контенту в Cloud CDN с помощью консоли управления, CLI или API

Статья создана
Yandex Cloud
Обновлена 24 марта 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
    • Создайте облачную сеть и подсеть
    • Создайте группу безопасности
    • Подготовьте файлы для загрузки в бакет
  • Создайте виртуальную машину с веб-сервером
  • Создайте и настройте публичную зону DNS
  • Добавьте TLS-сертификат в Yandex Certificate Manager
  • Подготовьте бакет-источник для CDN-ресурса
  • Создайте CDN-ресурс
  • Создайте ресурсную запись CNAME для CDN-ресурса
  • Опубликуйте сайт на веб-сервере
    • Выгрузите сертификат из Certificate Manager
    • Настройте веб-сервер
    • Создайте сайт
  • Проверьте работу защищенного доступа к файлам
  • Как удалить созданные ресурсы

Чтобы настроить защищенный доступ к контенту в Cloud CDN:

  1. Подготовьте облако к работе.
  2. Создайте виртуальную машину с веб-сервером.
  3. Создайте и настройте публичную зону DNS.
  4. Добавьте TLS-сертификат в Yandex Certificate Manager.
  5. Подготовьте бакет-источник для CDN-ресурса.
  6. Создайте CDN-ресурс.
  7. Создайте ресурсную запись CNAME для CDN-ресурса.
  8. Опубликуйте сайт на веб-сервере.
  9. Проверьте работу защищенного доступа к файлам.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры для организации защищенного доступа к контенту в Cloud CDN входят:

  • плата за использование публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud);
  • плата за вычислительные ресурсы и диски ВМ (см. тарифы Yandex Compute Cloud);
  • плата за использование публичной DNS-зоны и публичные DNS-запросы (см. тарифы Yandex Cloud DNS);
  • плата за хранение данных в Object Storage, операции с ними и исходящий трафик (см. тарифы Object Storage);
  • плата за исходящий трафик с CDN-серверов (см. тарифы Cloud CDN).

Создайте облачную сеть и подсетьСоздайте облачную сеть и подсеть

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.
  2. В списке сервисов выберите Virtual Private Cloud.
  3. Справа сверху нажмите Создать сеть.
  4. В поле Имя укажите webserver-network.
  5. В поле Дополнительно отключите опцию Создать подсети.
  6. Нажмите Создать сеть.
  7. На панели слева выберите Подсети.
  8. Справа сверху нажмите Создать подсеть.
  9. В поле Имя укажите webserver-subnet-ru-central1-b.
  10. В поле Зона выберите зону доступности ru-central1-b.
  11. В поле Сеть выберите облачную сеть webserver-network.
  12. В поле CIDR укажите 192.168.1.0/24.
  13. Нажмите Создать подсеть.
  1. Создайте сеть webserver-network:

    yc vpc network create webserver-network
    

    Результат:

    id: enp1gg8kr3pv********
    folder_id: b1gt6g8ht345********
    created_at: "2023-12-20T20:08:11Z"
    name: webserver-network
    default_security_group_id: enppne4l2eg5********
    

    Подробнее о команде yc vpc network create читайте в справочнике CLI.

  2. Создайте подсеть в зоне доступности ru-central1-b:

    yc vpc subnet create webserver-subnet-ru-central1-b \
      --zone ru-central1-b \
      --network-name webserver-network \
      --range 192.168.1.0/24
    

    Результат:

    id: e2li9tcgi7ii********
    folder_id: b1gt6g8ht345********
    created_at: "2023-12-20T20:11:16Z"
    name: webserver-subnet-ru-central1-b
    network_id: enp1gg8kr3pv********
    zone_id: ru-central1-b
    v4_cidr_blocks:
      - 192.168.1.0/24
    

    Подробнее о команде yc vpc subnet create читайте в справочнике CLI.

  1. Чтобы создать сеть, воспользуйтесь методом REST API create для ресурса Network или вызовом gRPC API NetworkService/Create.

  2. Чтобы создать подсеть, воспользуйтесь методом REST API create для ресурса Subnet или вызовом gRPC API SubnetService/Create.

Создайте группу безопасностиСоздайте группу безопасности

Создайте группу безопасности, разрешающую входящий TCP-трафик для портов 22, 80 и 443, а также любой исходящий трафик.

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.

  2. В списке сервисов выберите Virtual Private Cloud.

  3. На панели слева выберите Группы безопасности.

  4. Нажмите Создать группу безопасности.

  5. В поле Имя укажите имя webserver-sg.

  6. В поле Сеть выберите созданную ранее сеть webserver-network.

  7. В блоке Правила создайте следующие правила для управления трафиком:

    Направление
    трафика
    Описание Диапазон портов Протокол Источник /
    Назначение
    CIDR блоки
    Входящий http 80 TCP CIDR 0.0.0.0/0
    Входящий https 443 TCP CIDR 0.0.0.0/0
    Входящий ssh 22 TCP CIDR 0.0.0.0/0
    Исходящий any Весь Любой CIDR 0.0.0.0/0
  8. Нажмите Создать.

Выполните команду:

yc vpc security-group create \
  --name webserver-sg \
  --rule "description=http,direction=ingress,port=80,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \
  --rule "description=https,direction=ingress,port=443,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \
  --rule "description=ssh,direction=ingress,port=22,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \
  --rule "description=any,direction=egress,port=any,protocol=any,v4-cidrs=[0.0.0.0/0]" \
  --network-name webserver-network

Результат:

id: enp4htsnl1sa********
folder_id: b1gt6g8ht345********
created_at: "2023-12-23T19:07:03Z"
name: webserver-sg
network_id: enp37qpnksl2********
status: ACTIVE
rules:
  - id: enpdu0t8san9********
    description: http
    direction: INGRESS
    ports:
      from_port: "80"
      to_port: "80"
    protocol_name: TCP
    protocol_number: "6"
    cidr_blocks:
      v4_cidr_blocks:
        - 0.0.0.0/0
  - id: enpr7oirpff5********
    description: https
    direction: INGRESS
    ports:
      from_port: "443"
      to_port: "443"
    protocol_name: TCP
    protocol_number: "6"
    cidr_blocks:
      v4_cidr_blocks:
        - 0.0.0.0/0
  - id: enp0bgk6dkdd********
    description: ssh
    direction: INGRESS
    ports:
      from_port: "22"
      to_port: "22"
    protocol_name: TCP
    protocol_number: "6"
    cidr_blocks:
      v4_cidr_blocks:
        - 0.0.0.0/0
  - id: enpspns0tfml********
    description: any
    direction: EGRESS
    protocol_name: ANY
    protocol_number: "-1"
    cidr_blocks:
      v4_cidr_blocks:
        - 0.0.0.0/0

Подробнее о команде yc vpc security-group create читайте в справочнике CLI.

Сохраните полученный идентификатор (id) группы безопасности — он понадобится при создании ВМ.

Чтобы создать группу безопасности, воспользуйтесь методом REST API create для ресурса SecurityGroup или вызовом gRPC API SecurityGroupService/Create.

Подготовьте файлы для загрузки в бакетПодготовьте файлы для загрузки в бакет

  1. Сохраните любое изображение в формате JPEG в файл content.jpg.

  2. Создайте файл index.html:

    <html>
        <body>
        </body>
    </html>
    

Создайте виртуальную машину с веб-серверомСоздайте виртуальную машину с веб-сервером

Перед тем как приступать к созданию ВМ, подготовьте пару ключей (открытый и закрытый) для доступа к ВМ по SSH.

Консоль управления
Yandex Cloud CLI
API
  1. На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.

  2. В блоке Образ загрузочного диска в поле Поиск продукта введите LAMP и выберите образ LAMP.

  3. В блоке Расположение выберите зону доступности ru-central1-b.

  4. В блоке Сетевые настройки:

    • В поле Подсеть выберите созданную ранее подсеть webserver-subnet-ru-central1-b.
    • В поле Публичный IP-адрес выберите Автоматически.
    • В поле Группы безопасности выберите созданную ранее группу безопасности webserver-sg.
  5. В блоке Доступ выберите вариант SSH-ключ и укажите данные для доступа на ВМ:

    • В поле Логин введите имя пользователя: yc-user.
    • В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.

      Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:

      • Нажмите кнопку Добавить ключ.
      • Задайте имя SSH-ключа.
      • Загрузите или вставьте содержимое открытого SSH-ключа. Пару SSH-ключей для подключения к ВМ по SSH необходимо создать самостоятельно.
      • Нажмите кнопку Добавить.

      SSH-ключ будет добавлен в ваш профиль пользователя организации.

      Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя создаваемой виртуальной машины.

  6. В блоке Общая информация задайте имя ВМ: mywebserver.

  7. Нажмите кнопку Создать ВМ.

Выполните команду:

yc compute instance create \
  --name mywebserver \
  --zone ru-central1-b \
  --network-interface subnet-name=webserver-subnet-ru-central1-b,nat-ip-version=ipv4,security-group-ids=<идентификатор_группы_безопасности> \
  --create-boot-disk image-folder-id=standard-images,image-id=fd8jtn9i7e9ha5q25niu \
  --ssh-key ~/.ssh/id_ed25519.pub

Где:

  • <идентификатор_группы_безопасности> — сохраненный ранее идентификатор группы безопасности.
  • --ssh-key — путь к файлу с открытым SSH-ключом. Например: ~/.ssh/id_ed25519.pub.

Результат:

done (32s)
id: fhmaq4shfrcm********
folder_id: b1gt6g8ht345********
created_at: "2023-12-23T05:36:34Z"
name: mywebserver
zone_id: ru-central1-b
platform_id: standard-v2
resources:
  memory: "2147483648"
  cores: "2"
  core_fraction: "100"
status: RUNNING
metadata_options:
  gce_http_endpoint: ENABLED
  aws_v1_http_endpoint: ENABLED
  gce_http_token: ENABLED
  aws_v1_http_token: DISABLED
boot_disk:
  mode: READ_WRITE
  device_name: fhmprher1d0q********
  auto_delete: true
  disk_id: fhmprher1d0q********
network_interfaces:
  - index: "0"
    mac_address: d0:0d:ad:13:91:7e
    subnet_id: e9bk1m87r4m4********
    primary_v4_address:
      address: 192.168.1.11
      one_to_one_nat:
        address: 158.160.***.***
        ip_version: IPV4
    security_group_ids:
      - enpa5j0mrgm4********
gpu_settings: {}
fqdn: fhmaq4shfrcm********.auto.internal
scheduling_policy: {}
network_settings:
  type: STANDARD
placement_policy: {}

Подробнее о команде yc compute instance create читайте в справочнике CLI.

Чтобы создать ВМ, воспользуйтесь методом REST API create для ресурса Instance или вызовом gRPC API InstanceService/Create.

В вашем каталоге будет создана ВМ mywebserver. Чтобы подключиться к ней по SSH, используйте логин yc-user и публичный IP-адрес этой ВМ. Если вы планируете пользоваться созданным веб-сервером длительное время, сделайте публичный IP-адрес этой ВМ статическим.

Создайте и настройте публичную зону DNSСоздайте и настройте публичную зону DNS

  1. Создайте публичную зону DNS в Yandex Cloud DNS.

    Консоль управления
    Yandex Cloud CLI
    API
    1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.

    2. Выберите сервис Cloud DNS.

    3. Нажмите Создать зону.

    4. Задайте настройки зоны, соответствующие вашему домену:

      1. Зона — доменная зона. Название зоны должно заканчиваться точкой. Например, название доменной зоны example.com. соответствует домену example.com. Чтобы создать доменную зону с нелатинскими символами, используйте кодировку Punycode.
      2. Тип — Публичная.
      3. Имя — my-domain-zone.
    5. Нажмите Создать.

    Выполните команду:

    yc dns zone create \
      --name my-domain-zone \
      --zone <имя_домена> \
      --public-visibility
    

    Где --zone — имя вашего домена, например example.com.. Значение параметра --zone должно заканчиваться точкой. Например, название доменной зоны example.com. соответствует домену example.com.

    Результат:

    id: dns39gihj0ef********
    folder_id: b1gt6g8ht345********
    created_at: "2023-12-21T16:43:37.883Z"
    name: my-domain-zone
    zone: example.com.
    public_visibility: {}
    

    Подробнее о команде yc dns zone create читайте в справочнике CLI.

    Чтобы создать публичную зону DNS, воспользуйтесь методом REST API create для ресурса DnsZone или вызовом gRPC API DnsZoneService/Create.

  2. Делегируйте ваш домен сервису Cloud DNS. Для этого в личном кабинете вашего регистратора домена укажите в настройках домена адреса DNS-серверов ns1.yandexcloud.kz и ns2.yandexcloud.kz.

  3. Создайте в вашей зоне DNS ресурсную A-запись, указывающую на публичный IP-адрес созданной ранее ВМ с веб-сервером:

    Консоль управления
    Yandex Cloud CLI
    API
    1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.

    2. Выберите сервис Cloud DNS.

    3. Выберите созданную ранее DNS-зону.

    4. Нажмите Создать запись.

    5. Задайте параметры записи:

      1. В поле Имя выберите Совпадает с именем зоны (@).

      2. В поле Тип выберите тип записи A.

      3. В поле Значение укажите публичный IP-адрес созданной ранее ВМ с веб-сервером.

        Узнать IP-адрес ВМ можно в консоли управления на странице ВМ в блоке Сеть или с помощью команды CLI yc compute instance get mywebserver.

    6. Нажмите Создать.

    Выполните команду:

    yc dns zone add-records \
      --name my-domain-zone \
      --record "@ 600 A <IP-адрес_ВМ>"
    

    Где <IP-адрес_ВМ> — публичный IP-адрес созданной ранее ВМ с веб-сервером.

    Узнать IP-адрес ВМ можно в консоли управления на странице ВМ в блоке Сеть или с помощью команды CLI yc compute instance get mywebserver.

    Результат:

    +--------+--------------+------+---------------+-----+
    | ACTION |     NAME     | TYPE |     DATA      | TTL |
    +--------+--------------+------+---------------+-----+
    | +      | example.com. | A    | 51.250.**.*** | 600 |
    +--------+--------------+------+---------------+-----+
    

    Подробнее о команде yc dns zone add-records читайте в справочнике CLI.

    Чтобы создать ресурсную запись в зоне DNS, воспользуйтесь методом REST API updateRecordSets для ресурса DnsZone или вызовом gRPC API DnsZoneService/UpdateRecordSets.

Добавьте TLS-сертификат в Yandex Certificate ManagerДобавьте TLS-сертификат в Yandex Certificate Manager

  1. Добавьте в сервис Certificate Manager сертификат от Let's Encrypt® для ваших доменов, которые будут использоваться веб-сервером и CDN-ресурсом.

    Консоль управления
    Yandex Cloud CLI
    API
    1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.

    2. В списке сервисов выберите Certificate Manager.

    3. Нажмите Добавить сертификат и выберите Сертификат от Let's Encrypt.

    4. В открывшемся окне в поле Имя укажите mymanagedcert.

    5. В поле Домены укажите имя вашего домена, например example.com.

      В этом же поле укажите с новой строки имя поддомена, который будет использоваться для CDN-ресурса, например cdn.example.com.

    6. Выберите тип проверки прав на домен DNS.

    7. Нажмите Создать.

    Выполните команду:

    yc certificate-manager certificate request \
      --name mymanagedcert \
      --challenge dns \
      --domains <имя_домена>,<имя_поддомена>
    

    Где:

    • <имя_домена> — имя вашего домена для веб-сервера. Например: example.com.
    • <имя_поддомена> — имя поддомена, который будет использоваться CDN-ресурсом. Например: cdn.example.com.

    Результат:

    id: fpqbs12t6ion********
    folder_id: b1gt6g8ht345********
    created_at: "2023-12-24T14:36:39.299844798Z"
    name: mymanagedcert
    type: MANAGED
    domains:
      - example.com
      - cdn.example.com
    status: VALIDATING
    updated_at: "2023-12-24T14:36:39.299844798Z"
    

    Подробнее о команде yc certificate-manager certificate request читайте в справочнике CLI.

    Сохраните идентификатор (id) созданного сертификата: он пригодится при создании CDN-ресурса.

    Чтобы добавить сертификат, воспользуйтесь методом REST API requestNew для ресурса Certificate или вызовом gRPC API CertificateService/RequestNew.

    В списке сертификатов появится новый сертификат со статусом Validating. Этот статус означает, что запрос на выпуск сертификата от Let's Encrypt® создан, и для его успешной обработки вам необходимо пройти процедуру проверки прав на домены.

  2. Для успешного выпуска сертификата пройдите проверку прав на домены:

    Консоль управления
    Yandex Cloud CLI
    API
    1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.
    2. В списке сервисов выберите Certificate Manager.
    3. В списке сертификатов выберите mymanagedcert.
    4. В открывшемся окне в блоке Проверка прав на домены выберите CNAME-запись.
    5. В секции первого домена ниже нажмите Создать запись и в открывшемся окне нажмите Создать.
    6. Повторите предыдущее действие для второго домена.

    Проверка прав на домены может занять от нескольких минут до нескольких дней — дождитесь ее успешного завершения. В результате сертификат будет выпущен и перейдет в статус Issued.

    1. Получите значения ресурсных записей, необходимых для прохождения проверки:

      yc certificate-manager certificate get \
        --name mymanagedcert \
        --full
      

      Результат:

      id: fpq2gpi42teg********
      folder_id: b1gt6g8ht345********
      created_at: "2023-12-24T18:13:45.960Z"
      name: mymanagedcert
      type: MANAGED
      domains:
        - example.com
        - cdn.example.com
      status: VALIDATING
      updated_at: "2023-12-24T18:13:45.960Z"
      challenges:
        - domain: cdn.example.com
          type: DNS
          created_at: "2023-12-24T18:13:45.960Z"
          updated_at: "2023-12-24T18:13:49.280Z"
          status: PENDING
          message: Create a record in your DNS provider.
          dns_challenge:
            name: _acme-challenge.cdn.example.com.
            type: CNAME
            value: fpq2gpi42teg********.cm.yandexcloud.net.
        - domain: cdn.example.com
          type: DNS
          created_at: "2023-12-24T18:13:45.960Z"
          updated_at: "2023-12-24T18:13:49.280Z"
          status: PENDING
          message: Create a record in your DNS provider.
          dns_challenge:
            name: _acme-challenge.cdn.example.com.
            type: TXT
            value: d9RzZH8WZucSY8mXs9cEg1wNteaaNqbxZK7********
        - domain: example.com
          type: DNS
          created_at: "2023-12-24T18:13:45.960Z"
          updated_at: "2023-12-24T18:13:49.280Z"
          status: PENDING
          message: Create a record in your DNS provider.
          dns_challenge:
            name: _acme-challenge.example.com
            type: CNAME
            value: fpq2gpi42teg********.cm.yandexcloud.net.
        - domain: example.com
          type: DNS
          created_at: "2023-12-24T18:13:45.960Z"
          updated_at: "2023-12-24T18:13:49.280Z"
          status: PENDING
          message: Create a record in your DNS provider.
          dns_challenge:
            name: _acme-challenge.example.com.
            type: TXT
            value: iiyJJJlsaFIqQ7DMUzira0OKU3iXuaqiN7U********
      

      Подробнее о команде yc certificate-manager certificate get читайте в справочнике CLI.

      Сохраните значения полей value из разделов с типом CNAME в блоках challenges.dns_challenge для обоих доменных имен. Эти значения понадобятся на следующем шаге.

    2. Создайте ресурсные записи CNAME для прохождения проверки ваших прав на домены:

      yc dns zone add-records \
        --name my-domain-zone \
        --record "_acme-challenge 600 CNAME <значение_dns_challenge>" \
        --record "_acme-challenge.<поддомен> 600 CNAME <значение_dns_challenge>"
      

      Где:

      • <значение_dns_challenge> — сохраненное на предыдущем шаге значение, необходимое для проверки прав на соответствующий домен с помощью CNAME-записи.
      • <поддомен> — имя, которое вы присвоили поддомену CDN-ресурса. Например: cdn, в этом случае запись будет выглядеть как _acme-challenge.cdn 600 CNAME fpq2gpi42teg********.cm.yandexcloud.net.

      Результат:

      +--------+----------------------------------+-------+------------------------------------------+-----+
      | ACTION |              NAME                | TYPE  |                   DATA                   | TTL |
      +--------+----------------------------------+-------+------------------------------------------+-----+
      | +      | _acme-challenge.cdn.example.com. | CNAME | fpq2gpi42teg********.cm.yandexcloud.net. | 600 |
      | +      | _acme-challenge.example.com.     | CNAME | fpq2gpi42teg********.cm.yandexcloud.net. | 600 |
      +--------+----------------------------------+-------+------------------------------------------+-----+
      

      Подробнее о команде yc dns zone add-records читайте в справочнике CLI.

      Проверка прав на домены может занять от нескольких минут до нескольких дней — дождитесь ее успешного завершения. В результате сертификат будет выпущен и перейдет в статус Issued.

    3. Убедитесь, что статус сертификата изменился на Issued:

      yc certificate-manager certificate get \
        --name mymanagedcert
      

      Результат:

      id: fpqr2j0sdb1n********
      folder_id: b1gt6g8ht345********
      created_at: "2023-12-24T16:38:02.206Z"
      name: mymanagedcert
      type: MANAGED
      domains:
        - cdn.example.com
        - example.com
      status: ISSUED
      issuer: CN=R3,O=Let's Encrypt,C=US
      subject: CN=cdn.example.com
      serial: 4b7d7f0968097ae1a7707854a80********
      updated_at: "2023-12-24T16:46:03.578Z"
      issued_at: "2023-12-24T16:46:03.578Z"
      not_after: "2024-03-23T15:44:59Z"
      not_before: "2023-12-24T15:45:00Z"
      

    Для получения информации, необходимой для прохождения процедуры проверки прав на домены, воспользуйтесь методом REST API get для ресурса Certificate или вызовом gRPC API CertificateService/Get с флагом view=FULL.

    Чтобы создать ресурсную запись CNAME в зоне DNS, воспользуйтесь методом REST API updateRecordSets для ресурса DnsZone или вызовом gRPC API DnsZoneService/UpdateRecordSets.

    Примечание

    Чтобы DNS-проверка прав на домен по записи CNAME прошла успешно, для поддомена _acme-challenge проверяемого доменного имени не должно быть других ресурсных записей, кроме CNAME. Например, для имени _acme-challenge.example.com. должна существовать только CNAME-запись и не должно быть TXT-записи.

Подготовьте бакет-источник для CDN-ресурсаПодготовьте бакет-источник для CDN-ресурса

  1. Создайте бакет Object Storage, который будет использоваться в качестве источника для CDN-ресурса. Имя бакета должно быть уникальным.

    Консоль управления
    Yandex Cloud CLI
    AWS CLI
    API
    1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.
    2. В списке сервисов выберите Object Storage.
    3. Справа сверху нажмите Создать бакет.
    4. В поле Имя укажите имя бакета, например cdn-source-bucket.
    5. В поле Макс. размер укажите 1 ГБ.
    6. В полях Доступ на чтение объектов и Доступ к списку объектов выберите Публичный.
    7. Нажмите Создать бакет.
    8. На странице со списком бакетов выберите созданный бакет.
    9. На панели слева выберите Настройки.
    10. На вкладке Веб-сайт:
      • Выберите Хостинг.
      • В поле Главная страница укажите index.html.
    11. Нажмите Сохранить.
    1. Создайте бакет:

      yc storage bucket create \
        --name <имя_бакета> \
        --default-storage-class standard \
        --max-size 1073741824 \
        --public-read \
        --public-list
      

      Где --name — имя бакета, уникальное для всего сервиса Object Storage. Например: cdn-source-bucket.

      Результат:

      name: cdn-source-bucket
      folder_id: b1gt6g8ht345********
      anonymous_access_flags:
        read: false
        list: false
      default_storage_class: STANDARD
      versioning: VERSIONING_DISABLED
      max_size: "1073741824"
      acl: {}
      created_at: "2023-12-22T18:11:23.028836Z"
      

      Подробнее о команде yc storage bucket create читайте в справочнике CLI.

    2. Включите в бакете хостинг статического сайта:

      yc storage bucket update \
        --name <имя_бакета> \
        --website-settings '{"index": "index.html"}'
      

      Результат:

      name: cdn-source-bucket
      folder_id: b1gt6g8ht345********
      default_storage_class: STANDARD
      versioning: VERSIONING_DISABLED
      max_size: "1073741824"
      acl: {}
      created_at: "2023-12-23T09:56:58.249721Z"
      website_settings:
        redirect_all_requests: {}
      

      Подробнее о команде yc storage bucket update читайте в справочнике CLI.

    Если у вас еще нет интерфейса командной строки AWS CLI, установите и сконфигурируйте его.

    Назначьте сервисному аккаунту, через который работает AWS CLI, роль storage.editor.

    1. Создайте бакет:

      aws s3api create-bucket \
        --endpoint-url https://storage.yandexcloud.kz \
        --bucket <имя_бакета> \
        --acl public-read
      

      Где --bucket — имя бакета, уникальное для всего сервиса Object Storage. Например: cdn-source-bucket.

      Результат:

      {
          "Location": "/cdn-source-bucket"
      }
      
    2. Включите в бакете хостинг статического сайта:

      aws --endpoint-url https://storage.yandexcloud.net \
        s3 website "s3://<имя_бакета>" \
        --index-document index.html
      

      Где <имя_бакета> — имя созданного ранее бакета. Например: cdn-source-bucket.

    Чтобы создать бакет, воспользуйтесь методом REST API create для ресурса Bucket, вызовом gRPC API BucketService/Create или методом S3 API create.

    Чтобы включить в бакете хостинг статического сайта, воспользуйтесь методом REST API update для ресурса Bucket, вызовом gRPC API BucketService/Update или методом S3 API upload.

  2. Загрузите в бакет подготовленные файлы:

    Консоль управления
    AWS CLI
    API
    1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.
    2. В списке сервисов выберите Object Storage.
    3. Выберите созданный ранее бакет.
    4. В правом верхнем углу страницы нажмите Загрузить и выберите созданные файлы index.html и content.jpg.
    5. В открывшемся окне подтвердите загрузку объектов.
    1. Загрузите в бакет файл index.html:

      aws --endpoint-url https://storage.yandexcloud.kz \
        s3 cp ./index.html s3://<имя_бакета>/index.html
      

      Где <имя_бакета> — имя созданного ранее бакета. Например: cdn-source-bucket.

      Результат:

      upload: ./index.html to s3://cdn-source-bucket/index.html
      
    2. Загрузите в бакет файл content.jpg:

      aws --endpoint-url https://storage.yandexcloud.kz \
        s3 cp ./content.jpg s3://<имя_бакета>/content.jpg
      

      Результат:

      upload: ./content.jpg to s3://cdn-source-bucket/content.jpg
      

    Чтобы загрузить файлы в бакет, воспользуйтесь методом S3 API upload.

Создайте CDN-ресурсСоздайте CDN-ресурс

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.

  2. Выберите сервис Cloud CDN.

  3. Если CDN-провайдер еще не активирован, нажмите кнопку Подключиться к провайдеру. Подключение произойдет автоматически.

    Если кнопки Подключиться к провайдеру нет, и вам доступно создание ресурсов и групп источников, значит, провайдер уже активирован. Переходите к следующему шагу.

  4. Нажмите Создать ресурс.

  5. В блоке Контент укажите:

    • Запрос контента — Из одного источника.
    • Тип источника — Сервер.
    • В поле Доменное имя источника укажите <имя_бакета>.website.yandexcloud.kz, где <имя_бакета> — имя созданного ранее бакета, использующегося CDN-ресурсом в качестве источника.
  6. В блоке Доменные имена для раздачи контента в поле Доменное имя укажите доменное имя, которое вы присвоите вашему CDN-ресурсу: например cdn.example.com.

    Примечание

    Внизу блока Доменные имена для раздачи контента отобразилось значение доменного имени Cloud CDN провайдера. Скопируйте это значение, оно потребуется при создании CNAME-записи для CDN-ресурса.

  7. В блоке Дополнительно:

    1. В поле Протокол для источников выберите Как у клиента.
    2. В поле Переадресация клиентов выберите Не использовать.
    3. В поле Тип сертификата выберите Сертификат из Certificate Manager и в появившемся списке выберите созданный ранее сертификат mymanagedcert.
    4. В поле Заголовок Host выберите Свое значение и появившемся поле Значение заголовка укажите <имя_бакета>.website.yandexcloud.kz, где <имя_бакета> — имя созданного ранее бакета, использующегося CDN-ресурсом в качестве источника.
    5. Включите опцию Доступ по защищённому токену.
    6. В появившемся поле Секретный ключ укажите секретный ключ — произвольную строку длиной от 6 до 32 символов. Он будет передан в конфигурацию CDN-ресурса и будет использоваться для формирования и проверки подписанных ссылок.
    7. В поле Ограничение доступа по IP-адресу выберите Только доверенные IP-адреса.
  8. Нажмите Создать.

  1. Если вы создаете свой первый CDN-ресурс, сначала подключитесь к провайдеру:

    yc cdn provider activate \
      --type gcore
    

    Подробнее о команде yc cdn provider activate читайте в справочнике CLI.

  2. Создайте ресурс:

    yc cdn resource create <имя_поддомена> \
      --origin-custom-source <имя_бакета>.website.yandexcloud.kz \
      --origin-protocol 'match' \
      --cert-manager-ssl-cert-id <идентификатор_сертификата> \
      --host-header <имя_бакета>.website.yandexcloud.kz \
      --secure-key <секретный_ключ> \
      --enable-ip-url-signing
    

    Где:

    • <имя_поддомена> — доменное имя, для которого ранее был создан TLS-сертификат и которое будет использоваться CDN-ресурсом. Например: cdn.example.com.
    • <имя_бакета> — имя созданного ранее бакета Object Storage. Например: cdn-source-bucket.
    • --cert-manager-ssl-cert-id — идентификатор TLS-сертификата, сохраненный ранее при его создании.
    • --secure-key — секретный ключ, произвольная строка длиной от 6 до 32 символов. Секретный ключ будет передан в конфигурацию CDN-ресурса и будет использоваться для формирования и проверки подписанных ссылок.

    Результат:

    id: bc8yqhobvxk6********
    folder_id: b1gt6g8ht345********
    cname: cdn.example.com
    created_at: "2024-06-22T19:59:05.430376Z"
    updated_at: "2024-06-22T19:59:05.430394Z"
    active: true
    options:
      edge_cache_settings:
        enabled: true
        default_value: "345600"
      query_params_options:
        ignore_query_string:
          enabled: true
          value: true
      host_options:
        host:
          enabled: true
          value: cdn-source-bucket.website.yandexcloud.kz
      stale:
        enabled: true
        value:
          - error
          - updating
      secure_key:
        enabled: true
        key: sdh********
        type: ENABLE_IP_SIGNING
    origin_group_id: "310699"
    origin_group_name: Origins for cdn.example.com (211929)
    origin_protocol: MATCH
    ssl_certificate:
      type: CM
      status: READY
      data:
        cm:
          id: fpqia0s2fc21********
    

    Подробнее о команде yc cdn resource create читайте в справочнике CLI.

Воспользуйтесь методом REST API create для ресурса Resource или вызовом gRPC API ResourceService/Create.

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

Контент на созданном CDN-ресурсе будет доступен только по подписанным ссылкам.

Создайте ресурсную запись CNAME для CDN-ресурсаСоздайте ресурсную запись CNAME для CDN-ресурса

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления выберите каталог, в котором вы будете создавать ресурсы.

  2. Выберите сервис Cloud DNS.

  3. Выберите созданную ранее DNS-зону.

  4. Нажмите Создать запись.

  5. Задайте параметры записи:

    • В поле Имя выберите Создать поддомен и укажите имя, которое вы присвоили поддомену CDN-ресурса. Например: если доменное имя вашего CDN-ресурса — cdn.example.com, укажите только cdn.
    • В поле Тип выберите тип записи CNAME.
    • В поле Значение укажите скопированное при создании CDN-ресурса, значение доменного имени Cloud CDN провайдера.
  6. Нажмите Создать.

  1. Получите значение доменного имени Cloud CDN провайдера:

    yc cdn resource get-provider-cname
    

    Результат:

    cname: cl-ms6*****90.edgecdn.ru
    folder_id: b1gt6g8ht345********
    

    Подробнее о команде yc cdn resource get-provider-cname читайте в справочнике CLI.

    Сохраните полученное значение cname: оно пригодится на следующем шаге.

  2. Создайте ресурсную запись CNAME в сервисе Cloud DNS:

    yc dns zone add-records \
      --name my-domain-zone \
      --record "<поддомен> 600 CNAME <значение_cname>"
    

    Где:

    • <поддомен> — поддомен, созданный для CDN-ресурса. Например, для доменного имени cdn.example.com здесь нужно указать cdn.
    • <значение_cname> — полученное на предыдущем шаге значение cname для CDN-ресурса.

    Результат:

    +--------+------------------+-------+--------------------------+-----+
    | ACTION |       NAME       | TYPE  |           DATA           | TTL |
    +--------+------------------+-------+--------------------------+-----+
    | +      | cdn.example.com. | CNAME | cl-ms6*****90.edgecdn.ru | 600 |
    +--------+------------------+-------+--------------------------+-----+
    

    Подробнее о команде yc dns zone add-records читайте в справочнике CLI.

Чтобы получить значение CNAME-записи для CDN-ресурса, воспользуйтесь методом REST API getProviderCName для ресурса Resource или вызовом gRPC API ResourceService/GetProviderCName.

Чтобы создать ресурсную запись CNAME в зоне DNS, воспользуйтесь методом REST API updateRecordSets для ресурса DnsZone или вызовом gRPC API DnsZoneService/UpdateRecordSets.

Опубликуйте сайт на веб-сервереОпубликуйте сайт на веб-сервере

Далее вы создадите и опубликуете на вашем веб-сервере сайт, который будет генерировать подписанные ссылки на контент, расположенный на защищенном CDN-ресурсе. Чтобы обеспечить безопасность передаваемых данных, вы скопируете на веб-сервер созданный ранее TLS-сертификат и включите SSL-шифрование.

Выгрузите сертификат из Certificate ManagerВыгрузите сертификат из Certificate Manager

Чтобы использовать созданный в Certificate Manager TLS-сертификат в конфигурации вашего веб-сервера, выгрузите цепочку сертификатов и закрытый ключ в текущую директорию:

Yandex Cloud CLI
  1. Узнайте идентификатор созданного ранее TLS-сертификата:

    yc certificate-manager certificate list
    

    Результат:

    +----------------------+---------------+-----------------------------+---------------------+---------+--------+
    |          ID          |     NAME      |           DOMAINS           |      NOT AFTER      |  TYPE   | STATUS |
    +----------------------+---------------+-----------------------------+---------------------+---------+--------+
    | fpq90lobsh0l******** | mymanagedcert | cdn.example.com,example.com | 2024-03-22 16:42:53 | MANAGED | ISSUED |
    +----------------------+---------------+-----------------------------+---------------------+---------+--------+
    

    Подробнее о команде yc certificate-manager certificate list читайте в справочнике CLI.

  2. Выгрузите ключ и сертификат, указав полученный на предыдущем шаге идентификатор:

    yc certificate-manager certificate content \
      --id <идентификатор_сертификата> \
      --chain ./certificate_full_chain.pem \
      --key ./private_key.pem
    

    Подробнее о команде yc certificate-manager certificate content читайте в справочнике CLI.

Настройте веб-серверНастройте веб-сервер

  1. Скопируйте на ВМ с веб-сервером полученные сертификаты и закрытый ключ:

    scp ./certificate_full_chain.pem yc-user@<IP-адрес_ВМ>:certificate_full_chain.pem \
      && scp ./private_key.pem yc-user@<IP-адрес_ВМ>:private_key.pem
    

    Где <IP-адрес_ВМ> — публичный IP-адрес созданной ранее ВМ с веб-сервером.

    Узнать IP-адрес ВМ можно в консоли управления на странице ВМ в блоке Сеть или с помощью команды CLI yc compute instance get mywebserver.

    При первом подключении к ВМ появится предупреждение о неизвестном хосте:

    The authenticity of host '51.250.**.*** (51.250.**.***)' can't be established.
    ED25519 key fingerprint is SHA256:PpcKdcT09gjU045pkEIwIU8lAXXLpwJ6bKC********.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    

    Введите в терминале слово yes и нажмите Enter.

  2. Подключитесь к ВМ с веб-сервером:

    ssh yc-user@<IP-адрес_ВМ>
    
  3. Создайте директорию для сертификата и перенесите в нее скопированные файлы:

    sudo mkdir /etc/ssl-certificates
    sudo mv certificate_full_chain.pem /etc/ssl-certificates/
    sudo mv private_key.pem /etc/ssl-certificates/
    
  4. Создайте директорию для файлов вашего сайта и предоставьте необходимые права на нее пользователю www-data:

    sudo mkdir -p /var/www/<имя_домена>/public_html
    sudo chown www-data:www-data /var/www/<имя_домена>/public_html
    

    Где <имя_домена> — доменное имя вашего сайта, например example.com.

  5. Настройте виртуальный хост для вашего сайта:

    1. Создайте файл конфигурации виртуального хоста:

      sudo nano /etc/apache2/sites-available/mywebsite.conf
      
    2. Поместите в созданный файл следующую конфигурацию:

      <VirtualHost *:443>
      ServerName <имя_домена>
      ServerAdmin webmaster@localhost
      DocumentRoot /var/www/<имя_домена>/public_html
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
      SSLEngine on
      SSLCertificateFile /etc/ssl-certificates/certificate_full_chain.pem
      SSLCertificateChainFile /etc/ssl-certificates/certificate_full_chain.pem
      SSLCertificateKeyFile /etc/ssl-certificates/private_key.pem
      </VirtualHost>
      

      Где <имя_домена> — доменное имя вашего сайта, например example.com.

    3. Активируйте созданный виртуальный хост:

      sudo a2ensite mywebsite
      

      Результат:

      Enabling site mywebsite.
      To activate the new configuration, you need to run:
        systemctl reload apache2
      
    4. Включите для веб-сервера поддержку ssl:

      sudo a2enmod ssl
      

      Результат:

      Considering dependency setenvif for ssl:
      Module setenvif already enabled
      Considering dependency mime for ssl:
      Module mime already enabled
      Considering dependency socache_shmcb for ssl:
      Enabling module socache_shmcb.
      Enabling module ssl.
      See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
      To activate the new configuration, you need to run:
        systemctl restart apache2
      
    5. Перезапустите веб-сервер:

      sudo systemctl reload apache2
      

Создайте сайтСоздайте сайт

  1. Создайте файл главной страницы сайта:

    sudo nano /var/www/<имя_домена>/public_html/index.php
    

    Где <имя_домена> — доменное имя вашего сайта, например example.com.

  2. Поместите в созданный файл index.php следующий код:

    <!DOCTYPE html>
    <html>
    <head>
      <title>Secure token generator website</title>
      <meta charset="utf-8" />
    </head>
    <body>
    
      <h2>Генератор защищенных ссылок</h2>
      <p>Ниже сгенерирована подписанная ссылка на защищенный CDN-ресурс. Срок жизни ссылки — 5 минут. Контент по ссылке доступен лишь тому пользователю, для которого сайт эту ссылку сгенерировал (проверяется по IP-адресу).</p>
      <br>
    
      <?php
    
        $secret = '<секретный_ключ>';
        $ip = trim(getUserIpAddr());
        $domain_name = '<доменное_имя>';
        $path = '<ключ_объекта>';
        $expires = time() + 300;
        $link = "$expires$path$ip $secret";
        $md5 = md5($link, true);
        $md5 = base64_encode($md5);
        $md5 = strtr($md5, '+/', '-_');
        $md5 = str_replace('=', '', $md5);
        $url = '<a href="https://'.$domain_name.$path.'?md5='.$md5.'&expires='.$expires.'" target="_blank">Подписанная ссылка на файл</a>';
    
        echo "<p>Ваш IP-адрес: <b>".$ip."</b></p><p>Если вы используете VPN, ссылка может не сработать. Для корректной работы генератора подписанных ссылок отключите VPN.</p>";
        echo "<br><br>";
        echo $url;
    
        function getUserIpAddr() {
    
            if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
               $addr = $_SERVER['HTTP_CLIENT_IP'];
            } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
               $addr = $_SERVER['HTTP_X_FORWARDED_FOR'];
            } else {
               $addr = $_SERVER['REMOTE_ADDR'];
            }
            return $addr;
        }
      ?>
    
    </body>
    </html>
    

    Где:

    • $secret — созданный при настройке CDN-ресурса секретный ключ.
    • $domain_name — доменное имя созданного CDN-ресурса. Например: cdn.example.com.
    • $path — ключ объекта в бакете-источнике, например /content.jpg. Обязательно со знаком /.
      Сайт будет генерировать подписанную ссылку для доступа к этому объекту через CDN-ресурс.

Проверьте работу защищенного доступа к файламПроверьте работу защищенного доступа к файлам

Чтобы проверить работу генератора подписанных ссылок на защищенный CDN-ресурс:

  1. Откройте в браузере созданный сайт, например https://example.com.

  2. Пройдите по сгенерированной ссылке.

    Если все работает правильно, у вас должно открыться изображение на защищенном CDN-ресурсе.

    Примечание

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

  3. Откройте полученную ссылку на другом устройстве, выходящем в интернет с другого IP-адреса. Например, на смартфоне.

    Доступ к контенту окажется запрещен.

  4. Попробуйте открыть полученную ссылку на исходном устройстве по истечении пяти минут.

    Доступ к контенту окажется запрещен.

Вы настроили защищенный доступ к контенту.

При формировании ссылок также можно задать определенный доверенный IP-адрес, например IP-адрес компании, который используется в корпоративной сети для доступа к интернету. Так вы сможете запретить доступ к вашему контенту за пределами сетевой инфраструктуры вашей компании.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  1. Удалите CDN-ресурс, затем удалите группу источников.
  2. Удалите созданные в бакете объекты, затем удалите сам бакет.
  3. Удалите созданную виртуальную машину.
  4. Удалите созданную доменную зону.
  5. Удалите созданный TLS-сертификат.
  6. Удалите созданную группу безопасности, затем удалите созданную подсеть, затем удалите созданную сеть.

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

  • Организация защищенного доступа к контенту в Cloud CDN с помощью Terraform

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

Предыдущая
Обзор
Следующая
Terraform
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»