[Документация Yandex Cloud](../../../index.md) > [Yandex Cloud CDN](../../index.md) > [Пошаговые инструкции](../index.md) > Ресурсы > Настроить доступ по защищенному токену

# Настройка доступа по защищенному токену

С помощью [защищенных токенов](../../concepts/secure-tokens.md) (_secure token_) вы можете ограничить доступ к файлам [CDN-ресурса](../../concepts/resource.md). Доступ к файлам будет осуществляться по [подписанным ссылкам](../../concepts/secure-tokens.md#protected-link) с ограниченным сроком действия.

Также с помощью защищенных токенов можно задать доверенный [IP-адрес](../../../vpc/concepts/address.md), с которого будет разрешен доступ к CDN-ресурсу.

### Включение доступа {#enable-secure-token}

Чтобы включить доступ по защищенному токену:
1. Придумайте секретный ключ — произвольную строку длиной от 6 до 32 символов. Он будет сохранен в настройках CDN-ресурса и использоваться для формирования подписанных ссылок.
1. На вашем сайте настройте [генерацию](../../concepts/secure-tokens.md#link-generation-code) подписанных ссылок с защищенными токенами.
1. Включите для CDN-ресурса доступ по защищенному токену:

   {% list tabs group=instructions %}

   - Консоль управления {#console}

     1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором расположен ресурс.
     1. [Перейдите](https://kz.console.yandex.cloud/link/cdn) в сервис **Cloud CDN**.
     1. Нажмите на имя необходимого ресурса.
     1. В правом верхнем углу нажмите кнопку ![image](../../../_assets/console-icons/pencil.svg) **Редактировать**.
     1. Включите опцию **Доступ по защищённому токену**:

        * Укажите **Секретный ключ** — произвольную строку длиной от 6 до 32 символов. Секретный ключ потребуется для генерации [подписанных ссылок](../../concepts/secure-tokens.md#protected-link).
        
            Сохраненный секретный ключ вы всегда сможете посмотреть в консоли управления или с помощью команды [CLI](../../../cli/index.md) `yc cdn resource list`.
        * В поле **Ограничение доступа по IP-адресу** задайте ограничение на доступ к контенту по IP-адресу:
        
           * `Только доверенные IP-адреса` — доступ к файлам будет разрешен только с определенного IP-адреса получателя контента. IP-адрес задается вне CDN-ресурса и указывается в качестве параметра при формировании [MD5](https://ru.wikipedia.org/wiki/MD5)-хэша для подписанной ссылки.
           * `Без ограничений` — доступ к файлам будет разрешен с любых IP-адресов.

     1. Нажмите кнопку **Сохранить**.

   - CLI {#cli}

     Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../cli/quickstart.md#install).

     По умолчанию используется каталог, указанный при [создании](../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

     1. Посмотрите описание команды [CLI](../../../cli/index.md) для редактирования ресурсов:

        ```bash
        yc cdn resource update --help
        ```

     1. Получите список всех ресурсов в [каталоге](../../../resource-manager/concepts/resources-hierarchy.md#folder) по умолчанию:

        ```bash
        yc cdn resource list --format yaml
        ```

        Результат:

        ```text
        id: bc8br5k6iohx********
        folder_id: b1gt6g8ht345********
        cname: testexample.com
        created_at: "2022-01-19T09:23:57.921365Z"
        updated_at: "2022-01-19T10:55:30.305141Z"
        active: true
        options:
          edge_cache_settings:
            enabled: true
            default value: "345600"
          cache_http_headers:
            enabled: true
            value:
            - content-type
            - content-length
            - connection
            - server
            - date
            - test
          stale:
            enabled: true
            value:
            - error
            - updating
          allowed_http_methods:
            value:
            - GET
            - POST
            - HEAD
            - OPTIONS
        origin_group_id: "89783"
        origin_group_name: My origins group
        origin_protocol: HTTP
        ssl_certificate:
          type: DONT_USE
          status: READY
        ```

        Сохраните идентификатор (`id`) ресурса, для которого вы хотите настроить доступ по защищенному токену.
     1. Включите доступ по защищенному токену:

        ```bash
        yc cdn resource update \
          --id <идентификатор_ресурса> \
          --secure-key <секретный_ключ> \
          --enable-ip-url-signing
        ```

        Где:
        * `--id` — идентификатор CDN-ресурса, для которого вы хотите включить доступ по защищенному токену.
        * `--secure-key` — секретный ключ, созданный ранее.
        * `--enable-ip-url-signing` — (опционально) параметр, который включает ограничение доступа к CDN-ресурсу по IP-адресу. Сам доверенный IP-адрес задается вне CDN-ресурса и указывается в качестве параметра при формировании [MD5](https://ru.wikipedia.org/wiki/MD5)-хэша для подписанной ссылки. Если параметр не задан, доступ к файлам будет разрешен с любых IP-адресов.

   - Terraform {#tf}

     Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
     
     
     Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.

     1. Откройте файл конфигурации Terraform и добавьте параметры в блок с описанием CDN-ресурса:

        ```hcl
        resource "yandex_cdn_resource" "my_resource" {
          ...
          options {
            ...
            secure_key = "<секретный_ключ>"
            enable_ip_url_signing = true
          }
        }
        ```

        Где:
        * `secure_key` — секретный ключ, созданный ранее.
        * `enable_ip_url_signing` — (опционально) параметр, `true` или `false`. Включает ограничение доступа к CDN-ресурсу по IP-адресу. Сам доверенный IP-адрес задается вне CDN-ресурса и указывается в качестве параметра при формировании [MD5](https://ru.wikipedia.org/wiki/MD5)-хэша для подписанной ссылки. Если параметр не задан, доступ к файлам будет разрешен с любых IP-адресов.

        Подробнее о параметрах `yandex_cdn_resource` в Terraform в [документации провайдера](../../../terraform/resources/cdn_resource.md).
     1. Примените изменения:

        1. В терминале перейдите в директорию с конфигурационным файлом.
        1. Проверьте корректность конфигурации с помощью команды:
        
           ```bash
           terraform validate
           ```
        
           Если конфигурация является корректной, появится сообщение:
        
           ```bash
           Success! The configuration is valid.
           ```
        
        1. Выполните команду:
        
           ```bash
           terraform plan
           ```
        
           В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
        1. Примените изменения конфигурации:
        
           ```bash
           terraform apply
           ```
        
        1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

     Проверить изменившиеся параметры CDN-ресурса можно в [консоли управления](https://kz.console.yandex.cloud) или с помощью команды [CLI](../../../cli/index.md):

     ```bash
     yc cdn resource get <идентификатор_ресурса>
     ```

   - API {#api}

     Воспользуйтесь методом REST API [update](../../api-ref/Resource/update.md) для ресурса [Resource](../../api-ref/Resource/index.md) или вызовом gRPC API [ResourceService/Update](../../api-ref/grpc/Resource/update.md).

    {% endlist %}

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

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

### Отключение доступа {#disable-secure-token}

Чтобы отключить доступ к CDN-ресурсу по защищенному токену:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором расположен ресурс.
  1. [Перейдите](https://kz.console.yandex.cloud/link/cdn) в сервис **Cloud CDN**.
  1. Нажмите на имя необходимого ресурса.
  1. В правом верхнем углу нажмите кнопку ![image](../../../_assets/console-icons/pencil.svg) **Редактировать**.
  1. Выключите опцию **Доступ по защищённому токену**.
  1. Нажмите кнопку **Сохранить**.

- CLI {#cli}

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

  ```bash
  yc cdn resource update \
    --id <идентификатор_ресурса> \
    --clear-secure-key
  ```

  Где:
  * `--id` — идентификатор CDN-ресурса, для которого вы хотите отключить доступ по защищенному токену.
  * `--clear-secure-key` — параметр для отключения доступа по защищенному токену.

- Terraform {#tf}

  1. Откройте файл конфигурации Terraform и удалите параметры `secure_key` и `enable_ip_url_signing` в блоке с описанием CDN-ресурса:

     ```hcl
     resource "yandex_cdn_resource" "my_resource" {
       ...
       options {
         ...
         secure_key = "<секретный_ключ>"
         enable_ip_url_signing = true
       }
     }
     ```

     Подробнее о параметрах `yandex_cdn_resource` в Terraform в [документации провайдера](../../../terraform/resources/cdn_resource.md).
  1. Примените изменения:

     1. В терминале перейдите в директорию с конфигурационным файлом.
     1. Проверьте корректность конфигурации с помощью команды:
     
        ```bash
        terraform validate
        ```
     
        Если конфигурация является корректной, появится сообщение:
     
        ```bash
        Success! The configuration is valid.
        ```
     
     1. Выполните команду:
     
        ```bash
        terraform plan
        ```
     
        В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
     1. Примените изменения конфигурации:
     
        ```bash
        terraform apply
        ```
     
     1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

  Проверить изменившиеся параметры CDN-ресурса можно в [консоли управления](https://kz.console.yandex.cloud) или с помощью команды [CLI](../../../cli/index.md):

  ```bash
  yc cdn resource get <идентификатор_ресурса>
  ```

- API {#api}

  Воспользуйтесь методом REST API [update](../../api-ref/Resource/update.md) для ресурса [Resource](../../api-ref/Resource/index.md) или вызовом gRPC API [ResourceService/Update](../../api-ref/grpc/Resource/update.md).

{% endlist %}

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