---
title: 'Настроить S3 после обновления'
sidebar_label: 'Настроить хранилище после обновления'
description: 'Что необходимо сделать для продолжения работы с S3 после его обновления'
sidebar_position: 1
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {CustomTable} from '@selectel/docux/components'
import TrashIcon from '@selectel/docux/icons/trash'
import CopyIcon from '@selectel/docux/icons/copy'
import {TabItemLabel} from '@selectel/docux/components'

# Настроить S3 после обновления

:::warning

29.09.2023 было выпущено крупное обновление S3.
Ранее созданные пользователи, вызовы методов [Swift API (old)](/api/object-storage-swift-old/) и [Object Storage API (old)](/api/selectel-storage-old/) и т. п. перестанут работать 05.10.2027 в 11:00 (UTC+3).
Часть возможностей перестанет поддерживаться, подробнее в подразделе [Недоступная функциональность](#unavailable-features).

Мы рекомендуем использовать [S3 API](/api/object-storage-s3/).
Измените настройки хранилища заранее.

:::

Если у вас были созданы бакеты до обновления S3, [перенесите их в проект](#transfer-bucket-to-project), чтобы продолжить работу с S3 в панели управления.

Наиболее значимые изменения в работе хранилища:

* новая авторизация во все [API для работы с хранилищем](/api/) и новые эндпоинты для доступа;
* новый [публичный домен бакета](/s3/manage/domains.mdx#bucket-public-domain) (домен вида `<uuid>.selstorage.ru`). Этот домен заменит персональный домен аккаунта (домена вида `*****.selcdn.ru`);
* переезд S3 в [проекты](/access-control/projects/about-projects.mdx);
* новая модель [управления доступом](/s3/about/manage-access.mdx): полная поддержка ролевой модели и появление политик доступа к бакетам;
* [недоступность части старой функциональности](#unavailable-features).

## Перенести бакеты в проект \{#transfer-bucket-to-project}

Без переноса в [проект](/access-control/projects/about-projects.mdx) вы не сможете работать с хранилищем в панели управления.

Перенести хранилище можно один раз и целиком (в один проект). Распределить старые бакеты по разным проектам нельзя. Создавать новые бакеты можно будет в разных проектах.

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

<Tabs queryString="project">
  <TabItem value="existing" default>
    <TabItemLabel>
      В существующий проект
    </TabItemLabel>

    1. В [панели управления](https://my.selectel.ru/storage/) в верхнем меню нажмите **Продукты** и выберите **S3**. При первом после 29.09.2023 переходе в раздел откроется страница для переноса бакетов.
    2. Укажите **Использовать существующий проект**.
    3. Выберите проект, в который хотите перенести бакеты, и нажмите **Перенести**.
  </TabItem>

  <TabItem value="new">
    <TabItemLabel>
      В новый проект
    </TabItemLabel>

    1. В [панели управления](https://my.selectel.ru/storage/) в верхнем меню нажмите **Продукты** и выберите **S3**. При первом после 29.09.2023 переходе в раздел откроется страница для переноса бакетов.
    2. Укажите **Создать новый проект**.
    3. Введите имя проекта и нажмите **Перенести**.
  </TabItem>
</Tabs>

## Настроить S3 \{#configure-s3}

1. [Настройте доступ к хранилищу для пользователей](#configure-storage-access-for-users).
2. [Настройте политику доступа к бакету](#configure-bucket-policy).
3. Если вы используете API или FTP, [обновите ключи доступа и URL](#update-access-keys-and-url).
4. Если вы используете CDN, [измените CDN-ресурс](#edit-cdn-resource).
5. [Проверьте](#check-domains), что вы заменили домены на новые.
6. [Удалите старых пользователей хранилища](#delete-legacy-users).

### 1. Настроить доступ к хранилищу для пользователей \{#configure-storage-access-for-users}

S3 теперь поддерживает [типы пользователей и роли](/access-control/access-management.mdx):

* доступ к S3 через панель управления будет у [пользователей панели](/access-control/user-types.mdx#panel-users), чья роль разрешает доступ ко всему аккаунту или проекту, в который были перенесены бакеты;
* доступ к API осуществляется через [сервисных пользователей](/access-control/user-types.mdx#service-users) вместо пользователей хранилища (создавались в разделе **S3** → **Пользователи**). Старые пользователи продолжат работать и будут отключены позднее. Создавать новых пользователей такого вида больше нельзя.

[Добавлять новых пользователей](/access-control/manage/add-user.mdx) можно в разделах **Пользователи панели** и **Сервисные пользователи**.

У пользователей с ролями [`object_storage_user`](/access-control/role-reference.mdx#object-storage-user), [`s3.user`](/access-control/role-reference.mdx#s3-user) и [`s3.bucket.user`](/access-control/role-reference.mdx#s3-bucket-user) доступ определяется исключительно политикой доступа — если она не настроена, пользователь не будет иметь доступ в бакет.
Подробнее о работе разных ролей в хранилище в инструкции [Управлять доступом в S3](/s3/about/manage-access.mdx).

### 2. Настроить политику доступа к бакету \{#configure-bucket-policy}

[Создать политику доступа к бакету](/s3/buckets/bucket-policy/create-policy.mdx) можно через панель управления. Для создания политики доступа через API воспользуйтесь [документацией AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketPolicy.html).

При настройке политики учитывайте доступы в рамках ролевой модели, подробнее в инструкции [Управлять доступом в S3](/s3/about/manage-access.mdx).

Подробнее о работе политик доступа в разделе [Политика доступа](/s3/buckets/bucket-policy/).

### 3. Обновить ключи доступа и URL \{#update-access-keys-and-url}

<Tabs queryString="api">
  <TabItem value="s3" default>
    <TabItemLabel>
      S3 API
    </TabItemLabel>

    Подробнее об авторизации в [документации S3 API](/api/object-storage-s3/).

    1. [Выдайте S3-ключ](/access-control/manage/edit-user-data-or-role.mdx#issue-s3-key) сервисному пользователю. Выдать ключ можно также через [IAM API](/api/users-and-roles/).
    2. В запросах замените URL и используйте ключ для аутентификации по новой схеме:

       * `AWS_ACCESS_KEY_ID` — значение поля **Access key** из [S3-ключа](/access-control/manage/edit-user-data-or-role.mdx#issue-s3-key);
       * `AWS_SECRET_KEY` — значение поля **Secret key** из [S3-ключа](/access-control/manage/edit-user-data-or-role.mdx#issue-s3-key);
       * `URL` — `s3.<pool>.storage.selcloud.ru`, где `<pool>` — [пул](/infrastructure/locations.mdx#pool), в котором находится S3 (например, `ru-1`).
  </TabItem>

  <TabItem value="swift">
    <TabItemLabel>
      Swift API
    </TabItemLabel>

    Подробнее об авторизации в [документации Swift API](/api/object-storage-swift/).

    1. Для авторизации используйте логин и пароль [сервисного пользователя](/access-control/user-types.mdx).
    2. В запросах замените URL и данные:

       * `OS_USERNAME` — логин сервисного пользователя. Посмотреть логин можно в [панели управления](https://my.selectel.ru/iam/service-users): в верхнем меню нажмите **IAM** → раздел **Сервисные пользователи**;
       * `OS_PASSWORD` — пароль сервисного пользователя. Если вы забыли пароль, [измените его](/access-control/manage/edit-user-data-or-role.mdx#change-service-user-password);
       * `OS_AUTH_URL` — `https://cloud.api.selcloud.ru/identity/v3`;
       * `OS_TENANT_ID` — ID [проекта](/access-control/projects/about-projects.mdx), можно посмотреть в [панели управления](https://my.selectel.ru/storage/): в разделе **S3** откройте меню проектов (название текущего проекта) → в строке нужного проекта нажмите <CopyIcon />;
       * `URL` — `swift.<pool>.storage.selectel.org/v1/<project_id>`, где:

         * `<pool>` — [пул](/infrastructure/locations.mdx#pool), в котором находится S3 (например, `ru-1`);
         * `<project_id>` — ID [проекта](/access-control/projects/about-projects.mdx).
  </TabItem>

  <TabItem value="ftp">
    <TabItemLabel>
      FTP
    </TabItemLabel>

    1. [Выдайте S3-ключ](/access-control/manage/edit-user-data-or-role.mdx#issue-s3-key) сервисному пользователю. Выдать ключ можно также через [IAM API](/api/users-and-roles/).
    2. Замените URL на `ftp.<pool>.storage.selcloud.ru`, где `<pool>` — [пул](/infrastructure/locations.mdx#pool), в котором находится S3.
  </TabItem>
</Tabs>

### 4. Изменить CDN-ресурс \{#edit-cdn-resource}

Если вы используете S3 в качестве источника контента [CDN](/cdn/), измените CDN-ресурс.

1. В [панели управления](https://my.selectel.ru/cdn-v3) в верхнем меню нажмите **Продукты** и выберите **CDN**.
2. В разделе **CDN-ресурсы** откройте страницу CDN-ресурса → вкладка **Источник**.
3. В поле **Домен** замените указанный домен на [публичный домен бакета](/s3/manage/domains.mdx#bucket-public-domain) вида `<uuid>.selstorage.ru`.
4. В блоке **Hostname** в поле **Hostname при запросе к источнику** укажите публичный домен бакета без протокола и порт. По умолчанию используется порт 80.

### 5. Проверить домены \{#check-domains}

Убедитесь, что вы везде используете новые домены.

Подробнее о доменах в инструкции [Домены в S3](/s3/manage/domains/).

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Для чего используется</th>
        <th>Старый домен</th>
        <th>Новый домен</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>Публичный доступ</th>
        <td>`*****.selcdn.ru`</td>
        <td>`<uuid>.selstorage.ru`</td>
      </tr>

      <tr>
        <th>Swift API</th>
        <td>`api.selcdn.ru`</td>
        <td>`swift.<pool>.storage.selcloud.ru`</td>
      </tr>

      <tr>
        <th>S3 API</th>

        <td>
          * `s3.storage.selcloud.ru/<bucket_name>` (Path-Style)
          * `<bucket_name>.s3.storage.selcloud.ru` (Virtual Hosted)
        </td>

        <td>
          * `s3.<pool>.storage.selcloud.ru/<bucket_name>` (Path-Style)
          * `<bucket_name>.s3.<pool>.storage.selcloud.ru` (Virtual Hosted)
        </td>
      </tr>

      <tr>
        <th>FTP</th>
        <td>`ftp.selcdn.ru`</td>
        <td>`ftp.<pool>.storage.selcloud.ru`</td>
      </tr>

      <tr>
        <th>Домен для DNS-записей</th>
        <td>`*****.selcdn.ru`</td>
        <td>`access.<pool>.storage.selcloud.ru`</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

### 6. Удалить старых пользователей хранилища \{#delete-legacy-users}

1. В [панели управления](https://my.selectel.ru/storage/) в верхнем меню нажмите **Продукты** и выберите **S3**.
2. Перейдите в раздел **Пользователи панели**.
3. В карточке пользователя нажмите <TrashIcon /> → **Удалить**.

## Недоступная функциональность \{#unavailable-features}

Вызовы методов [Swift API (old)](/api/object-storage-swift-old/) и [Object Storage API (old)](/api/selectel-storage-old/) перестанут работать 05.10.2027 в 11:00 (UTC+3).
Используйте альтернативные возможности в [S3 API](/api/object-storage-s3/), [Object Storage API](/api/object-storage/) или панели управления.

<Tabs queryString="unavailable-features">
  <TabItem value="swift-api-old" default>
    <TabItemLabel>
      Swift API (old)
    </TabItemLabel>

    <CustomTable>
      <table data-sticky>
        <thead>
          <tr>
            <th />

            <th>Недоступная функциональность</th>
            <th>Альтернатива</th>
          </tr>
        </thead>

        <tbody>
          <tr>
            <th rowspan="2">Аутентификация</th>
            <td>Авторизация по протоколу v1 (`GET /auth/v1.0`, заголовки `X-Auth-User` и `X-Auth-Key`)</td>
            <td rowspan="2">Использовать подписи AWS Signature V4 или AWS Signature Version 2 и S3-ключи в [S3 API](/api/object-storage-s3/)</td>
          </tr>

          <tr>
            <td>Авторизация по протоколу v2 (`POST /v2.0/tokens`, `passwordCredentials`)</td>
          </tr>

          <tr>
            <th rowspan="2">Статистика трафика</th>
            <td>Статистика объема загруженных и скачанных данных на уровне аккаунта и контейнера, заголовки ответа `X-Received-Bytes` и `X-Transfered-Bytes`</td>
            <td rowspan="2">Получать экспорт [логов](/s3/manage/logs.mdx) через панель управления или [Object Storage API](/api/object-storage/)</td>
          </tr>

          <tr>
            <td>Поля `rx_bytes` и `tx_bytes` в JSON-ответе при получении списка контейнеров</td>
          </tr>

          <tr>
            <th>Управление HTTP-заголовками объектов</th>

            <td>
              * `Access-Control-Allow-Origin` — разрешенный источник для кросс-доменных запросов;
              * `Access-Control-Max-Age` — время кэширования Preflight-запроса;
              * `Access-Control-Allow-Methods` — разрешенные HTTP-методы для CORS;
              * `Access-Control-Allow-Credentials` — разрешение передачи учетных данных;
              * `Access-Control-Expose-Headers` — доступные клиенту заголовки;
              * `Access-Control-Allow-Headers` — разрешенные заголовки в запросе;
              * `Strict-Transport-Security` — принудительное использование HTTPS для контейнера
            </td>

            <td>Использовать [CORS](/s3/buckets/cors.mdx) в панели управления или через [S3 API](/api/object-storage-s3/) (Bucket CORS). Настройка CORS выполняется на уровне бакета</td>
          </tr>

          <tr>
            <th>Домены</th>
            <td>Публичный домен аккаунта `(*****.selcdn.ru`) — домен с кэшированием раздаваемого контента</td>
            <td>Использовать [домены S3 API](/s3/manage/domains.mdx)</td>
          </tr>

          <tr>
            <th>Временные ссылки для скачивания</th>
            <td>Генерация временных подписанных ссылок для скачивания через HMAC-SHA1 (`temp_url_sig`, `temp_url_expires`, секретный ключ через `X-Account-Meta-Temp-URL-Key` / `X-Container-Meta-Temp-URL-Key`)</td>
            <td>Использовать Presigned URL в [S3 API](/api/object-storage-s3/), который использует другой механизм подписи (AWS Signature V4). Потребуется переработка кода, который использует TempURL</td>
          </tr>

          <tr>
            <th rowspan="2">Query-параметры файла</th>
            <td>Query-параметр `?filename=file_name` — принудительное скачивание файла браузером вместо открытия (заголовок `Content-Disposition: attachment`)</td>
            <td>✗</td>
          </tr>

          <tr>
            <td>Формат ответа XML при запросе списка файлов (`?format=xml`)</td>
            <td>✗</td>
          </tr>
        </tbody>
      </table>
    </CustomTable>
  </TabItem>

  <TabItem value="object-storage-api-old">
    <TabItemLabel>
      Object Storage API (old)
    </TabItemLabel>

    <CustomTable>
      <table data-sticky>
        <thead>
          <tr>
            <th />

            <th>Недоступная функциональность</th>
            <th>Альтернатива</th>
          </tr>
        </thead>

        <tbody>
          <tr>
            <th>Кэш</th>
            <td>Очистка кэша хранилища (`POST /v1/storage/purge`)</td>
            <td>Управлять [кэшированием](/s3/manage/cache.mdx) в панели управления</td>
          </tr>

          <tr>
            <th>Типы бакетов</th>
            <td>Создание бакета типа «галерея» (`X-Container-Meta-Type: gallery`) — демонстрация изображений в виде галереи</td>
            <td>✗</td>
          </tr>

          <tr>
            <th rowspan="2">Скачивание в виде архива</th>
            <td>Скачивание содержимого бакета в виде ZIP-архива (`?download-all-as-zip=archive_name`)</td>
            <td>✗</td>
          </tr>

          <tr>
            <td>Скачивание папки в виде ZIP-архива</td>
            <td>✗</td>
          </tr>

          <tr>
            <th>Распаковка архивов</th>
            <td>Автоматическая распаковка архивов (`.tar`, `.tar.gz`, `.gzip`) при загрузке (`?extract-archive=tar.gz`)</td>
            <td>✗</td>
          </tr>

          <tr>
            <th rowspan="2">Символические ссылки</th>
            <td>Одноразовые символические ссылки (`Content-Type: x-storage/onetime-symlink`)</td>
            <td>✗</td>
          </tr>

          <tr>
            <td>Парольная защита символических ссылок (`x-storage/symlink+secure`, `x-storage/onetime-symlink+secure`, заголовок `X-Object-Meta-Link-Key` с SHA1-хэшем пароля)</td>
            <td>✗</td>
          </tr>

          <tr>
            <th>Временные ссылки для скачивания</th>
            <td>Генерация временных подписанных ссылок для скачивания через HMAC-SHA1 (`temp_url_sig`, `temp_url_expires`, секретный ключ через `X-Account-Meta-Temp-URL-Key` / `X-Container-Meta-Temp-URL-Key`)</td>
            <td>Использовать Presigned URL в [S3 API](/api/object-storage-s3/), который использует другой механизм подписи (AWS Signature V4). Потребуется переработка кода, использующего TempURL</td>
          </tr>

          <tr>
            <th rowspan="2">Ссылки для загрузки файлов сторонними пользователями (Sendmefile)</th>
            <td>Создание ссылок для загрузки файлов третьими лицами (`PUT .../upload`, `Content-Type: x-storage/sendmefile+*`) с режимами: `inplace`, `timepostfix`, `autopostfix`, `folderday`, `folderhour`, `folderuniq`</td>
            <td rowspan="2">Использовать Presigned URL в [S3 API](/api/object-storage-s3/), который использует другой механизм подписи (AWS Signature V4)</td>
          </tr>

          <tr>
            <td>
              Ограничения для Sendmefile:

              * максимальный размер файла (`X-Object-Meta-Sendmefile-Max-Size`);
              * пароль (`X-Object-Meta-Sendmefile-Secret`);
              * разрешение перезаписи (`X-Object-Meta-Sendmefile-Allow-Overwrite`);
              * веб-интерфейс (`X-Object-Meta-Sendmefile-Disable-Web`)
            </td>
          </tr>

          <tr>
            <th>Версионирование (старый механизм)</th>
            <td>Версионирование с явным указанием бакета для хранения версий через `X-Versions-Location`</td>
            <td>Использовать [версионирование](/s3/buckets/versioning.mdx) в панели управления или через [S3 API](/api/object-storage-s3/) (`Bucket Versioning`)</td>
          </tr>

          <tr>
            <th rowspan="2">Специальные страницы</th>
            <td>Шаблонные параметры для страницы ошибки 404: `{container}`, `{path}` — передача информации об изначально запрашиваемом файле</td>
            <td>[Настроить страницу ошибки](/s3/buckets/website.mdx#configure-error-page) в панели управления</td>
          </tr>

          <tr>
            <td>Сортировка листинга файлов (`X-Container-Meta-Web-Listings-Sort`: `name_asc`, `name_desc`, `date_asc`, `date_desc`, `size_asc`, `size_desc`)</td>
            <td>[Настроить веб-листинг](/s3/buckets/website.mdx#configure-weblisting) в панели управления</td>
          </tr>

          <tr>
            <th>Управление пользователями через API</th>

            <td>
              * просмотр списка пользователей (`GET /v1/users`);
              * добавление нового пользователя (`PUT /v1/users/{username}`) с настройками: пароль, статус активности, права доступа (ACL для чтения и записи контейнеров), S3-пароль;
              * удаление пользователя (`DELETE /v1/users/{username}`);
              * изменение пароля основного пользователя (`POST /v1/users`)
            </td>

            <td>
              Использовать:

              * [управление доступом](/s3/about/manage-access.mdx) (пользователями) в панели управления или через [IAM API](/api/users-and-roles/);
              * управление [политиками доступа](/s3/buckets/bucket-policy/) в панели управления или через [S3 API](/api/object-storage-s3/)
            </td>
          </tr>

          <tr>
            <th>Управление SSL-сертификатами через API</th>

            <td>
              * получение списка всех сертификатов (`GET /v1/ssl`);
              * получение информации о конкретном сертификате (`GET /v1/ssl/{cert}`);
              * добавление нового сертификата (`PUT /v1/ssl/{cert_name}`);
              * удаление сертификата (`DELETE /v1/ssl/{cert}`)
            </td>
          </tr>
        </tbody>
      </table>
    </CustomTable>
  </TabItem>
</Tabs>

<Formbricks />
