# Хранилище S3 — полный текст документации > Полный текст раздела «Хранилище S3» документации Timeweb Cloud в markdown. Каждая статья начинается с заголовка первого уровня и ссылки на свою каноническую страницу. Индекс: https://timeweb.cloud/docs/s3-storage/llms.txt Статей: 39 Последнее обновление: 2026-08-18 # Хранилище S3 Source: https://timeweb.cloud/docs/s3-storage?utm_source=llms_txt&utm_medium=ai [Хранилище S3](https://timeweb.cloud/services/s3-storage) — это универсальное объектное хранилище, совместимое с Amazon S3 API, в котором можно размещать любые типы статических данных. Данные будут размещены в одном месте и едином формате, и вы сможете в любой момент получать к ним доступ через API или графический интерфейс. Облачное хранилище Timeweb Cloud обеспечивает: - **Удобство работы.** Вы можете работать с хранилищем с помощью множества инструментов: API, CLI, Cyberduck, Java SDK, Python SDK. - **Тройную репликацию данных.** Ваши данные дублируются в нескольких экземплярах, чтобы исключить риск их утери.  ## Примеры использования хранилища - **Размещение бэкапов** Размещайте резервные копии ваших данных на случай непредвиденных обстоятельств. Можно настроить регулярное копирование информации и в любой момент использовать ее для быстрого восстановления данных. - **Размещение статических и медиа-файлов** Разгрузите диски своих серверов, оставив на них только динамические данные, которые сложно или невозможно разместить в облаке. Всю статику можно вынести в хранилище и заметно снизить нагрузку на ваши мощности. - **Размещение архивов, журналов, логов** Размещайте в S3-хранилище архивы с устаревшей информацией и базами данных, историю запросов, финансовую отчетность и любые другие данные, которые требуют длительного хранения, но в постоянном доступе к которым нет необходимости. - **Хостинг статических сайтов** Благодаря возможности обращаться к файлам в хранилище не только по HTTP, но по и HTTPS, можно размещать в нем статические сайты. Это сэкономит пространство на ваших серверах и снизит расходы на инфраструктуру. # Тарификация трафика Source: https://timeweb.cloud/docs/s3-storage/tariffication?utm_source=llms_txt&utm_medium=ai Исходящий трафик S3-хранилища тарифицируется сразу для всех бакетов на аккаунте. > [!NOTE] > Для [пользователей с Prime](https://timeweb.cloud/prime) предоставляется бесплатная квота на исходящий трафик в 1000 ГБ. Лимиты обновляются 1-го числа каждого месяца в 00:00 по московскому времени. Стоимость исходящего трафика зависит от класса хранения: | **Класс хранения** | **Стоимость** | | --- | --- | | Премиальный | 1,3 ₽/ГБ | | Стандартный | 1,3 ₽/ГБ | | Холодный | 1,5 ₽/ГБ | Исходящий трафик тарифицируется отдельно, и вы можете видеть свои затраты на вкладке «[Подключенные сервисы](https://timeweb.cloud/my/finances/services)». В отличие от других услуг, стоимость исходящего трафика рассчитывается по факту использования. Это значит, что итоговая стоимость может измениться к концу месяца. ## Ограничение исходящего трафика Чтобы предотвратить непредвиденные расходы, вы можете установить ограничение на исходящий трафик. Для этого перейдите во вкладку «[Настройки](https://timeweb.cloud/my/storage/setup)» на странице «Хранилище S3» и нажмите кнопку «Установить лимит» в строке «Ограничение исходящего трафика». ![Selection 115](https://content.timeweb.com/assets/af7833f1-a6df-43d9-a816-c8ee34bbf4fa.png?width=1020&height=615) После этого включите опцию «Лимит исходящего трафика» и укажите желаемое значение в ГБ.  ![Screenshot 02 20 25 17:52:34](https://content.timeweb.com/assets/f8a8cdfd-3b62-4ea1-a4f5-e273709d42f9.png?width=414&height=361) Для клиентов Prime исходящий трафик в пределах бесплатной квоты не оплачивается. Для клиентов без Prime весь исходящий трафик оплачивается в соответствии с классом хранения. Например, 150 ГБ исходящего трафика для бакета стандартного класса будут бесплатными для клиента Prime и обойдутся в 195 ₽ для клиента без Prime. > [!NOTE] > Проверка превышения установленного лимита выполняется раз в час. Это означает, что трафик может выходить за установленные значения между проверками и блокировкой, и такой трафик будет тарифицироваться. Когда достигнут установленный лимит, на бакеты будет автоматически установлено правило, запрещающее доступ к объектам. При попытке получить объект будет возникать ошибка с кодом 403. После увеличения лимита или с наступлением нового месяца это ограничение будет автоматически снято. Вы также можете снять ограничение вручную, например, при помощи aws s3api, изменив [Bucket Policies](https://timeweb.cloud/docs/s3-storage/supported-features/bucket-policies). В этом случае доступ к объектам будет восстановлен, и дальнейший трафик будет тарифицироваться по стандартным условиям. ## Статистика потребления трафика Вы можете отслеживать потребление трафика на вкладке «[Статистика](https://timeweb.cloud/my/storage/statistics)» в разделе «Хранилище S3».  - **«Потребление трафика»**: показывает изменения объемов входящего и исходящего трафика. - **«Итоговое потребление трафика»**: демонстрирует общий объем использованного входящего и исходящего трафика. График имеет только растущую динамику. - **«Объем трафика»**: показывает объем использованного платного трафика. Для клиентов Prime также отображается, сколько трафика из бесплатной квоты уже израсходовано и сколько еще доступно. Для графиков доступны интервалы: 6 часов, сутки, неделя, прошлый месяц и текущий месяц. ![Screenshot 02 20 25 17:53:13](https://content.timeweb.com/assets/211a1d2f-9f8a-4a69-a219-ddc76b9269de.png?width=1023&height=845) # Работа с хранилищем Source: https://timeweb.cloud/docs/s3-storage/manage-storage?utm_source=llms_txt&utm_medium=ai Данные в S3-хранилище хранятся в едином формате: в виде объектов, помещенных в бакеты (контейнеры). Объекты — это ваши файлы и данные в любом формате. Бакет — это хранилище объектов. Чтобы разместить файл в S3-хранилище, его необходимо поместить в бакет. Бакеты могут быть приватными или публичными и отличаются способом доступа к ним. Получить доступ к объектам в приватном контейнере может только авторизованный пользователь (администратор). Пользователь хранилища — один, и ему доступны все его бакеты с полными правами. Access Key и Secret Access Key для разных бакетов в рамках одного аккаунта совпадают. На текущий момент нет возможности настроить какие-либо ограничения видимости бакетов (например, отображать в Cyberduck только конкретный из них). # Создание бакета Source: https://timeweb.cloud/docs/s3-storage/manage-storage/create-bucket?utm_source=llms_txt&utm_medium=ai Чтобы создать новый бакет: 1. Перейдите в раздел «[Хранилище S3](https://timeweb.cloud/my/storage)» и нажмите «Создать» или «Добавить». 2. Выберите класс хранения: - - **Премиальный** — класс хранения с тройной репликацией для сценариев, где важна максимальная производительность. - **Стандартный** — отказоустойчивый класс хранения, в котором данные распределяются с избыточностью и могут быть восстановлены при сбоях. - **Холодный** — оптимален для редко используемых данных. Стоимость размещения данных ниже, но исходящий трафик дороже. 3. Выберите тариф: - - Для **премиального** и **стандартного** классов можно выбрать один из готовых тарифов. На аккаунте может быть только один бакет стандартного и один бакет премиального класса с тарифом 1 ГБ. - Для холодного класса выбор тарифа недоступен — при создании бакета автоматически устанавливается объем 1 ГБ и [включается автомасштабирование](https://timeweb.cloud/docs/s3-storage/s3-autoscaling). 4. При использовании премиального или стандартного класса [включите или выключите автомасштабирование](https://timeweb.cloud/docs/s3-storage/s3-autoscaling). 5. Укажите типа бакета. Его можно будет изменить в дальнейшем. - **Приватный** — доступ к такому бакету и размещенным в нем объектам будет иметь только администратор. Выбирайте этот тип бакета для размещения данных, доступ к которым важно ограничить. - **Публичный** — для доступа к данным в публичном бакете не требуется авторизация. Этот тип подойдет для размещения данных, которые могут быть доступны широкому кругу лиц. ![Интерфейс создания бакета](https://content.timeweb.com/assets/43f9c85c-e12f-4111-937b-c9ba943fd1d4.png?width=2168&height=1654) 6. В пункте «Информация о хранилище» укажите свое имя бакета или оставьте предложенное по умолчанию. Имя бакета может содержать только латинские буквы в нижнем регистре, цифры и символы дефиса.  > [!NOTE] > Если вы ранее создали бакет с определенным именем и затем удалили его, повторно использовать это имя для нового бакета не получится. Каждое имя бакета должно быть уникальным. 7. Выберите проект, в который нужно добавить бакет. ![Scr 20251127 Qfff](https://content.timeweb.com/assets/6baabb39-b56e-4c2d-9324-d81a5838c8d5.png?width=760&height=552) 8. Нажмите «Создать». Бакет будет создан мгновенно и отобразится в панели управления, и вы можете начать загружать файлы в хранилище. Оплата за хранилище списывается ежечасно. # Управление бакетами Source: https://timeweb.cloud/docs/s3-storage/manage-storage/manage-buckets?utm_source=llms_txt&utm_medium=ai ## Подключение к бакету и работа с файлами Кластер S3 поддерживает доступ через Amazon S3 API. Подключение к хранилищу и управление объектами (загрузка, удаление, изменение) может быть реализовано разными способами: - Вы можете использовать клиент API S3. Это может быть [файловый менеджер Cyberduck](https://timeweb.cloud/docs/s3-storage/tools/cyberduck) или любой другой инструмент с поддержкой протокола S3, например, [S3cmd](https://timeweb.cloud/docs/s3-storage/tools/s3cmd), [Rclone](https://timeweb.cloud/docs/s3-storage/tools/rclone), [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli), [S3 Browser](https://timeweb.cloud/docs/s3-storage/tools/s3-browser) и многие другие. - Подключение к хранилищу может быть реализовано в коде вашего приложения, с помощью библиотек языка программирования для протокола S3. Примеры можно найти [здесь](https://github.com/timeweb-cloud/s3-examples). - Загружать файлы в бакет можно с помощью [объектного менеджера](https://timeweb.cloud/docs/s3-storage/manage-storage/object-manager) в панели управления. - Можно подключаться к бакету с помощью ispmanager для [автоматической загрузки бэкапов](https://timeweb.cloud/docs/s3-storage/use-cases/ispmanager-backups). - Можно настроить [выгрузку бэкапов в хранилище](https://timeweb.cloud/docs/s3-storage/use-cases/rezervnoe-kopirovanie-bitrix-v-s3) через Bitrix Backup. > [!NOTE] > Наш кластер поддерживает 2 версии протокола AWS Signature — v2 и v4. Реквизиты для подключения отображаются во вкладке «Дашборд». ![Данные для подключения к бакету](https://content.timeweb.com/assets/90917ba4-4647-4767-b26f-5a53c36af046.png?width=2192&height=1814) Для доступа к файлам используются пути вида: ```shell https://s3.twcstorage.ru/имя_бакета/имя_файла ``` Либо, если файл размещен внутри директории в бакете: ```shell https://s3.twcstorage.ru/имя_бакета/имя_директории/имя_файла ``` К файлам в публичных бакетах также можно обращаться, используя модель адресации Virtual-hosted style, в этом случае название бакета входит в имя хоста: ```shell https://имя_бакета.s3.twcstorage.ru/имя_файла https://имя_бакета.s3.twcstorage.ru/имя_директории/имя_файла ``` Вы также можете обращаться к бакету по своему домену, [привязав его](https://timeweb.cloud/docs/s3-storage/manage-storage/link-domain). Получить доступ к файлам в **публичном** бакете можно через браузер или другой HTTP-клиент, обратившись непосредственно по такой ссылке. Доступ к файлам в **приватном** бакете также может быть организован через HTTP, но дополнительно потребуется подпись для аутентификации, которая добавляется к запросу в виде HTTP-заголовков. Подробнее см. [Описание принципов работы с S3](https://timeweb.cloud/docs/s3-storage/manage-storage/s3-guide). Пропускная способность при загрузке или скачивании объектов в бакет составляет 1 Гбит/сек. ## Смена тарифа Вы можете увеличить тариф бакета, если вам потребуется больше пространства для размещения данных. Изменить тариф в меньшую сторону невозможно. Для смены тарифа кликните на нужный бакет в панели управления, перейдите в раздел «Настройки», и нажмите «Изменить размер хранилища». ![Изменение тарифа бакета](https://content.timeweb.com/assets/7866ec85-cdce-48f8-971b-04be423fa9dc.png?width=2172&height=1758) Выберите новый тариф и сохраните изменения. Также вы можете включить или выключить [автомасштабирование бакета](https://timeweb.cloud/docs/s3-storage/manage-storage/s3-autoscaling). Объем пространства увеличится сразу же. ## История действий Вы можете просмотреть, какие действия выполнялись с бакетом, на вкладке «История». ![54ecc2e1 469f 465d A447 22eed36724d5](https://content.timeweb.com/assets/c8104292-bf5c-4b7c-aa83-690b48abc514?width=1101&height=460) Логируются следующие события: - Создание бакета - Изменение конфигурации - Привязка домена - Выпуск SSL-сертификата на домен - Перенос данных - Удаление бакета ## Удаление бакета Будет удален бакет и все файлы в нем.  Для удаления кликните на три точки на вкладке «Бакеты»: ![Удаление бакета](https://content.timeweb.com/assets/656c03a7-0d38-4341-a237-6b087c58a297.png?width=2106&height=1614) Либо на значок удаления в настройках бакета: ![Удаление бакета](https://content.timeweb.com/assets/17d5b2c8-773b-47f7-9890-2cf7dcdcaaf5.png?width=2174&height=1776) Во всплывающем окне введите имя бакета или код подтверждения, в зависимости от [ваших настроек](https://timeweb.cloud/docs/account-management/notifications#uvedomleniya-pri-udalenii-servisov). ## Восстановление удаленных бакетов Если на момент удаления бакет существовал более двух дней, в течение еще некоторого времени (как правило, 2-5 дней) вы сможете восстановить его и все объекты в нем. Вы также будете видеть этот бакет при подключении к хранилищу через сторонние инструменты, однако любые действия с ним будут недоступны. Просмотреть удаленные, но доступные к восстановлению бакеты можно в списке бакетов, выбрав «Удаленные».  ![9728f825 561a 4f58 B191 52715e1a446f](https://content.timeweb.com/assets/d0f842ac-d075-4102-96d2-c9bb261e7683.png?width=1557&height=868) Чтобы восстановить бакет, кликните на значок справа и подтвердите создание тикета в поддержку. ![E7cd2ddd 73d6 4d4f 87b1 04c2799e415c](https://content.timeweb.com/assets/90131230-4d13-42f4-9449-add28177fff8.png?width=1546&height=867) # Дополнительные пользователи Source: https://timeweb.cloud/docs/s3-storage/manage-storage/additional-users?utm_source=llms_txt&utm_medium=ai Дополнительные пользователи необходимы для разграничения доступа к бакетам в аккаунте. При создании первого бакета автоматически создается главный пользователь с доступом ко всем бакетам и максимальными правами. Использование такого пользователя может быть небезопасно. С помощью дополнительных пользователей можно предоставить доступ только к выбранным бакетам и с нужным уровнем прав. ## Создание пользователя В панели управления S3 перейдите в раздел «Пользователи» и нажмите «Добавить пользователя». ![Scr 20250814 Lqhk](https://content.timeweb.com/assets/adb34994-6c6e-4fde-aa92-951b37abde53.png?width=2000&height=912) Укажите имя пользователя и [задайте уровни доступа](https://timeweb.cloud/docs/s3-storage/manage-storage/additional-users#urovni-dostupa) для нужных бакетов. ![Scr 20250814 Pqti](https://content.timeweb.com/assets/2348d5fe-f362-49ec-9e9e-52a3994821b2.png?width=2014&height=1126) Нажмите «Создать». ## Данные для подключения В разделе «Пользователи» нажмите на нужного пользователя. На вкладке «Информация» будут отображены его `S3 Access Key` и `S3 Secret Key`. ![Scr 20250814 Pqak](https://content.timeweb.com/assets/12106773-5317-4314-8869-dec2ef3b2b00.png?width=2008&height=1118) ## Редактирование пользователя Вы можете отредактировать созданного пользователя. Для этого в панели управления S3 перейдите в раздел «Пользователи». Чтобы заблокировать пользователя, нажмите на три точки рядом с ним и выберите соответствующую опцию. При блокировке у пользователя будут отозваны все права. Разблокировать можно таким же способом. ![Scr 20250814 Otmb](https://content.timeweb.com/assets/20884330-5e2b-4359-9472-846b87348175.png?width=2052&height=896) Чтобы изменить права, нажмите на пользователя, в открывшемся окне перейдите во вкладку «Права доступа» и [установите нужные права](https://timeweb.cloud/docs/s3-storage/manage-storage/additional-users#urovni-dostupa) для бакетов. ![Scr 20250814 Pqyc](https://content.timeweb.com/assets/fdf2dc3a-bdc9-4a6e-bd03-134594dd97c3.png?width=2024&height=912) ## Уровни доступа Для каждого бакета можно установить один из четырех уровней доступа: - Управление - Чтение и запись - Чтение - Нет доступа Действия, доступные для каждого уровня: ### Нет доступа Пользователь не имеет доступа к бакету. ### Чтение **Бакеты**: - Просмотр списка бакетов - Определение региона - Получение ACL, политик доступа, тегов, CORS-настроек - Просмотр конфигурации веб-сайта, логирования, уведомлений, версионирования и жизненного цикла **Объекты**: - Получение метаданных и содержимого объектов - Просмотр ACL - Работа с версиями объектов (листинг, получение содержимого и ACL конкретной версии) ### Чтение и запись Включает все права уровня «Чтение», а также позволяет работать с объектами в бакете: **Объекты**: - Просмотр списка объектов - Скачивание объектов - Загрузка новых объектов - Обновление существующих объектов - Удаление объектов - Загрузка в несколько частей (multipart upload) Пользователь с уровнем доступа «Чтение и запись» не имеет доступа к управлению настройками бакета: ACL, политиками доступа, тегами, CORS-настройками, конфигурацией веб-сайта, логированием, уведомлениями, версионированием и жизненным циклом. ### Управление Включает все права уровня «Чтение и запись», а также: **Бакеты**: - Создание и удаление - Изменение ACL, тегов, CORS-настроек, политик доступа - Настройка статического веб-сайта - Управление версионированием - Настройка конфигурации жизненного цикла **Объекты**: - Изменение ACL # Кастомные роли пользователей Source: https://timeweb.cloud/docs/s3-storage/manage-storage/custom-user-roles?utm_source=llms_txt&utm_medium=ai Кастомные роли позволяют гибко настроить права дополнительного пользователя S3, если [стандартных уровней доступа](https://timeweb.cloud/docs/s3-storage/manage-storage/additional-users#urovni-dostupa) недостаточно. В панели управления S3 доступны готовые уровни доступа: «Чтение», «Чтение и запись», «Управление» и «Нет доступа». Это пресеты для популярных сценариев, которые помогают быстро выдать типовые права. Если нужен более точный набор разрешений, его можно настроить через API: например, разрешить пользователю работать только с отдельными префиксами, объектами или действиями. Например, с помощью кастомной роли можно выдать пользователю доступ только к нужной части бакета и разрешить только те действия, которые требуются для его задачи: чтение, загрузку, удаление или работу с версиями объектов. Такая настройка выполняется через IAM-совместимую политику пользователя. Политика применяется к конкретному дополнительному пользователю и не меняет права остальных пользователей бакета. > [!NOTE] > Кастомная роль не заменяет [политики бакета](https://timeweb.cloud/docs/s3-storage/supported-features/bucket-policies). Политика бакета задает правила доступа на уровне бакета, а кастомная роль ограничивает действия конкретного пользователя. ## Предварительная подготовка Перед настройкой кастомной роли: 1. Создайте [дополнительного пользователя S3](https://timeweb.cloud/docs/s3-storage/manage-storage/additional-users). 2. Установите и настройте [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli). 3. Подготовьте реквизиты основного пользователя S3 или пользователя с правами на управление политиками. При создании дополнительного пользователя в панели управления можно не выдавать ему доступ к нужному бакету и не назначать разрешения. Необходимые права будут настроены ниже с помощью пользовательской политики. В бакете заранее создайте папки, для которых будут настроены разные права: - `public/` — для файлов, которые пользователь сможет только читать; - `uploads/` — для файлов, которые пользователь сможет читать и загружать; - `reports/` — для файлов, которые пользователь сможет читать, загружать и удалять. В S3 папки являются префиксами в именах объектов.  ## Создание политики Создайте файл `user-prefix-policy.json`: ```js { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListWholeBucket", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::<имя_бакета>"] }, { "Sid": "ReadPublicPrefix", "Effect": "Allow", "Action": ["s3:GetObject", "s3:GetObjectVersion"], "Resource": ["arn:aws:s3:::<имя_бакета>/public/*"] }, { "Sid": "UploadToUploadsPrefix", "Effect": "Allow", "Action": ["s3:GetObject", "s3:GetObjectVersion", "s3:PutObject"], "Resource": ["arn:aws:s3:::<имя_бакета>/uploads/*"] }, { "Sid": "ManageReportsPrefix", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:PutObject", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": ["arn:aws:s3:::<имя_бакета>/reports/*"] } ] } ``` Вместо `<имя_бакета>` укажите имя вашего бакета. Другие действия для поля `Action` можно подобрать по списку поддерживаемых [методов для работы с объектами](https://timeweb.cloud/docs/s3-storage/manage-storage/s3-guide#metody-dlya-raboty-s-obektami). Права на объекты задаются через ARN вида: ```bash arn:aws:s3:::<имя_бакета>/<префикс>/* ``` Для просмотра списка объектов используется отдельное действие `s3:ListBucket`. Оно применяется к ARN бакета без префикса: ```bash arn:aws:s3:::<имя_бакета> ``` > [!NOTE] > В примере `s3:ListBucket` разрешен для всего бакета. Это значит, что пользователь сможет видеть список объектов в бакете, но выполнять действия с объектами сможет только в разрешенных префиксах. ## Применение политики Примените политику к дополнительному пользователю: ```bash aws iam put-user-policy \ --user-name <имя_пользователя> \ --policy-name user-prefix-policy \ --policy-document file://user-prefix-policy.json \ --endpoint-url https://s3.twcstorage.ru \ --region ru-1 ``` После выполнения команды политика будет привязана к пользователю. Если нужно изменить права, отредактируйте файл `user-prefix-policy.json` и повторно выполните команду `put-user-policy` с тем же именем политики. Новая версия политики заменит предыдущую. ## Проверка доступа Чтобы проверить права, настройте отдельный профиль AWS CLI с реквизитами дополнительного пользователя: ```bash aws configure --profile s3-limited-user ``` Укажите S3 Access Key, S3 Secret Key, регион `ru-1` и формат вывода `json`. Проверьте, что пользователь может посмотреть список объектов: ```bash aws s3 ls s3://<имя_бакета> \ --profile s3-limited-user \ --endpoint-url https://s3.twcstorage.ru ``` Проверьте загрузку в разрешенный префикс: ```bash aws s3 cp test.txt s3://<имя_бакета>/uploads/test.txt \ --profile s3-limited-user \ --endpoint-url https://s3.twcstorage.ru ``` Проверьте действие, которое не входит в политику. Например, пользователь не должен удалять файлы из префикса `uploads/`: ```bash aws s3 rm s3://<имя_бакета>/uploads/test.txt \ --profile s3-limited-user \ --endpoint-url https://s3.twcstorage.ru ``` Если политика применена корректно, команда завершится ошибкой доступа. ## Удаление политики Чтобы удалить кастомную роль у пользователя, выполните команду: ```bash aws iam delete-user-policy \ --user-name <имя_пользователя> \ --policy-name user-prefix-policy \ --endpoint-url https://s3.twcstorage.ru \ --region ru-1 ``` После удаления политики у пользователя останутся только права, заданные для него в панели управления S3. # Автомасштабирование бакетов Source: https://timeweb.cloud/docs/s3-storage/manage-storage/s3-autoscaling?utm_source=llms_txt&utm_medium=ai Автомасштабирование — это функция, которая автоматически увеличивает размер бакета, когда вы загружаете в него больше данных, чем указано в тарифе. Если автомасштабирование включено, размер хранилища увеличиватся автоматически, чтобы данные всегда были доступны. Вам не нужно контролировать объем данных в бакете и отслеживать достижение «потолка» по тарифу. Если автомасштабирование выключено, то при достижении тарифного лимита сервис приостанавливается, действия с бакетом недоступны. Для продолжения работы необходимо самостоятельно увеличить тариф.  > [!NOTE] > Автомасштабирование недоступно для бакетов с произвольной конфигурацией. ## Холодное хранилище Бакеты, созданные с 27.11.2025 При загрузке или удалении данных размер бакета увеличивается и уменьшается автоматически. Автомасштабирование **всегда включено** и не может быть выключено.  Стоимость хранения рассчитывается исходя из фактического объема данных. Минимальный оплачиваемый объем — 1 ГБ: плата за него начисляется, даже если бакет пуст. При уменьшении объема данных стоимость также уменьшается, но не может быть ниже стоимости 1 ГБ. В качестве примера используются тариф для бакетов, созданных с 31 июля 2026 года. Для бакетов, созданных ранее, стоимость хранения рассчитывается по тарифам, действовавшим на дату их создания. - Объем данных в хранилище увеличился с 1 ГБ до 3 ГБ → вы платите 3,3 ₽ в месяц. - Объем данных уменьшился до 800 МБ → вы платите за минимальный объем 1 ГБ, то есть 1,1 ₽ в месяц. Бакеты, созданные до 27.11.2025 Автомасштабирование недоступно. Увеличить размер бакета можно только вручную.  Вернуться на прежний объем невозможно. ## Стандартное и премиальное хранилище Принцип автомасштабирования одинаков для стандартного и премиального классов хранения. Бакеты, созданные с 27.11.2025 #### Тарифы 1 / 10 / 100 ГБ Автомасштабирование можно [включить или отключить](https://timeweb.cloud/docs/s3-storage/manage-storage/s3-autoscaling#upravlenie-avtomasshtabirovaniem). Если автомасштабирование включено, то при достижении лимита тариф автоматически переключается на следующий. > [!NOTE] > Если объем данных сократится, тариф останется прежним. Вернуться на меньший тариф невозможно. Пример: - У вас выбран тариф 100 ГБ. - Объем данных превысил 100 ГБ → тариф переключился на 250 ГБ. - Объем данных снизился до 90 ГБ → тариф остается 250 ГБ. #### **Безлимитный тариф** На максимальном тарифе автомасштабирование **всегда включено** и отключить его нельзя. - При превышении лимита в 250 ГБ тариф остается прежним, а каждый дополнительный гигабайт оплачивается отдельно. - Если объем данных уменьшился, то стоимость за дополнительные гигабайты снижается соответственно. - Сам тариф не меняется, перейти на меньший тариф невозможно. Рассмотрим расчет стоимости на примере бакета стандартного класса, созданного 31 июля 2026 года или позднее. Для бакетов, созданных ранее, действуют тарифы, установленные на дату их создания. - Объем данных составил 254 ГБ. Вы платите ежемесячную стоимость тарифа + 8 ₽ в месяц за дополнительные 4 ГБ. - Объем уменьшился до 251 ГБ. Вы платите ежемесячную стоимость тарифа + 2 ₽ в месяц за дополнительный 1 ГБ. - Объем уменьшился до 98 ГБ. Вы платите только ежемесячную стоимость тарифа 250 ГБ. Бакеты, созданные до 27.11.2025 #### **Тарифы до 2000 ГБ** На любых тарифах до 2 ТБ автомасштабирование можно [включить или отключить](https://timeweb.cloud/docs/s3-storage/manage-storage/s3-autoscaling#upravlenie-avtomasshtabirovaniem). - Если автомасштабирование включено, при превышении тарифа бакет автоматически переключается на следующий план. - Если объем данных сократится, тариф останется прежним. Вернуться на меньший тариф невозможно. #### **Тариф 2000 ГБ** На тарифе 2 ТБ автомасштабирование **недоступно**. Увеличить размер бакета можно только вручную, путем перехода на произвольную конфигурацию (через вкладку «Настройки» на странице бакета). ## Включение и выключение автомасштабирования Включить или отключить автомасштабирование для стандартного класса хранения можно при создании бакета или в настройках уже существующего бакета. ### При создании бакета Включите переключатель «Автомасштабирование при достижении лимита» в разделе «Конфигурация». ![Scr 20251127 Ouit](https://content.timeweb.com/assets/5b9ead8b-f827-42fd-b953-2bdaab2c1db6.png?width=1060&height=1054) Если вы выбрали тариф на 250 ГБ — переключатель будет недоступен. Масштабирование в этом случае работает всегда. ### Для уже созданного бакета Вы можете включить или отключить автомасштабирование в настройках бакета: 1. Перейдите в бакет. 2. Нажмите «Изменить размер хранилища». ![Scr 20251127 Pukl](https://content.timeweb.com/assets/a55ff52f-324e-4073-a4ff-ab5cb8159ee9.png?width=2192&height=1578) 3. Включите или отключите автомасштабирование. ![Scr 20251127 Purp](https://content.timeweb.com/assets/b315db6e-2346-4eb8-81a5-dfe475dc4e69.png?width=2194&height=1498) 4. Сохраните изменения нажав на кнопку «Сохранить». ## Ограничение объема бакета Для бакетов с поресурсной тарификацией можно установить максимальный объем. Это позволит не выходить за рамки бюджета при включенном автомасштабировании и контролировать лимиты, доступные разным проектам или командам. Опция доступна:  - В холодном хранилище — для всех бакетов, созданных с 27 ноября 2025 года; - В стандартном хранилище — для бакетов объемом 250 ГБ и выше, созданных с той же даты. При достижении заданного лимита бакет переключится в режим «только чтение», и загрузить в него новые данные и, соответственно, увеличить его объем и стоимость будет невозможно. Изменить лимит или отключить его совсем можно в любой момент. ### Включение лимита Чтобы включить ограничение объема бакета: 1. Перейдите в раздел «Хранилище S3» и кликните на нужный бакет. 2. На вкладке «Настройки» кликните «Настроить» в пункте «Объем бакета» 3. Активируйте опцию «Ограничение объема бакета». 4. Укажите максимальный объем бакета в гигабайтах. Лимит не может быть меньше текущего объема + 1 ГБ. 5. Нажмите «Сохранить». ### Изменение лимита Чтобы изменить установленный лимит объема бакета: 1. Перейдите в раздел «Хранилище S3» и кликните на нужный бакет. 2. На вкладке «Настройки» кликните «Настроить» в пункте «Объем бакета» 3. Задайте нужный объем бакета в гигабайтах. Лимит не может быть меньше текущего объема + 1 ГБ. 4. Нажмите «Сохранить». ### Отключение лимита Чтобы отключить ограничение объема бакета: 1. Перейдите в раздел «Хранилище S3» и кликните на нужный бакет. 2. На вкладке «Настройки» кликните «Настроить» в пункте «Объем бакета» 3. Отключите опцию «Ограничение объема бакета». 4. Нажмите «Сохранить». # Объектный менеджер Source: https://timeweb.cloud/docs/s3-storage/manage-storage/object-manager?utm_source=llms_txt&utm_medium=ai Вы можете управлять файлами в бакете прямо в браузере, используя объектный менеджер в панели управления — он доступен на странице бакета на вкладке «Объекты». ## Загрузка файлов Чтобы загрузить файл в бакет через Объектный менеджер: 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в нужную директорию. Вы также можете загрузить файл в корень бакета и затем переместить. 4. Нажмите «Загрузить файл» справа вверху. 5. Выберите файл на своем устройстве или перетащите его в окно загрузки. Файл будет загружен в бакет. При загрузках больших объектов будет использоваться [составная загрузка](https://timeweb.cloud/docs/s3-storage/supported-features/multipart-upload).  ## Получение ссылки на файл Чтобы скопировать ссылку на файл в бакете: 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом. 4. Наведите курсор на строку с файлом и кликните на иконку ссылки. ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 11 59 Am](https://content.timeweb.com/assets/eaa4e145-fea5-409e-aa24-e3a51b4f39d3.png?width=1580&height=857) Ссылка будет скопирована в буфер обмена. > [!NOTE] > Если файл размещен в приватном бакете, ссылка будет действовать один час. Вы также можете получить ссылку [на конкретную версию файла](https://timeweb.cloud/docs/s3-storage/manage-storage/object-manager#poluchenie-ssylki-na-predydushchuu-versiu). ## Просмотр файлов Вы можете просматривать файлы различных форматов в интерфейсе объектного менеджера без необходимости их скачивания. Чтобы просмотреть файл: 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом. 4. Кликните на иконку просмотра рядом с именем файла. Файл откроется в этом же окне. ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 2026 06 30 08 10](https://content.timeweb.com/assets/23d6100c-02c1-4888-a843-e01e70301923.png?width=1570&height=857) #### Поддерживаемые форматы - Изображения: `apng`, `avif`, `bmp`, `cur`, `gif`, `heic`, `heif`, `ico`, `jfif`, `jpeg`, `jpg`, `pjp`, `pjpeg`, `png`, `svg`, `tif`, `tiff`, `webp` - Документы**:** `doc`, `docm`, `docx`, `dot`, `dotm`, `dotx`, `odt`, `pdf`, `rtf` - Презентации: `odp`, `potm`, `potx`, `ppsm`, `ppsx`, `ppt`, `pptm`, `pptx` - Электронные таблицы: `csv`, `fods`, `ods`, `xls`, `xlsb`, `xlsm`, `xlsx`, `xlt`, `xltm`, `xltx` - Markdown: `markdown`, `md` - Текстовые, конфигурационные файлы и исходный код: `bash`, `c`, `cc`, `cjs`, `cpp`, `cs`, `css`, `diff`, `go`, `h`, `hpp`, `htm`, `html`, `ini`, `java`, `js`, `json`, `json5`, `jsonc`, `jsx`, `kt`, `log`, `mjs`, `php`, `proto`, `py`, `rb`, `rs`, `scss`, `sh`, `sql`, `swift`, `toml`, `ts`, `tsx`, `txt`, `xml`, `yaml`, `yml` - Видеофайлы: `m4v`, `mov`, `mp4`, `ogg`, `ogv`, `webm` ## Скачивание файлов Чтобы скачать файл из бакета: 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом. 4. Наведите курсор на строку с файлом и кликните на опцию «Скачать». ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 10 53 Am](https://content.timeweb.com/assets/b9ae5f74-7bdd-41b6-8792-67e9de0f6dae.png?width=1572&height=854) Файл будет загружен на ваше устройство. > [!NOTE] > Скачивать можно только файлы. Скачать папку через объектный менеджер невозможно. Для скачивания папок можно воспользоваться утилитами [Cyberduck](https://timeweb.cloud/docs/s3-storage/tools/cyberduck) или [S3 Browser](https://timeweb.cloud/docs/s3-storage/tools/s3-browser). ## Создание папок Вы можете создавать директории внутри вашего бакета: 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию, в которой нужно создать папку. Вы также можете создать папку в корне бакета и затем переместить ее. 4. Нажмите «Создать папку» справа вверху. 5. Введите имя папки. 6. Нажмите на галочку для сохранения. ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 10 35 Am](https://content.timeweb.com/assets/c4de7d76-7384-42be-ae3f-ef3dcbfc9ea4.png?width=1580&height=816) ## Перемещение объектов Вы можете перемещать объекты — файлы и папки — между директориями внутри бакета. 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом или папкой. - Чтобы переместить один объект, кликните на три точки справа и выберите «Переместить». ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 10 43 Am](https://content.timeweb.com/assets/86a5e245-de5a-4d64-8397-489d81326c46.png?width=1585&height=853) 1. - Чтобы переместить несколько объектов, отметьте их в списке и нажмите «Переместить» внизу. ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 10 47 Am](https://content.timeweb.com/assets/c2add302-7b47-4047-852f-209e73e6d36f.png?width=1334&height=867) 4. Перейдите в директорию, в которую нужно переместить выбранный объект или объекты. 5. Нажмите «Переместить в текущую папку». ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 10 44 Am](https://content.timeweb.com/assets/899c4b26-5a4b-476c-a18e-d41da0da65a7.png?width=1575&height=857) ## Переименование объектов Чтобы переименовать файл или папку в бакете: 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом или папкой. 4. Наведите курсор на строку с объектом и кликните на опцию «Переименовать». ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 10 50 Am](https://content.timeweb.com/assets/6efd9a0f-7a58-45b0-93db-c776d9093c53.png?width=1570&height=859) 5. Введите нужное имя и нажмите на галочку для сохранения. ## Изменение метаданных Объектный менеджер позволяет изменять системные и пользовательские [метаданные файла](https://timeweb.cloud/docs/s3-storage/supported-features/setting-headers-for-objects#dostupnye-parametry).  Опция доступна только для файлов и недоступна для директорий. Чтобы изменить метаданные: 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом. 4. Кликните на три точки справа и выберите «Изменить метаданные». ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 10 43 Am](https://content.timeweb.com/assets/86a5e245-de5a-4d64-8397-489d81326c46.png?width=1585&height=853) 5. Задайте необходимые значения. 6. Если необходимо задать пользовательские метаданные, кликните «Добавить» и заполните поля для ключа и его значения. 7.  Сохраните изменения. ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 12 16 Pm](https://content.timeweb.com/assets/00f76e2d-6073-4631-9e22-0da2bdbdf19f.png?width=1563&height=849) > [!NOTE] > Если для бакета включено [версионирование](https://timeweb.cloud/docs/s3-storage/supported-features/s3-object-versioning), изменение метаданных приводит к созданию новой версии объекта. Содержимое файла при этом не изменяется, а предыдущая версия объекта остается доступной и может быть использована для восстановления. ## Управление версиями файлов Если для бакета включено [версионирование](https://timeweb.cloud/docs/s3-storage/supported-features/s3-object-versioning), в объектном менеджере вы можете просматривать доступные версии файла, скачивать, восстанавливать и удалять предыдущие версии. Опция доступна только для файлов и недоступна для директорий. ### Просмотр истории версий 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом. 4. Кликните на три точки справа и выберите «История версий». ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 11 49 Am](https://content.timeweb.com/assets/e8dd7fb2-1e73-4ff2-bc65-5368aac3aff1.png?width=1580&height=857) Вы увидите все доступные версии файла. ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 11 51 Am](https://content.timeweb.com/assets/b4fad0d4-bf40-4fc9-a39f-afb2422deacd.png?width=1740&height=860) ### Скачивание предыдущей версии файла 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом. 4. Кликните на три точки справа и выберите «История версий». 5. Наведите курсор на нужную версию и выберите «Скачать». Файл будет загружен на ваше устройство. ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 11 53 Am (1)](https://content.timeweb.com/assets/d46f6d3a-78a6-42b0-b40a-055096d941dd.png?width=1742&height=857) ### Восстановление предыдущей версии файла 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом. 4. Кликните на три точки справа и выберите «История версий». 5. Наведите курсор на нужную версию и выберите «Восстановить». 6. Подтвердите действие. ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 11 53 Am](https://content.timeweb.com/assets/db0baca7-ebc8-4a6c-bcf6-0a6383aefd5e.png?width=1738&height=856) ### Получение ссылки на предыдущую версию 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом. 4. Кликните на три точки справа и выберите «История версий». 5. Наведите курсор на нужную версию и кликните на иконку ссылки. Ссылка будет скопирована в буфер обмена. ![3f8a487c Bfaca7c9 5e2b 413c Ae02 Bd494a0056cf 06 26 2026 12 20 Pm](https://content.timeweb.com/assets/a07d5dc0-4c9b-4901-b89d-605525fb2810.png?width=1743&height=862) ### Удаление предыдущей версии 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом. 4. Кликните на три точки справа и выберите «История версий». 5. Кликните на три точки справа от нужной версии и нажмите «Удалить». 6. Подтвердите действие. ## Удаление объектов Чтобы удалить файл или папку: 1. Перейдите в раздел [«Хранилище S3»](https://timeweb.cloud/my/storage) и кликните на нужный бакет. 2. Перейдите на вкладку «Объекты». 3. Перейдите в директорию с нужным файлом или папкой. 4. Кликните на три точки справа и выберите «Удалить». 5. Подтвердите удаление. > [!NOTE] > При удалении папки также будет удалено всё ее содержимое. # Привязка домена Source: https://timeweb.cloud/docs/s3-storage/manage-storage/link-domain?utm_source=llms_txt&utm_medium=ai Вы можете привязать к бакету свой домен — тогда не потребуется указывать имя бакета при обращении к файлам. То есть, вместо путей: ```shell https://s3.twcstorage.ru/имя_бакета/имя_файла https://s3.twcstorage.ru/имя_бакета/имя_директории/имя_файла ``` вы сможете использовать пути: ```shell https://ваш.домен.tld/имя_файла https://ваш.домен.tld/имя_директории/имя_файла ``` Обратите внимание, что при прямом обращении по домену (`https://ваш.домен.tld/`) не будет отображаться листинг файлов или какая-либо другая индексная страница. Привязка домена подразумевает, что в URL будет указан путь к конкретному файлу.  Для привязки необходимо использовать домен третьего или более уровня, например, `timeweb.mydomain.com`. > [!NOTE] > Если для домена включено проксирование через Cloudflare, отключите его перед привязкой домена. Подождите 5-10 минут, чтобы изменения вступили в силу, привяжите домен по инструкции ниже, после чего проксирование можно снова подключить. Порядок действий: 1. В настройках бакета на вкладке «Домены» кликните «Привязать домен». 2. Скопируйте значение CNAME-записи — `s3.twcstorage.ru`. 3. Укажите для домена эту CNAME-запись на стороне держателя NS-серверов (проверить его можно [здесь](https://www.whatsmydns.net/#NS/)). Если домен размещен на NS-серверах Timeweb Cloud, настройка выполняется по нашей [инструкции](https://timeweb.cloud/docs/domains/dns-records-management#cname). ![Selection 250](https://content.timeweb.com/assets/896eb13e-1ca3-4c06-ae82-4b1df9983cff.png?width=1011&height=763) 4. Подождите 15-20 минут, чтобы изменения вступили в силу. 5. Кликните «Привязать домен». ![Selection 251](https://content.timeweb.com/assets/bef534d3-4c9c-4b27-8e18-6a0c83d6748b.png?width=1015&height=760) Если оставить отмеченной галку «Выпустить SSL-сертификат», мы автоматически сгенерируем и установим на указанный домен бесплатный SSL Let's Encrypt и будем автоматически его продлевать за неделю до истечения. # Миграция данных в хранилище S3 Source: https://timeweb.cloud/docs/s3-storage/manage-storage/migration-to-s3-storage?utm_source=llms_txt&utm_medium=ai Перенести данные в наше хранилище можно как автоматически, используя функционал панели, так и с помощью сторонних инструментов, например, Rclone. В статье рассмотрим оба этих способа. ## Автоматический перенос данных Вы можете выполнить перенос данных из любого S3-совместимого хранилища в хранилище Timeweb Cloud через вашу панель управления. Также этот функционал позволяет переносить данные между бакетами внутри нашего хранилища. Для того, чтобы запустить перенос: 1. В разделе «Хранилище S3» перейдите на страницу бакета и откройте вкладку «Перенос данных». 2. Введите полные реквизиты для подключения к стороннему хранилищу. Запросить эти данные можно у вашего текущего провайдера хранилища. ![Image1](https://content.timeweb.com/assets/04ef6cb7-b8b8-4332-95d9-e2ea935f7ec3?width=890&height=1112) 3. Нажмите «Начать перенос». В зависимости от количества объектов в исходном бакете время выполнения переноса может различаться. Прогресс копирования будет отображаться на странице бакета желтым индикатором. Для миграции постоянно изменяющихся данных следует сочетать этот способ с ручной синхронизацией, описанной ниже. > [!NOTE] > Обратите внимание, что «Перенос данных» выполняет копирование данных с перезаписью существующих файлов. Чтобы избежать перезаписи, требуется синхронизация. ## Миграция данных с помощью Rclone Этот способ предпочтителен при переносе значительных объемов данных (например, если количество объектов исчисляется миллионами) и постоянно изменяющихся данных. Для миграции потребуется: 1. Созданный бакет с нужным тарифом. 2. Компьютер или виртуальный сервер для управления процессом с установленной утилитой Rclone. Процесс состоит из нескольких этапов, рассмотрим их по порядку. ### 1\. Подготовка Получите реквизиты доступа к бакету у стороннего провайдера и настройте [Rclone](https://timeweb.cloud/docs/s3-storage/tools/rclone). Добавьте в утилиту два профиля (remote) — с реквизитами стороннего провайдера и с реквизитами нашего хранилища. Далее в статье для примеров будут использоваться имена профилей `other-provider` и `tw-cloud`. ### 2\. Первоначальное копирование данных При больших объемах данных процесс может занимать значительное время, поэтому имеет смысл запускать команду для копирования в сессии `tmux` или `screen`. Это позволит вам оставить команду работающей в фоне и отключиться от сервера. Запустите новую сессию `tmux` командой: ```shell tmux new -s storage-migration ``` Запустите копирование объектов командой следующего вида: ```shell rclone copy -v -P --log-file=rclone.log --transfers=128 [other-provider]:[bucket-name] tw-cloud:[bucket-name] ``` Подставьте в команду соответствующие данные. Здесь опция `--transfers` определяет число параллельных загрузок. Чем их больше, тем быстрее будет происходит копирование, однако максимальное число загрузок ограничивается возможностями компьютера, на котором команда запускается. При возникновении ошибок уменьшите число. Отключиться от сессии `tmux` можно, набрав сочетание клавиш **Ctrl+B** + **D** (сперва надо набрать **Ctrl+B**, затем отпустить клавиши и нажать **D**). Вы увидите сообщение `[detached (from session storage-migration)]`. Подключиться к работающей сессии `tmux` можно командой: ```shell tmux a ``` ### 3\. Синхронизация данных Дождитесь окончания копирования и запустите синхронизацию: ```shell rclone sync -v -P --log-file=rclone.log --transfers=128 [other-provider]:[bucket-name] tw-cloud:[bucket-name] ``` В целевой бакет будут скопированы только изменившиеся или новые файлы. ### 4\. Остановка сервиса и финальная синхронизация Для сохранения консистентности данных потребуется временно отключить сервис. В это время надо запустить финальную синхронизацию: ```shell rclone sync -v -P --log-file=rclone.log --transfers=128 [other-provider]:[bucket-name] tw-cloud:[bucket-name] ``` Синхронизация должна быть быстрее предыдущей, если между ними прошло немного времени и новых данных не успело накопиться большое количество. ### 5\. Настройте сервис на работу с новым хранилищем После финальной синхронизации хранилищ выполните подключение сервисов к новому хранилищу. После успешного переключения сервисов на новое хранилище данные из старого хранилища можно удалить. # Описание принципов работы с S3 Source: https://timeweb.cloud/docs/s3-storage/manage-storage/s3-guide?utm_source=llms_txt&utm_medium=ai Подробный гайд по принципам работы с S3-хранилищем.  ## Реквизиты подключения Данные для подключения к S3 можно найти во вкладке «Дашборд» в [панели управления](https://timeweb.cloud/my/storage) в настройках нужного бакета. ![Selection 252](https://content.timeweb.com/assets/80cb31aa-f2a6-4581-99ab-f74b22e13a0c.png?width=1012&height=939) На текущий момент реализована поддержка `AWS Signature V2` и `AWS Signature V4`. Для подтверждения личности запрашивающего все запросы должны иметь подпись, которую можно создать с помощью `Access Key` и `Secret Key`. ## Вычисление подписи Вычисление подписи состоит из трех шагов: 1. Получение ключа подписи (`SigningKey`) 2. Получение строки для подписи (`StringToSign`) 3. Подпись строки с помощью ключа ### Получение ключа для подписи (SigningKey) Для получения подписывающего ключа закодируйте с помощью алгоритма `HMAC-SHA256` следующие данные: ```shell DateKey = HMAC-SHA256("AWS4"+"", "") DateRegionKey = HMAC-SHA256(, "") DateRegionServiceKey = HMAC-SHA256(, "") SigningKey = HMAC-SHA256(, "aws4_request") ``` Мы поддерживаем метод подписи запросов через HTTP-заголовок `Authorization`. Использование заголовка `Authorization` является наиболее частным методом аутентификации пользователя. Общий вид запроса: ```shell Authorization: AWS4-HMAC-SHA256 Credential=12345_USER/20180524/ru-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024 ``` Описание параметров запроса: | **Параметр** | **Описание** | | --- | --- | | AWS4-HMAC-SHA256 | Подпись AWS версии 4 (AWS4) и алгоритм подписи (HMAC-SHA256) | | Credential | Содержит ключ доступа и информацию о запросе в формате: ${ACCESS\_KEY}/${YYYYMMDD}/${REGION}/s3/aws4\_request | | SignedHeaders | Список в нижнем регистре имен заголовков запроса, используемых при вычислении подписи | | Signature | Подписанный хэш, состоящий из хэша тела запроса, секретного ключа и информации о запросе (каноническом запросе) | ### Получение строки для подписи Для того чтобы получить строку для подписи, необходимо сделать канонический запрос следующего вида: ``` \n \n \n \n \n ``` Где: - `HTTPMethod` — один из HTTP-методов, например `GET`, `PUT`, `HEAD` и `DELETE`; - `CanonicalURI` — URI-кодированная часть адреса, которая начинается после домена, с первым «/», например для `https://s3.twcstorage.ru/bucket/sample.txt` будет выглядеть следующим образом: `/bucket/sample.txt`; - `CanonicalQueryString` — параметры строки запроса; - `CanonicalHeaders` — список заголовков и их значений, разделенных новой строкой, в нижнем регистре и без пробелов; - `SignedHeaders` — список имен заголовков без значений, отсортированных по алфавиту, в нижнем регистре и через точку с запятой. Например: `host;x-amz-content-sha256;x-amz-date`; - `HashedPayload` — хэш `SHA256` тела запроса `Hex(SHA256Hash())`. В случае, если тела запроса нет, хэш необходимо посчитать от пустой строки `Hex(SHA256Hash(“”))`. ### Подпись строки с помощью ключа Строка для подписи представляет собой конкатенацию следующих строк: ``` "AWS4-HMAC-SHA256" + "\n" + timeStampISO8601Format + "\n" + + "\n" + Hex(SHA256Hash()) ``` Где: - `AWS4-HMAC-SHA256` — данная строка определяет алгоритм шифрования, который вы используете; - `timeStampISO8601Format` — текущее UTC-время в формате ISO 8601 (например, `20130524T000000Z`); - `Scope` — строка формата `date.Format() + "/" + + "/" + + "/aws4_request"`, например `“20130606/ru-1/s3/aws4_request”`, привязывает полученную подпись к определенной дате, региону или сервису. В случае привязки к дате, подпись будет действовать 15 минут. Подробнее о способе аутентификации через заголовок `Authorization` читайте в официальной документации [Amazon S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html). ## Поддержка методов S3 Основные методы S3, которые поддерживает хранилище Timeweb Cloud, перечислены ниже. Список всех функций и дополнительную информацию можно найти в [официальной документации](https://docs.ceph.com/en/latest/radosgw/s3/#features-support). ### Методы для работы с бакетами | **Метод** | **Описание** | | --- | --- | | GET Service (List Buckets) | Получение списка бакетов | | GET Bucket (List Objects) | Получение списка объектов в бакете | | GET Bucket Location | Получение региона бакета | | DELETE Bucket | Удаление бакета | | HEAD Bucket | Получение статуса бакета | | PUT Bucket | Создание бакета | | GET Bucket ACL | Получение списка управления доступом (access control list) | | PUT Bucket ACL | Назначение списка управления доступом | | GET Bucket Multipart Uploads | Получение списка текущих составных загрузок | | PUT Bucket Versioning (Enable / Suspend) | Включение или выключение версионирования бакета | | GET Bucket Versioning | Получение статуса версионирования (метод не вернет статус, если состояние версионирования не было ранее установлено методом PUT) | | PUT Notification | Включение уведомлений о событиях для бакета | | DELETE Notification | Удаление уведомлений о событиях для бакета | | GET Notification | Получения списка уведомлений для бакета | | GET Bucket Lifecycle | Получение конфигурации жизненного цикла бакета | | DELETE Bucket Lifecycle | Удаление конфигурации жизненного цикла бакета | | PUT Bucket Tagging | Добавление меток бакету | | GET Bucket Tagging | Получение меток бакета | | DELETE Bucket Tagging | Удаление меток бакета | | GET Bucket Policy | Получение политики доступа для бакета | | PUT Bucket Policy | Применение политики доступа для бакета | | DELETE Bucket Policy | Удаление политики доступа для бакета | ### Методы для работы с объектами | **Метод** | **Описание** | | --- | --- | | PUT Object | Создание объекта | | PUT Object — Copy | Копирование объекта | | DELETE Object | Удаление объекта | | GET Object | Получение объекта | | HEAD Object | Получение метаданных объекта | | GET Object ACL | Получение списка управления доступом для объекта | | PUT Object ACL | Назначение списка управления доступом для объекта | | POST Multipart Upload | Запуск составной загрузки | | PUT Multipart Upload Part | Загрузка части объекта | | GET Multipart Upload Parts | Получение загруженных частей составной загрузки | | POST Multipart Upload (Complete) | Завершение составной загрузки | | DELETE Multipart Upload | Прерывание составной загрузки | | PUT Object Tagging | Добавление меток для объекта | | GET Object Tagging | Получение меток объекта | | DELETE Object Tagging | Удаление меток объекта | ## Примеры использования AWS SDK для разных языков Примеры использования SDK вы можете найти в разделе «[SDK для S3](https://timeweb.cloud/docs/s3-storage/sdk)» и в репозиториях GitHub: - [Node.js](https://github.com/timeweb-cloud/s3-examples/tree/master/nodejs)  - [Python3](https://github.com/timeweb-cloud/s3-examples/tree/master/python3) - [PHP](https://github.com/timeweb-cloud/s3-examples/tree/master/php) # Инструменты Source: https://timeweb.cloud/docs/s3-storage/tools?utm_source=llms_txt&utm_medium=ai Для работы с объектным хранилищем S3 существует множество инструментов, которые позволяют удобно управлять данными: **Консольные утилиты:** - [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli) - [S3cmd](https://timeweb.cloud/docs/s3-storage/tools/s3cmd) **Десктопные приложения:** - [Cyberduck](https://timeweb.cloud/docs/s3-storage/tools/cyberduck) - [S3 Browser](https://timeweb.cloud/docs/s3-storage/tools/s3-browser) **FUSE-утилиты:** - [s3fs](https://timeweb.cloud/docs/s3-storage/tools/s3fs) - [Rclone](https://timeweb.cloud/docs/s3-storage/tools/rclone) Эти инструменты предлагают разные подходы к управлению S3, позволяя выбрать наиболее удобный вариант для ваших задач. # AWS CLI Source: https://timeweb.cloud/docs/s3-storage/tools/aws-cli?utm_source=llms_txt&utm_medium=ai AWS CLI — это интерфейс командной строки для работы с сервисами Amazon. В интерфейсе доступен набор команд для управления файлами в облачном хранилище. ## Установка На текущий момент для полноценной работы с кластером необходимо использовать AWS CLI первой версии. Для установки AWS CLI воспользуйтесь `pipx`: ```shell pipx install 'awscli==1.34.30' ``` После установки проверьте версию AWS CLI с помощью команды: ```shell aws --version ``` ## Настройка Для настройки AWS для работы с нашим объектным хранилищем S3 используйте команду: ```shell aws configure ``` Появится интерактивная строка с запросом реквизитов для подключения. Заполните их следующим образом, подставив необходимые значения из настроек бакета в вашей панели управления: ```shell AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: ru-1 Default output format [None]: json ``` Будет создана скрытая директория `.aws` с файлами `config` и `credentials`, которые содержат настройки AWS и ключи для авторизации соответственно. ## Работа с файлами Рассмотрим, как выполнять основные операции с объектами в бакете. ### **Получение списка файлов в бакете** Чтобы получить список файлов, используйте `ls`: ```shell aws s3 ls s3://<имя бакета> --endpoint-url https://s3.twcstorage.ru ``` ### **Загрузка локального файла в бакет** Для загрузки файлов используется `cp`. В примере ниже загружается файл `text.txt`: ```shell aws s3 cp test.txt s3://<имя бакета> --endpoint-url https://s3.twcstorage.ru ``` ### **Удаление файла в бакете** Для удаления файла используйте команду `rm`. В примере ниже удаляем файл `text.txt`: ```shell aws s3 rm s3://<имя бакета>/test.txt --endpoint-url https://s3.twcstorage.ru ``` ### **Синхронизация файлов** Для синхронизации файлов между локальной директорией (в примере это текущая директория — `.`) и бакетом используется `sync`: ```shell aws s3 sync . s3://<имя бакета> --endpoint-url https://s3.twcstorage.ru ``` Подробную информацию по этим и другим командам можно найти в [документации AWS](https://docs.aws.amazon.com/cli/latest/reference/s3/). ## Составная загрузка Для выполнения multipart-загрузки с помощью AWS CLI необходимо использовать команду `aws s3api`. Этот процесс предполагает создание и завершение multipart-загрузки в несколько шагов. ### Предварительная подготовка Перед выполнением multipart-загрузки загружаемый файл необходимо разбить на части. Это можно сделать при помощи утилиты `split`: ```shell split -b <размер_части> <путь_к_файлу> <префикс_имени_части> ``` - `<размер_части>` — размер каждой части. Например, для 5 МБ укажите `5M`. - `<путь_к_файлу>` — путь к исходному файлу. - `<префикс_имени_части>` — префикс для имен частей. Например, если указать part, части будут называться `partaa`, `partab` и так далее. ### Шаги выполнения multipart-загрузки **Инициализация загрузки** Сначала инициализируйте multipart загрузку, чтобы получить `UploadId`, необходимый для последующих операций: ```shell aws s3api create-multipart-upload --bucket <имя-бакета> --endpoint-url https://s3.twcstorage.ru --key <имя_файла_в_бакете> ``` Ответ команды будет содержать `UploadId`. Сохраните его, так как он понадобится для загрузки частей и завершения процесса. **Загрузка частей** Используйте команду `upload-part`, чтобы загрузить части файла. Для этого нужно указать `UploadId`, `PartNumber`, а также файл или часть файла для загрузки. Пример загрузки первой части: ```shell aws s3api upload-part --bucket <имя-бакета> --endpoint-url https://s3.twcstorage.ru --key <имя_файла_в_бакете> --part-number 1 --body <путь/к/первой_части_файла> --upload-id ``` Повторите эту команду для каждой части файла, увеличивая номер части (`--part-number`) и изменяя `--body` для каждой последующей загрузки. **Завершение загрузки** После загрузки всех частей выполните команду `complete-multipart-upload`, передав `UploadId` и информацию о загруженных частях. Сначала сформируйте JSON-файл с частями загрузки, указывая `ETag` и номер части: ```js { "Parts": [ { "ETag": "", "PartNumber": 1 }, { "ETag": "", "PartNumber": 2 } ] } ``` Затем завершите загрузку: ```shell aws s3api complete-multipart-upload --bucket <имя-бакета> --endpoint-url https://s3.twcstorage.ru --key <имя_файла_в_бакете> --upload-id --multipart-upload file://<путь/к/JSON-файлу> ``` #### Отмена загрузки Если вы хотите отменить загрузку, выполните команду: ```shell aws s3api abort-multipart-upload --bucket <имя-бакета> --endpoint-url https://s3.twcstorage.ru --key <имя_файла_в_бакете> --upload-id ``` #### Список частей составной загрузки Чтобы получить список частей во время загрузки, можно использовать команду `list-parts`: ```shell aws s3api list-parts --bucket <имя-бакета> --endpoint-url https://s3.twcstorage.ru --key <имя_файла_в_бакете> --upload-id ``` ## Подписанные URL (Presigned URL) Подписанный URL (Presigned URL) позволяет создать временную ссылку для доступа к приватному объекту в S3. Такая ссылка позволяет получить доступ к объекту без авторизации, однако, в отличие от изменения прав доступа (ACL) объекта, presigned URL всегда имеет ограниченный срок действия (максимум — 7 дней). ### Генерация presigned URL  Для генерации временной ссылки на объект в S3 используйте команду: ```shell aws s3 presign s3://<имя_бакета>/<путь_к_файлу> --endpoint-url https://s3.twcstorage.ru ``` Дополнительно можно указать срок действия ссылки с помощью флага `--expires-in`, который задает время в секундах (по умолчанию 3600 секунд): ```shell aws s3 presign s3://<имя_бакета>/<путь_к_файлу> --expires-in <время_в_секундах> --endpoint-url https://s3.twcstorage.ru ``` ### Принцип работы Presigned URL При создании presigned URL используется стандартный механизм авторизации AWS. Разница заключается в том, что значения, которые обычно передаются в заголовках для авторизации, в presigned URL добавляются как параметры URL. Это позволяет сторонним пользователям открыть ссылку в браузере или другом клиенте без дополнительных настроек. Например, ссылка может выглядеть так: ```shell https://s3.twcstorage.ru/841b4a72-presigned/README.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=4AP1MJKIJFLUJN9ABQZ1%2F20241113%2Fru-1%2Fs3%2Faws4_request&X-Amz-Date=20241113T104406Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=737a677e78f88ab989b1c9b8edb454f70ea8da42e6b79774e68aa0fc6a52cb81 ``` # Cyberduck Source: https://timeweb.cloud/docs/s3-storage/tools/cyberduck?utm_source=llms_txt&utm_medium=ai Cyberduck — это клиент для работы с файлами в удаленных хранилищах. Приложение поддерживает Amazon S3 и другие протоколы. Для подключения к хранилищу Timeweb Cloud используется профиль с протоколом Amazon S3. Графический клиент доступен для Windows и macOS. Для Linux можно использовать консольный клиент `duck`. ## Установка графической версии и подключение к S3 Процесс установки и подключения идентичен для Windows и macOS. 1. [Скачайте Cyberduck](https://cyberduck.io/download/) с официального сайта и установите приложение. 2. В панели управления откройте нужный S3-бакет и перейдите на вкладку «Дашборд». 3. Скачайте профиль Cyberduck для подключения к Timeweb Cloud. ![Скачивание профиля в панели управления](https://content.timeweb.com/assets/3a767d59-0073-4bd7-9fdc-ea114bd20e2f.png?width=2142&height=1812) 4. Дважды кликните по файлу `timeweb-cloud.cyberduckprofile`. Cyberduck запустится и добавит профиль `s3.twcstorage.ru`. 5. Откройте раздел «Закладки» и выберите `s3.twcstorage.ru`. Windows ![2026 08 17 18.04.46](https://content.timeweb.com/assets/f14b04fb-ea2b-4ef2-9c66-b2676bea07e2.jpg?width=1023&height=611) _Панель закладок в Windows-версии [Cyberduck](https://cyberduck.io)_ macOS ![Scr 20260817 Pvpp](https://content.timeweb.com/assets/235d2a46-272e-43e5-92fa-72a5375e998f.png?width=2280&height=1080) _Панель закладок в macOS-версии [Cyberduck](https://cyberduck.io)_ 6. Укажите данные Access и Secret key. Их можно скопировать на вкладке «Дашборд» в панели управления бакетом. ![Access и Secret Key](https://content.timeweb.com/assets/dfa7d913-e770-4050-9d6a-929f2a190b80.png?width=2150&height=1822) 7. Нажмите «Подключиться». После успешного подключения Cyberduck отобразит бакеты, доступные для указанного пользователя. ### Отображение скрытых файлов По умолчанию Cyberduck не отображает скрытые файлы. Чтобы показать их, выберите «Вид» → «Показать скрытые файлы». ## Консольная версия Cyberduck Консольный клиент `duck` стоит использовать, если графический интерфейс недоступен или операции с файлами нужно выполнять из скриптов. Для повседневной работы в Windows и macOS достаточно графического клиента. ### Установка Способ установки `duck` зависит от операционной системы. Windows Установите `duck` с помощью [Chocolatey](https://chocolatey.org/): ```bash choco install duck ``` Ubuntu Добавьте репозиторий Cyberduck и установите `duck`: ```bash echo -e "deb https://s3.amazonaws.com/repo.deb.cyberduck.io stable main" | sudo tee /etc/apt/sources.list.d/cyberduck.list > /dev/null sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FE7097963FEFBE72 sudo apt-get update sudo apt-get install duck ``` macOS Установите `duck` с помощью [Homebrew](https://brew.sh/): ```bash brew install duck ``` Актуальные способы установки для поддерживаемых операционных систем перечислены в [документации Cyberduck CLI](https://docs.cyberduck.io/cli/#installation). ### Подключение Для подключения `duck` к S3-хранилищу используется профиль Timeweb Cloud. Windows Скачайте профиль `timeweb-cloud.cyberduckprofile` на вкладке «Дашборд» в панели управления бакетом. Затем выполните: ```bash duck --profile "C:\путь\к\timeweb-cloud.cyberduckprofile" --username "" --list timeweb-cloud:/ ``` Ubuntu Создайте директорию для профилей, скачайте профиль с помощью `wget` и подключитесь к хранилищу: ```bash mkdir -p ~/.duck/profiles wget -O ~/.duck/profiles/timeweb-cloud.cyberduckprofile https://st.timeweb.com/cloud-static/timeweb-cloud.cyberduckprofile duck --profile ~/.duck/profiles/timeweb-cloud.cyberduckprofile \ --username "" \ --list timeweb-cloud:/ ``` macOS Создайте директорию для профилей, скачайте профиль с помощью `wget` и подключитесь к хранилищу: ```bash mkdir -p ~/.duck/profiles wget -O ~/.duck/profiles/timeweb-cloud.cyberduckprofile https://st.timeweb.com/cloud-static/timeweb-cloud.cyberduckprofile duck --profile ~/.duck/profiles/timeweb-cloud.cyberduckprofile \ --username "" \ --list timeweb-cloud:/ ``` Где `` — S3 Access Key пользователя хранилища. Ключ можно скопировать на вкладке «Дашборд» в панели управления бакетом. В команде укажите ключ без угловых скобок. При первом подключении `duck` запросит Secret Key, который можно найти во вкладке «Дашборд» бакета. Чтобы секретный ключ не сохранился в настройках клиента, добавьте параметр `--nokeychain`. На Linux сохраненные учетные данные хранятся в незашифрованном виде. ![Scr 20260817 Pmlp](https://content.timeweb.com/assets/a8fea2b4-32a3-49b0-86bb-3ebaacdb6614.png?width=2152&height=966) _Подключение к консольной версии [duck](https://duck.sh/)_ ### Основные команды Получить список объектов в бакете: ```bash duck --profile "/путь/к/timeweb-cloud.cyberduckprofile" \ --username "" \ --list timeweb-cloud:/<имя бакета>/ ``` Загрузить локальный файл в бакет: ```bash duck --profile "/путь/к/timeweb-cloud.cyberduckprofile" \ --username "" \ --upload timeweb-cloud:/<имя бакета>/<путь>/ "/путь/к/файлу" ``` Скачать объект в локальную директорию: ```bash duck --profile "/путь/к/timeweb-cloud.cyberduckprofile" \ --username "" \ --download timeweb-cloud:/<имя бакета>/<путь к объекту> "/локальная/директория/" ``` Синхронизировать директорию в бакете с локальной директорией: ```bash duck --profile "/путь/к/timeweb-cloud.cyberduckprofile" \ --username "" \ --synchronize timeweb-cloud:/<имя бакета>/<путь>/ "/локальная/директория/" ``` Во всех командах для авторизации используются S3 Access Key и S3 Secret Key. Полный список параметров можно получить с помощью команды `duck --help` или найти в [документации Cyberduck CLI](https://docs.cyberduck.io/cli/). # Rclone Source: https://timeweb.cloud/docs/s3-storage/tools/rclone?utm_source=llms_txt&utm_medium=ai Rclone — утилита командной строки для синхронизации файлов и каталогов между локальной машиной и облачным хранилищем. ## Установка rclone Дистрибутивы программы для разных архитектур и ОС можно скачать с [сайта разработчика](https://rclone.org/downloads/). Инструкции по установке также есть на [официальном сайте](https://rclone.org/install/). Для Windows достаточно скачать и запустить `rclone.exe` через [командную строку](https://timeweb.cloud/docs/general/komandnaya-stroka-v-raznyh-os). ## Настройка rclone Для настройки `rclone` для работы с нашим объектным хранилищем S3 необходимо создать в каталоге `.config/rclone` в корне домашней директории файл `rclone.conf` со следующим содержимым: ```shell [timeweb-cloud] type = s3 provider = Other env_auth = false access_key_id = secret_access_key = endpoint = https://s3.twcstorage.ru ``` Значения S3 Access Key и S3 Secret Access Key можно найти во вкладке «Дашборд» в панели управления бакетом. ![Selection 252](https://content.timeweb.com/assets/741bcb75-7c3d-4c57-ad37-a4e65df86757.png?width=1012&height=939) Либо можно воспользоваться мастером настройки, который сформирует аналогичный файл. Для запуска мастера настройки в Linux и macOS выполните команду: ```shell rclone config ``` Для запуска в Windows используйте: ```shell .\rclone.exe config ``` Пример выполнения настройки через мастер: Нажмите `n` для создания новой конфигурации. Укажите имя конфигурации, по которому в дальнейшем будет выполняться обращение к кластеру: ```shell No remotes found - make a new one n) New remote s) Set configuration password q) Quit config n/s/q> n name> timeweb-cloud ``` Укажите номер, соответствующий значению «Amazon S3 Compliant Storage Provider». В данном случае — 4: ```shell Type of storage to configure. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / 1Fichier \ "fichier" 2 / Alias for an existing remote \ "alias" 3 / Amazon Drive \ "amazon cloud drive" 4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc) \ "s3" ... 30 / Yandex Disk \ "yandex" 31 / http Connection \ "http" 32 / premiumize.me \ "premiumizeme" Storage> 4 ``` Выберите номер, соответствующий «Any other S3 compatible provider». В данном случае — 13: ```shell Choose your S3 provider. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Amazon Web Services (AWS) S3 \ "AWS" 2 / Alibaba Cloud Object Storage System (OSS) formerly Aliyun \ "Alibaba" 3 / Ceph Object Storage \ "Ceph" ... 11 / Tencent Cloud Object Storage (COS) \ "TencentCOS" 12 / Wasabi Object Storage \ "Wasabi" 13 / Any other S3 compatible provider \ "Other" provider> 13 ``` Укажите значение `false` для ручной настройки данных подключения: ```shell Only applies if access_key_id and secret_access_key is blank. Enter a boolean value (true or false). Press Enter for the default ("false"). Choose a number from below, or type in your own value 1 / Enter AWS credentials in the next step \ "false" 2 / Get AWS credentials from the environment (env vars or IAM) \ "true" env_auth> false ``` Вместо `` укажите значение S3 Access Key из панели управления: ```shell AWS Access Key ID. Leave blank for anonymous access or runtime credentials. Enter a string value. Press Enter for the default (""). access_key_id> ``` Вместо `` укажите значение S3 Secret Access Key из панели управления: ```shell AWS Secret Access Key (password) Leave blank for anonymous access or runtime credentials. Enter a string value. Press Enter for the default (""). secret_access_key> ``` Укажите `ru-1`: ```shell Region to connect to. Leave blank if you are using an S3 clone and you don't have a region. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Use this if unsure. Will use v4 signatures and an empty region. \ "" 2 / Use this only if v4 signatures don't work, eg pre Jewel/v10 CEPH. \ "other-v2-signature" region> ru-1 ``` В качестве эндпоинта укажите `https://s3.twcstorage.ru`: ```shell Endpoint for S3 API. Required when using an S3 clone. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value endpoint> https://s3.twcstorage.ru ``` Нажмите «Enter»: ```shell Location constraint - must be set to match the Region. Leave blank if not sure. Used when creating buckets only. Enter a string value. Press Enter for the default (""). location_constraint> ``` Нажмите «Enter»: ```shell Canned ACL used when creating buckets and storing or copying objects. This ACL is used for creating objects and if bucket_acl isn't set, for creating buckets too. For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl Note that this ACL is applied when server side copying objects as S3 doesn't copy the ACL from the source but rather writes a fresh one. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Owner gets FULL_CONTROL. No one else has access rights (default). \ "private" 2 / Owner gets FULL_CONTROL. The AllUsers group gets READ access. \ "public-read" / Owner gets FULL_CONTROL. The AllUsers group gets READ and WRITE access. 3 | Granting this on a bucket is generally not recommended. \ "public-read-write" 4 / Owner gets FULL_CONTROL. The AuthenticatedUsers group gets READ access. \ "authenticated-read" / Object owner gets FULL_CONTROL. Bucket owner gets READ access. 5 | If you specify this canned ACL when creating a bucket, Amazon S3 ignores it. \ "bucket-owner-read" / Both the object owner and the bucket owner get FULL_CONTROL over the object. 6 | If you specify this canned ACL when creating a bucket, Amazon S3 ignores it. \ "bucket-owner-full-control" acl> ``` Укажите `n`, чтобы не редактировать конфигурацию: ```shell Edit advanced config? (y/n) y) Yes n) No y/n> n ``` Проверьте конфигурацию и подтвердите, что все хорошо, нажав `y`: ```shell Remote config -------------------- [timeweb-cloud] provider = Other env_auth = false access_key_id = secret_access_key = region = ru-1 endpoint = https://s3.twcstorage.ru -------------------- y) Yes this is OK e) Edit this remote d) Delete this remote y/e/d> y ``` Нажмите `q` для выхода из мастера настройки: ```shell Current remotes: Name Type ==== ==== timeweb-cloud s3 e) Edit existing remote n) New remote d) Delete remote r) Rename remote c) Copy remote s) Set configuration password q) Quit config e/n/d/r/c/s/q> q ``` > [!NOTE] > Если при настройке через мастер возникнет ошибка, попробуйте выполнить настройку заново, но без указания региона (ru-1). ## Команды для работы с хранилищем Полный список поддерживаемых команд смотрите в [документации rclone](https://rclone.org/commands/). В качестве хоста указывается имя хранилища, заданное в конфигурационном файле `rclone.conf`. Так, [в нашем примере](https://timeweb.cloud/docs/s3-storage/tools/rclone#nastrojka-rclone) в начале статьи было настроено хранилище с именем `timeweb-cloud`. ### Просмотр списка бакетов ```shell rclone lsd <имя хоста>: ``` Например: ```shell rclone lsd timeweb-cloud:        -1 2021-12-10 11:34:51     -1 1d65c254-17ab-4b22-b262-1111fc006937       -1 2022-01-13 10:05:47     -1 3b24945b-d373-4713-89ec-3dece346c7b3        -1 2022-01-14 12:31:36     -1 bbf30ad7-8872-40fc-8d41-54537d894b7f ``` ### Получение списка файлов в бакете ```shell rclone ls <имя хоста>:<имя бакета> ``` Например: ```shell rclone ls timeweb-cloud:3b24945b-d373-4713-89ec-3dece346c7b3     13 test.txt     13 test1.txt ``` ### **Загрузка файла в бакет** ```shell rclone -P copy <имя файла> <имя хоста>:<имя бакета> ``` Например: ```shell rclone -P copy test5.txt timeweb-cloud:3b24945b-d373-4713-89ec-3dece346c7b3 ``` ### Удаление файла в бакете ```shell rclone delete <имя хоста>:<имя бакета>/<имя файла> ``` Например: ```shell rclone delete timeweb-cloud:3b24945b-d373-4713-89ec-3dece346c7b3/test5.txt ``` ### Копирование файлов из бакета в бакет ```shell rclone copyto -vP --log-file=rclone_<имя отдающего бакета>.log --transfers=256 <имя отдающего хоста>:<имя отдающего бакета> <имя принимающего хоста>:<имя принимающего бакета> ``` ### Синхронизация файлов между бакетом и локальной директорией ```shell rclone -P sync timeweb-cloud:3b24945b-d373-4713-89ec-3dece346c7b3 /root/test ``` Для синхронизации в обратном направлении поменяйте аргументы местами. # S3 Browser Source: https://timeweb.cloud/docs/s3-storage/tools/s3-browser?utm_source=llms_txt&utm_medium=ai **S3 Browser** — это графический интерфейс для работы с S3-совместимыми хранилищами для Windows. Работа с утилитой напоминает работу с FTP-клиентами. Скачать актуальную версию S3 Browser можно [с сайта разработчика](https://s3browser.com/). ## Настройка подключения 1. Запустите мастер настройки подключения из меню **Accounts → Add new account.** 2. В открывшемся окне заполните реквизиты подключения: - - **Display name** — отображаемое имя аккаунта, укажите любое на свое усмотрение. - **Account type** — выберите «S3 Compatible Storage». - **REST Endpoint** — `s3.twcstorage.ru`. - **Access Key ID** — S3 Access Key (на скриншоте указано «id» для примера). - **Secret Access Key** — S3 Secret Access Key. Его, как и S3 Access Key, можно скопировать из панели управления на странице бакета. ![Image1](https://content.timeweb.com/assets/d06d4efb-4db9-44fe-b354-a07b02fde5ff?width=710&height=771) _Добавление нового подключения в интерфейсе [S3 Browser](https://s3browser.com/)_ 3. Кликните на **Advanced S3-compatible storage settings** внизу окна. 4. Укажите в открывшемся окне следующие настройки: ![Image2](https://content.timeweb.com/assets/f966d1c5-d86f-4f5c-abba-3273571828c5?width=632&height=605) _Настройка параметров хранилища в интерфейсе [S3 Browser](https://s3browser.com/)_ Остальные настройки можно оставить без изменений. 5. Нажмите кнопку **Close** и завершите добавление аккаунта кнопкой **Add new account**. После подключения отобразятся все существующие на аккаунте бакеты. ## Работа с S3 Browser Теперь рассмотрим основные операции при работе с хранилищем через S3 Browser. ### Создание нового бакета Для создания нового бакета нажмите на кнопку «New bucket». В открывшемся окне укажите имя нового бакета и нажмите на «Create new bucket». ![Selection 030](https://content.timeweb.com/assets/ef82370c-6ec7-4547-9865-1b0cb4751ba4.png?width=1401&height=879) _Создание нового бакета в интерфейсе [S3 Browser](https://s3browser.com/)_ ### Загрузка объектов Для загрузки файлов или директорий нажмите на кнопку «Upload» и выберите необходимый вариант. Также поддерживается загрузка файлов при помощи «drag&drop» — файлы можно просто перенести с рабочего стола. ![Selection 031](https://content.timeweb.com/assets/35acee34-9b5c-4055-844c-65c6caf0101e.png?width=1405&height=880) _Опция загрузки объектов в интерфейсе [S3 Browser](https://s3browser.com/)_ ### Скачивание объектов Для скачивания файлов или директорий выберите необходимый файл и нажмите на кнопку «Download». После этого выберите папку, в которую необходимо сохранить скачанный файл или директорию. Задача на скачивание запустится автоматически. Обратите внимание, что скачивание больших файлов выполняется по частям, и после завершения файл собирается на устройстве из скачанных фрагментов. ![Selection 032](https://content.timeweb.com/assets/14871be2-98f1-4b63-9870-2f80b626b794.png?width=1399&height=878) _Скачивание объектов в интерфейсе [S3 Browser](https://s3browser.com/)_ ### Удаление объектов Для удаления файлов или директорий выберите необходимый файл или директорию и нажмите на кнопку «Delete». Подтвердите удаление во всплывающем окне. ![Selection 033](https://content.timeweb.com/assets/e14b7171-28e5-44bc-af23-2ecb5b6d6d40.png?width=1402&height=878) _Удаление объектов в интерфейсе [S3 Browser](https://s3browser.com/)_ ### Управление прерванными составными (multipart) загрузками В S3 предусмотрена загрузка файлов по частям. Этот метод разбивает файл на несколько частей (чанков) и загружает их параллельно, что ускоряет процесс передачи больших файлов и повышает устойчивость к сбоям. При прерывании составной загрузки фрагменты файлов не отображаются в бакете, но продолжают занимать дисковое пространство на сервере. Чтобы увидеть прерванные загрузки, нажмите на «Tools» → «Uncompleted Multipart Uploads». ![Selection 034](https://content.timeweb.com/assets/49787931-c964-4922-81b3-192bf6f2b766.png?width=1400&height=878) _Меню «Tools» в интерфейсе [S3 Browser](https://s3browser.com/)_ В открывшемся окне вы сможете увидеть все незавершенные загрузки. Для их удаления выберите нужную загрузку и нажмите на «Abort Selected». ![Selection 035](https://content.timeweb.com/assets/3086237f-f44f-44b5-8813-7debebb59cc1.png?width=1398&height=878) _Управление прерванными составными загрузками в интерфейсе [S3 Browser](https://s3browser.com/)_ После этого загрузка перестанет занимать пространство бакета. # S3cmd Source: https://timeweb.cloud/docs/s3-storage/tools/s3cmd?utm_source=llms_txt&utm_medium=ai S3cmd — это клиент S3 API с интерфейсом командной строки, используемый для работы с S3-совместимыми хранилищами. ## Установка Для установки S3cmd воспользуйтесь командами в зависимости от вашей ОС: Ubuntu ```shell sudo apt install s3cmd -y ``` CentOS ```shell sudo dnf install s3cmd -y ``` Arch Linux ```shell sudo pacman -S s3cmd ``` macOS Для установки S3cmd воспользуйтесь [Homebrew](https://brew.sh/): ``` brew install s3cmd ``` Windows Откройте PowerShell от имени администратора и выполните: ```shell choco install s3cmd -y ``` Если Chocolatey не установлен, установите его, следуя [официальной инструкции](https://chocolatey.org/install). ## Настройка Для настройки `S3cmd` для работы с нашим объектным хранилищем S3 необходимо создать в корне домашней директории файл `.s3cfg` со следующим содержимым: ```shell [default] access_key = secret_key = bucket_location = ru-1 host_base = s3.twcstorage.ru host_bucket = s3.twcstorage.ru use_https = True ``` Значения S3 Access Key и S3 Secret Access Key можно найти во вкладке «Дашборд» в панели управления бакетом. ![Selection 252](https://content.timeweb.com/assets/cd3e5188-0542-413a-a806-c63dfc857a41.png?width=1012&height=939) ## Работа с файлами ### **Получение списка файлов в бакете** Чтобы получить список файлов, используйте `ls`: ```shell s3cmd ls s3://<имя бакета> ``` ### **Загрузка локального файла в бакет** Для загрузки файлов используется `put`. В примере ниже загружается файл text.txt: ```shell s3cmd put test.txt s3://<имя бакета> ``` ### Составная (multipart) загрузка Клиент `s3cmd` поддерживает составную загрузку, которая автоматически активируется при загрузке файлов размером более 15 МБ. Этот метод разбивает файл на несколько частей (чанков) и загружает их параллельно, что ускоряет процесс передачи больших файлов и повышает устойчивость к сбоям. При необходимости составную загрузку можно отключить с помощью опции `--disable-multipart`. Для изменения размера отдельных фрагментов (чанков) используйте опцию `--multipart-chunk-size-mb=SIZE`, где SIZE — размер каждого фрагмента в мегабайтах. По умолчанию размер фрагмента составляет 15 МБ, минимально допустимый размер — 5 МБ, максимально допустимый — 5 ГБ. Например, чтобы установить размер фрагмента на 10 МБ, используйте следующую команду: ```shell s3cmd put <имя_файла> --multipart-chunk-size-mb=10 s3://<имя_бакета> ``` Эта настройка позволяет оптимизировать загрузку больших файлов в зависимости от пропускной способности сети и требований к производительности. ### **Удаление файла в бакете** Для удаления файла используйте команду `del`. В примере ниже удаляем файл text.txt: ```shell s3cmd del s3://<имя бакета>/test.txt ``` ### Управление прерванными составными (multipart) загрузками При прерывании составной загрузки фрагменты файлов не отображаются в бакете, но продолжают занимать дисковое пространство на сервере. Чтобы просмотреть список прерванных загрузок и узнать, какие фрагменты занимают место, используйте команду: ```shell s3cmd multipart s3://<имя_бакета> ``` Эта команда выводит дату и время начала загрузки, путь файла и уникальный идентификатор загрузки (`ID`). Для удаления фрагментов неудачных загрузок используйте следующую команду: ```shell s3cmd abortmp s3://<имя_бакета>/<имя_файла> ``` ### **Скачивание файла из бакета** Для загрузки файла из бакета на локальное устройство используйте `get`: ```shell s3cmd get s3://<имя бакета>/test.txt ``` ### **Синхронизация файлов** Для синхронизации файлов между локальной директорией (в примере это текущая директория — `.`) и бакетом используется `sync`: ```shell s3cmd sync . s3://<имя бакета> ``` Полный список команд и дополнительную информацию можно найти в [документации S3cmd](https://s3tools.org/usage). # s3fs Source: https://timeweb.cloud/docs/s3-storage/tools/s3fs?utm_source=llms_txt&utm_medium=ai `s3fs` — утилита для Linux и macOS, с помощью которой можно монтировать бакеты облачного хранилища через FUSE. > [!NOTE] > Мы не рекомендуем использовать s3fs без крайней необходимости из-за проблем с производительностью, надежностью и совместимостью. Рассмотрите более надежные альтернативы, такие как AWS SDK или специализированные утилиты для работы с S3 — например, [s3cmd](https://timeweb.cloud/docs/s3-storage/tools/s3cmd), [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli) или [S3 Browser](https://timeweb.cloud/docs/s3-storage/tools/s3-browser). ## Установка Для установки `s3fs` на операционную систему **Ubuntu** используйте команду: ```shell sudo apt install s3fs ``` Рекомендуем использовать `s3fs` не ниже версии 1.90. Актуальную версию утилиты для Ubuntu можно собрать их исходного кода с помощью следующих команд: ```shell apt install build-essential automake libcurl4-openssl-dev libxml2-dev pkg-config libssl-dev libfuse-dev git git clone https://github.com/s3fs-fuse/s3fs-fuse.git cd s3fs-fuse ./autogen.sh ./configure make make install ``` Дополнительную информацию и инструкции по установке на другие ОС можно найти в [документации s3fs](https://github.com/s3fs-fuse/s3fs-fuse#installation). ## Настройка Для настройки `s3fs` для работы с нашим объектным хранилищем S3 сохраните ключ доступа и секретный ключ в файле `~/.passwd-s3fs` с помощью команды: ```shell echo : >  ~/.passwd-s3fs ``` Значения S3 Access Key и S3 Secret Access Key можно найти во вкладке «Дашборд» в панели управления бакетом. Ограничьте доступ к файлу `~/.passwd-s3fs`: ```shell chmod 600  ~/.passwd-s3fs ``` ## Монтирование бакета Для монтирования бакета выберите директорию монтирования (в примере — `/mnt/s3/`) и выполните команду ниже, указав корректные имя бакета и путь к директории: ```shell s3fs <имя бакета> /mnt/s3/ -o use_path_request_style -o url=https://s3.twcstorage.ru -o passwd_file=~/.passwd-s3fs ``` Также можно настроить настроить монтирование бакета при запуске системы. Для этого добавьте в файл `/etc/fstab` строку вида: ```shell s3fs#<имя бакета> /mnt/s3 fuse _netdev,allow_other,use_path_request_style,url=https://s3.twcstorage.ru,passwd_file=/root/.passwd-s3fs 0 0 ``` Дополнительную информацию по работе с `s3fs`, описание всех параметров, а также рекомендации по решению возникающих проблем можно найти в [документации проекта](https://github.com/s3fs-fuse/s3fs-fuse/wiki/Fuse-Over-Amazon), в том числе в разделе [FAQ](https://github.com/s3fs-fuse/s3fs-fuse/wiki/FAQ). # Поддерживаемые возможности Source: https://timeweb.cloud/docs/s3-storage/supported-features?utm_source=llms_txt&utm_medium=ai S3-хранилища поддерживают различные функции для удобного управления данными и настройками доступа. Далее описаны поддерживаемые возможности: - [Настройка CORS для доступа к объектам](https://timeweb.cloud/docs/s3-storage/supported-features/cors-setup) - [S3 Настройка жизненного цикла объектов в S3](https://timeweb.cloud/docs/s3-storage/supported-features/object-lifecycle) - [Версионирование объектов в S3](https://timeweb.cloud/docs/s3-storage/supported-features/s3-object-versioning) - [Object Lock в S3](https://timeweb.cloud/docs/s3-storage/supported-features/object-lock) - [Установка заголовков для объектов в S3](https://timeweb.cloud/docs/s3-storage/supported-features/setting-headers-for-objects) - [Bucket Policies в S3](https://timeweb.cloud/docs/s3-storage/supported-features/bucket-policies) - [Мультипарт-загрузка](https://timeweb.cloud/docs/s3-storage/supported-features/multipart-upload) - [Presigned URL](https://timeweb.cloud/docs/s3-storage/supported-features/presigned-url) - [Настройка проксирования S3 через Nginx](https://timeweb.cloud/docs/s3-storage/supported-features/setting-up-s3-proxying) - [Статические сайты в S3](https://timeweb.cloud/docs/s3-storage/supported-features/static-websites) # Настройка CORS для доступа к объектам S3 Source: https://timeweb.cloud/docs/s3-storage/supported-features/cors-setup?utm_source=llms_txt&utm_medium=ai Когда вы используете файлы из S3-бакетов на сторонних ресурсах, например, на веб-сайте, вы можете столкнуться с ошибкой, связанной с CORS (Cross-Origin Resource Sharing). Эта ошибка возникает, когда браузер блокирует кросс-доменные запросы к ресурсам вашего бакета. Для решения проблемы необходимо задать специальные правила CORS для бакета, которые разрешат выполнение кросс-доменных запросов. Настроить их можно через панель управления или с использованием утилит, например, AWS CLI. ## Настройка CORS через панель управления 1. В панели управления откройте раздел «Настройки» вашего S3-бакета. 2. Найдите параметр «CORS» и нажмите «Изменить». ![Selection 133](https://content.timeweb.com/assets/0dea8ac4-0a18-4344-8ba8-a327544f30fd.png?width=1048&height=647) 3. Заполните необходимые параметры правил CORS: - **Allowed Origins** — указывает источники (Origins), с которых разрешены запросы к бакету. Например: `https://example.com`. Можно использовать символ `*` для разрешения запросов со всех доменов. - **Allowed Methods** — определяет HTTP-методы, которые разрешены для запросов CORS. - **Allowed Headers** — указывает заголовки, которые разрешены в запросах. Например: `Authorization`, `Content-Type`. Можно указать `*`, чтобы разрешить все заголовки. - **Expose Headers** — список заголовков, которые будут доступны клиенту в ответе. По умолчанию доступ к некоторым заголовкам блокируется браузером. Например: `ETag`, `x-amz-meta-custom-header`. - **Max Age Seconds** — определяет время в секундах, в течение которого результаты CORS-запроса можно кэшировать на стороне клиента. Например: `3600` (1 час). ![Selection 134](https://content.timeweb.com/assets/3fe7eedf-c3ec-4dfc-8328-64c96693ff99.png?width=404&height=565) Вы можете создать несколько правил (например, разрешить разные методы для разных источников), нажав на кнопку «Добавить правило». 4. Сохраните изменения, нажав на кнопку «Сохранить». ## Настройка CORS через AWS CLI Рассмотрим, как настроить CORS для S3-бакета с помощью утилиты [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli). ### Создание файла с правилами CORS Для начала создайте файл `cors.json` с конфигурацией CORS, который позволит выполнять GET и HEAD-запросы на объекты вашего бакета. Вот пример файла `cors.json`: ```shell { "CORSRules": [ { "AllowedHeaders": ["*"], "AllowedMethods": ["GET", "HEAD"], "AllowedOrigins": ["*"] } ] } ``` - `AllowedMethods`: указывает, какие HTTP-методы будут разрешены. В данном примере разрешены GET и HEAD запросы. - `AllowedOrigins`: `"*"` означает, что запросы разрешены с любого домена. Если вы хотите ограничить доступ только для определённого домена, укажите его вместо звёздочки. Например, если ваш сайт расположен на домене `https://example.com`, замените строку на: ```shell "AllowedOrigins": ["https://example.com"] ``` ### Загрузка правил CORS в бакет После создания файла с правилами, загрузите его в ваш S3-бакет с помощью следующей команды: ```shell aws s3api put-bucket-cors --bucket имя_бакета --endpoint-url https://s3.twcstorage.ru --cors-configuration file://cors.json ``` ### Проверка установленных правил CORS Вы можете проверить, что правила CORS были успешно установлены, выполнив команду: ```shell aws s3api get-bucket-cors --bucket имя_бакета --endpoint-url https://s3.twcstorage.ru ``` ### Удаление правил CORS Если вам необходимо удалить текущие правила CORS, выполните команду: ```shell aws s3api delete-bucket-cors --bucket имя_бакета --endpoint-url https://s3.twcstorage.ru ``` Команда удалит все существующие правила CORS для вашего бакета. # Настройка жизненного цикла объектов в S3 Source: https://timeweb.cloud/docs/s3-storage/supported-features/object-lifecycle?utm_source=llms_txt&utm_medium=ai При использовании S3 может потребоваться управлять жизненным циклом объектов, чтобы оптимизировать использование ресурсов и избежать переполнения хранилища. Для этого можно настроить правила жизненного цикла (Lifecycle rules), которые автоматически удаляют объекты через заданное количество дней. Рассмотрим, как настроить правила жизненного цикла для объектов в S3-бакете через панель управления и при помощи утилиты [AWS CLI](timeweb.cloud/docs/s3-storage/tools/aws-cli). ## Через панель управления Для создания правил жизненного цикла в панели управления бакетом перейдите во вкладку «Настройки». В строке «Жизненный цикл» нажмите на кнопку «Настроить». ![Scr 20260302 Ojpc](https://content.timeweb.com/assets/eb4132d3-007b-4865-85c5-3e92b2aa6aae.png?width=2100&height=1578) Для создания нового правила нажмите на кнопку «Добавить правило». В открывшемся окне укажите: - Префикс объекта. Например, при указании префикса logs/ правило будет работать только для объектов в «папке» logs. - Действие. Выберите, что должно произойти с объектами, и укажите, через сколько дней будет выполнено действие. Доступно три варианта: - Удалить объекты — правило для любого объекта в бакете. - Удалить нетекущий — правило, устанавливаемое для старых версий объектов. Актуально при включенном [версионировании объектов](https://timeweb.cloud/docs/s3-storage/tools/aws-cli). - Прервать незавершенную загрузку — правило для автоматического удаления незавершенных [мультипарт-загрузок](https://timeweb.cloud/docs/s3-storage/tools/aws-cli). ![Scr 20260302 Ojlt](https://content.timeweb.com/assets/9195caf3-2680-49be-9544-e54bd5d7c724.png?width=2530&height=1660) #### Управление существующими правилами Просмотреть все существующие правила жизненного цикла можно также в панели управления бакетом во вкладке «Настройки», нажав на кнопку «Изменить» в строке «Жизненный цикл». В окне будут отображены все существующие правила, в том числе добавленные сторонними способами, например при помощи AWS CLI. Помимо просмотра существующих правил, вы можете удалить правило, нажав на иконку с корзиной, и временно отключить правило, переключив переключатель. ![Scr 20260302 Jkxh](https://content.timeweb.com/assets/cc2f46b4-0626-4bd1-98e3-b20a24414c7a.png?width=2156&height=1314) При нажатии на правило откроется окно редактирования, в котором можно изменить настройки. ## При помощи AWS CLI ### Создание файла с правилами жизненного цикла Чтобы настроить удаление файлов через определенное время, создайте файл с конфигурацией правил жизненного цикла. Например, если вам нужно хранить файлы в папке `logs` только один день, создайте файл `lifecycle.json` со следующим содержимым: ```shell { "Rules": [ { "Status": "Enabled", "Filter": {"Prefix": "logs/"}, "Expiration": {"Days": 1} } ] } ``` - **Prefix**: указывает папку (или префикс), к которой будет применяться правило. В этом примере файлы из папки `logs/` будут автоматически удаляться через один день. - **Expiration**: задаёт срок хранения файлов в днях. Здесь указано, что файлы будут удаляться через один день после загрузки. ### Добавление нескольких правил Вы можете добавить несколько правил для разных папок или файлов. Например, если у вас есть другая папка `logs2`, где файлы должны храниться два дня, просто добавьте дополнительное правило: ```shell { "Rules": [ { "Status": "Enabled", "Filter": {"Prefix": "logs/"}, "Expiration": {"Days": 1} }, { "Status": "Enabled", "Filter": {"Prefix": "logs2/"}, "Expiration": {"Days": 2} } ] } ``` Теперь файлы в папке `logs/` будут храниться один день, а в папке `logs2/` — два дня. ### Загрузка правил жизненного цикла в бакет После создания файла с правилами, загрузите его в ваш S3-бакет с помощью следующей команды: ```bash aws s3api put-bucket-lifecycle-configuration --bucket имя_бакета --lifecycle-configuration file://lifecycle1.json --endpoint-url https://s3.twcstorage.ru ``` Эта команда применит указанные правила к вашему бакету, и файлы будут автоматически удаляться по истечении заданного срока. ### Проверка установленных правил Чтобы убедиться, что правила жизненного цикла были успешно загружены, выполните команду: ```bash aws s3api get-bucket-lifecycle-configuration --bucket имя_бакета --endpoint-url https://s3.twcstorage.ru ``` Эта команда выведет текущие правила, установленные для вашего бакета. ### Удаление правил Если вам нужно удалить все существующие правила жизненного цикла для бакета, выполните следующую команду: ```bash aws s3api delete-bucket-lifecycle --bucket имя_бакета --endpoint-url https://s3.twcstorage.ru ``` Эта команда удалит все правила жизненного цикла, и файлы больше не будут автоматически удаляться. # Версионирование объектов в S3 Source: https://timeweb.cloud/docs/s3-storage/supported-features/s3-object-versioning?utm_source=llms_txt&utm_medium=ai Версионирование в S3 позволяет сохранять все изменения объектов, загруженных в бакет. Оно помогает защитить данные от случайного удаления или перезаписи, а также восстановить предыдущие версии объектов в случае необходимости. В этой статье мы рассмотрим работу с версиями на примере [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli). ## Включение версионирования Версионирование можно включить в панели управления или с помощью клиентов, например AWS CLI, S3 Browser и других. ### Через панель управления Перейдите во вкладку «Настройки» и нажмите кнопку «Изменить» рядом с пунктом «История версий отключена». ![Image 20250905124535245](https://content.timeweb.com/assets/17baa329-b8b1-4d78-a300-0e94e992cf25.png?width=2016&height=1612) В открывшемся окне подтвердите включение версионирования, нажав кнопку «Включить версионирование». Обратите внимание, что в дальнейшем отключить версионирование для бакета не получится — только приостановить. ### При помощи AWS CLI Чтобы включить версионирование в S3-бакете с помощью AWS CLI, выполните команду: ```shell aws s3api put-bucket-versioning --bucket <имя_бакета> --versioning-configuration Status=Enabled --endpoint-url https://s3.twcstorage.ru ``` Проверить, что версионирование включено, можно с помощью команды: ```shell aws s3api get-bucket-versioning --bucket <имя_бакета> --endpoint-url https://s3.twcstorage.ru ``` Ожидаемый результат: ```js { "Status": "Enabled", "MFADelete": "Disabled" } ``` ## Проверка работы версионирования Разберем принцип работы версионирования на примере. Создадим тестовый файл: ```shell echo "Версия 1" > testfile.txt ``` Загрузим его в бакет: ```shell aws s3 cp testfile.txt s3://<имя_бакета>/ --endpoint-url https://s3.twcstorage.ru ``` Обновим файл: ```shell echo "Версия 2" > testfile.txt ``` Снова загрузим его: ```shell aws s3 cp testfile.txt s3://<имя_бакета>/ --endpoint-url https://s3.twcstorage.ru ``` Теперь у файла есть несколько версий. Проверим их: ```shell aws s3api list-object-versions --bucket <имя_бакета> --prefix testfile.txt --endpoint-url https://s3.twcstorage.ru ``` Пример результата: ```js { "Versions": [ { "Key": "testfile.txt", "VersionId": "S7hpDH6F0RYfubNoTjin6hpBu5ewDj.", "IsLatest": true }, { "Key": "testfile.txt", "VersionId": "pdFehsuCbaPz2hNh4b9DBndfEwzjTfH", "IsLatest": false } ] } ``` **Важные нюансы**: - Каждая версия объекта занимает место в бакете. - Версии объектов не отображаются в панели управления или других S3-клиентах. - Даже при удалении объекта все версии остаются в бакете. ## Работа с версиями в панели управления Для просмотра списка версий в панели управления, в объектном менеджере, нажмите на три точки рядом с нужным объектом и выберите пункт «История версий». ![Image 20250905174549903](https://content.timeweb.com/assets/c87959bc-2c03-4519-abbc-dbec7f4cebb0.png?width=1534&height=1114) В открывшемся меню при наведении на нужную версию объекта отобразится список доступных действий. ![Image 20250905175324581](https://content.timeweb.com/assets/77084325-0c2e-42d5-bf77-b26804fc8393.png?width=1174&height=644) 1. **Ссылка на файл** — для версии объекта будет [создан presigned URL](https://timeweb.cloud/docs/s3-storage/supported-features/presigned-url). 2. **Скачивание файла**. 3. **Восстановление версии объекта** — позволяет сделать выбранную версию текущей. 4. **Удаление версии объекта** — при нажатии на три точки появляется возможность удалить нужную версию. ## Работа с версиями с помощью AWS CLI Для управления версиями объектов в S3 доступны несколько команд. ### Список версий конкретного объекта Чтобы просмотреть все версии конкретного объекта в бакете, используйте команду: ```shell aws s3api list-object-versions --bucket <имя_бакета> --prefix <имя_объекта> --endpoint-url https://s3.twcstorage.ru ``` ### Список всех объектов с их версиями Вывести список всех объектов в бакете вместе с их версиями можно так: ```shell aws s3api list-object-versions --bucket <имя_бакета> --query 'Versions[*].[Key, VersionId, Size]' --endpoint-url https://s3.twcstorage.ru ``` ### Скачивание определенной версии объекта Если нужно скачать конкретную версию объекта, выполните команду: ```shell aws s3api get-object --bucket <имя_бакета> \ --key testfile.txt \ --version-id pdFehsuCbaPz2hNh4b9DBndfEwzjTfH \ testlocalfile.txt \ --endpoint-url https://s3.twcstorage.ru ``` Где: - `--key` — имя объекта в бакете. - `--version-id` — идентификатор версии (получается из `list-object-versions`). - `testlocalfile.txt` — имя файла, в который будет сохранена скачанная версия. ### Восстановление определенной версии объекта Если объект был обновлен или удален, можно восстановить его прежнюю версию, скопировав ее поверх текущей: ```shell aws s3api copy-object --bucket <имя_бакета> \ --key testfile.txt \ --copy-source <имя_бакета>/<имя_объекта>?versionId= \ --endpoint-url https://s3.twcstorage.ru ``` Где: - `<имя_бакета>/<имя_объекта>` — полный путь к объекту в бакете. - `?versionId=` — версия, которую необходимо восстановить. После выполнения команды в бакете появится новая версия объекта, которая идентична восстановленной. ### Удаление конкретной версии объекта Чтобы удалить конкретную версию объекта, выполните команду: ```shell aws s3api delete-object --bucket <имя_бакета> --key <имя_объекта> --version-id S7hpDH6F0RYfubNoTjin6hpBu5ewDj. --endpoint-url https://s3.twcstorage.ru ``` Где `--version-id` — ID версии объекта, которую необходимо удалить. ## Настройка автоматического удаления старых версий Чтобы старые версии файлов не накапливались, можно настроить [жизненный цикл объектов](https://timeweb.cloud/docs/s3-storage/supported-features/object-lifecycle). Создадим файл `lifecycle.json`: ```js { "Rules": [ { "ID": "DeleteOldVersions", "Status": "Enabled", "Filter": {}, "NoncurrentVersionExpiration": { "NoncurrentDays": 30 } } ] } ``` Это правило удалит версии файлов, старше 30 дней. Текущие версии останутся нетронутыми. Применим политики жизненного цикла: ```shell aws s3api put-bucket-lifecycle-configuration --bucket <имя_бакета> --lifecycle-configuration file://lifecycle.json --endpoint-url https://s3.twcstorage.ru ``` Проверим, что политика применилась: ```shell aws s3api get-bucket-lifecycle-configuration --bucket <имя_бакета> --endpoint-url https://s3.twcstorage.ru ``` # Object Lock в S3 Source: https://timeweb.cloud/docs/s3-storage/supported-features/object-lock?utm_source=llms_txt&utm_medium=ai Object Lock используется для защиты объектов в S3 от удаления и изменений в течение заданного времени. Эта функция гарантирует неизменность данных на весь период хранения. Object Lock особенно полезен при работе с важными архивами, резервными копиями и другой критичной информацией, которую нужно защитить от случайных или намеренных действий. ## Включение Object Lock Для включения Object Lock перейдите во вкладку «Настройки» и нажмите кнопку «Изменить» напротив пункта «Блокировка объектов отключена». ![Image1](https://content.timeweb.com/assets/0c9e3da4-1393-4ee7-b8d2-aefd92a2d66e.png?width=1999&height=1453) В открывшемся меню включите блокировку, нажав кнопку «Включить блокировку объектов». Обратите внимание: при включении блокировки также будет включено [версионирование объектов](https://timeweb.cloud/docs/s3-storage/supported-features/s3-object-versioning). Отключить блокировку объектов, как и версионирование, невозможно. ## Создание бакета с Object Lock Включить Object Lock можно сразу при создании бакета, но только с помощью сторонних утилит. Рассмотрим пример создания бакета через [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli). Создадим бакет: ```bash aws s3api create-bucket \ --bucket object-lock-bucket \ --endpoint-url https://s3.twcstorage.ru \ --object-lock-enabled-for-bucket ``` Также можем создать бакет с холодным классом хранения: ```bash aws s3api create-bucket \ --bucket object-lock-bucket \ --endpoint-url https://s3.twcstorage.ru \ --create-bucket-configuration LocationConstraint=ru:ru-1-cold \ --object-lock-enabled-for-bucket ``` И с премиальным классом: ```bash aws s3api create-bucket \ --bucket object-lock-bucket \ --endpoint-url https://s3.twcstorage.ru \ --create-bucket-configuration LocationConstraint=ru:ru-1-standard-ia \ --object-lock-enabled-for-bucket ``` > [!NOTE] > Указать объем бакета при создании невозможно. При создании бакета через сторонние клиенты всегда устанавливается минимально возможный объем — 10 ГБ для стандартного класса хранения и 1 ГБ для холодного класса. После создания бакета объем [можно увеличить через панель управления](https://timeweb.cloud/docs/s3-storage/manage-storage/manage-buckets#smena-tarifa). Проверим, что Object Lock активен: ```bash aws s3api get-object-lock-configuration \ --bucket object-lock-bucket \ --endpoint-url https://s3.twcstorage.ru ``` Ответ будет таким: ```js { "ObjectLockConfiguration": { "ObjectLockEnabled": "Enabled" } } ``` Object Lock работает только с включенным версионированием. Убедимся, что оно активно: ```bash aws s3api get-bucket-versioning \ --bucket object-lock-bucket \ --endpoint-url https://s3.twcstorage.ru ``` В ответе отобразится статус версионирования: ```js { "Status": "Enabled", "MFADelete": "Disabled" } ``` ## Режимы Object Lock Object Lock поддерживает два режима блокировки объектов: временную блокировку (Retention Mode) и постоянную блокировку (Legal Hold). ### Временная блокировка Для временной блокировки доступны два режима: **COMPLIANCE** — строгий режим защиты. Объект и его версии нельзя удалить или изменить до окончания срока блокировки. Даже с правами администратора и специальными параметрами удалить данные невозможно. Этот режим подходит для сценариев, где критично обеспечить неизменность данных. **GOVERNANCE** — гибкий режим защиты. Объекты защищены от удаления и изменений, но пользователи с правами `BypassGovernanceRetention` могут удалить данные до истечения срока блокировки. Подходит для защиты от случайных удалений. Основной пользователь S3 создается с полными правами, включая `BypassGovernanceRetention`. Для дополнительных пользователей `BypassGovernanceRetention` активен для пользователей с [уровнем доступа «Управление»](https://timeweb.cloud/docs/s3-storage/manage-storage/additional-users#upravlenie). Для пользователей с уровнем доступа «Чтение» `BypassGovernanceRetention` можно включить вручную, задав полиси. Для этого создайте файл `s3-bypass.json`: ```js { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:DeleteObjectVersion", "s3:BypassGovernanceRetention" ], "Resource": "arn:aws:s3:::<имя_бакета>/*" } ] } ``` Вместо `<имя_бакета>` укажите имя вашего бакета. Примените полиси: ```bash aws iam put-user-policy \ --user-name <имя__дополнительного_пользователя> \ --policy-name allow-delete-with-bypass \ --policy-document file://s3-bypass.json \ --endpoint-url https://s3.twcstorage.ru ``` ### Постоянная блокировка **LEGAL HOLD** — гибкая блокировка без срока. Объект или его версию нельзя удалить, пока удержание не будет снято вручную. Блокировка не зависит от даты и действует бессрочно.  ## Настройка Object Lock Для Object Lock можно задать настройки, которые будут использоваться по умолчанию для всех загружаемых объектов. Перейдите во вкладку «Настройки» и нажмите кнопку «Изменить» напротив пункта «Блокировка объектов включена». ![Image3](https://content.timeweb.com/assets/f13d220f-4efd-4f99-924e-6433363a686b.png?width=1998&height=1444) В открывшемся меню выберите режим блокировки: - **COMPLIANCE** - **GOVERNANCE** - **Без глобальной политики** — при выборе этого пункта для объектов не будет устанавливаться Object Lock без явной установки. Укажите период, в течение которого объект будет защищен. Эти настройки задают значения по умолчанию, но не мешают использовать другой режим и срок для отдельного объекта. ## Использование временных блокировок Рассмотрим примеры использования режимов **COMPLIANCE** и **GOVERNANCE**. COMPLIANCE Загрузим файл с блокировкой на 30 дней: ```bash aws s3api put-object \ --bucket object-lock-bucket \ --key compliance-file.txt \ --body compliance-file.txt \ --object-lock-mode COMPLIANCE \ --object-lock-retain-until-date "$(date -d '+30 days' --utc +%Y-%m-%dT%H:%M:%SZ)" \ --endpoint-url https://s3.twcstorage.ru ``` Описание параметров: - `--bucket` — имя бакета, в который загружается объект. - `--key` — имя (путь) объекта в бакете. - `--body` — путь к файлу, который загружается. - `--object-lock-mode` — режим блокировки. - `--object-lock-retain-until-date` — дата и время окончания блокировки в формате `YYYY-MM-DDTHH:MM:SSZ`. До этой даты объект защищен от удаления. Убедимся, что защита применена: ```bash aws s3api get-object-retention \ --bucket object-lock-bucket \ --key compliance-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` В ответ получим подобный вывод: ```js { "Retention": { "Mode": "COMPLIANCE", "RetainUntilDate": "2025-04-04T10:02:21.000000000Z" } } ``` Попробуем удалить объект: ```bash aws s3api delete-object \ --bucket object-lock-bucket \ --key compliance-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` При удалении файл пропадет из раздела «Объекты» в панели управления бакетом и не будет отображаться при просмотре в сторонних клиентах. При таком удалении создается маркер удаления, но сам объект остается в бакете. Проверим версии объекта: ```bash aws s3api list-object-versions \ --bucket object-lock-bucket \ --prefix compliance-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` Мы увидим, что версия сохранена и для нее создан маркер. ![Image2](https://content.timeweb.com/assets/a90ab580-1f23-4672-9313-0a5410cc7233.png?width=781&height=558) Удаленную версию можно [восстановить по инструкции](https://timeweb.cloud/docs/s3-storage/supported-features/s3-object-versioning#vosstanovlenie-konkretnoj-versii-obekta). Удаление конкретной версии с активной блокировкой будет невозможно: ```bash aws s3api delete-object \ --bucket object-lock-bucket \ --key compliance-file.txt \ --version-id \ --endpoint-url https://s3.twcstorage.ru ``` До истечения срока блокировки команда вернет ошибку: ```shell An error occurred (AccessDenied) when calling the DeleteObject operation: forbidden by object lock ``` GOVERNANCE Загрузим файл с блокировкой на 30 дней: ```bash aws s3api put-object \ --bucket object-lock-bucket \ --key governance-file.txt \ --body governance-file.txt \ --object-lock-mode GOVERNANCE \ --object-lock-retain-until-date "$(date -d '+30 days' --utc +%Y-%m-%dT%H:%M:%SZ)" \ --endpoint-url https://s3.twcstorage.ru ``` Описание параметров: - `--bucket` — имя бакета, в который загружается объект. - `--key` — имя (путь) объекта в бакете. - `--body` — путь к файлу, который загружается. - `--object-lock-mode` — режим блокировки. - `--object-lock-retain-until-date` — дата и время окончания блокировки в формате `YYYY-MM-DDTHH:MM:SSZ`. До этой даты объект защищен от удаления. Убедимся, что защита применена: ```bash aws s3api get-object-retention \ --bucket object-lock-bucket \ --key governance-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` В ответ получим подобный вывод: ```js { "Retention": { "Mode": "GOVERNANCE", "RetainUntilDate": "2025-04-04T10:07:44.000000000Z" } } ``` Попробуем удалить объект: ```bash aws s3api delete-object \ --bucket object-lock-bucket \ --key governance-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` При удалении файл пропадет из раздела «Объекты» в панели управления бакетом и не будет отображаться при просмотре в сторонних клиентах. При таком удалении создается маркер удаления, но сам объект остается в бакете. Проверим версии объекта: ```bash aws s3api list-object-versions \ --bucket object-lock-bucket \ --prefix governance-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` Мы увидим версию объекта и маркер удаления. ![Image5](https://content.timeweb.com/assets/6f88a2da-d589-433b-90d8-d80a20742150.png?width=766&height=558) Удаленную версию можно [восстановить по инструкции](https://timeweb.cloud/docs/s3-storage/supported-features/s3-object-versioning#vosstanovlenie-konkretnoj-versii-obekta). Полное удаление возможно только с указанием обхода блокировки при помощи параметра --`bypass-governance-retention`. Удаляем объект с обходом блокировки: ```bash aws s3api delete-object \ --bucket object-lock-bucket \ --key governance-file.txt \ --bypass-governance-retention \ --version-id \ --endpoint-url https://s3.twcstorage.ru ``` Теперь повторно проверим версии объекта: ```bash aws s3api list-object-versions \ --bucket object-lock-bucket \ --prefix governance-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` Теперь отобразится только маркер удаления. ## Использование постоянной блокировки В отличие от временной блокировки `COMPLIANCE` и `GOVERNANCE`, `LegalHold` не требует указания срока и действует бессрочно. Объект остается защищенным до тех пор, пока блокировка не будет снята вручную. Это удобно в ситуациях, когда невозможно заранее определить срок хранения данных. Загрузим файл в бакет с включенным Object Lock: ```bash aws s3api put-object \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --body legalhold-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` После загрузки включим `LegalHold` для объекта: ```bash aws s3api put-object-legal-hold \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --legal-hold "Status=ON" \ --endpoint-url https://s3.twcstorage.ru ``` Проверим статус блокировки: ```bash aws s3api get-object-legal-hold \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` Ожидаемый вывод: ```js { "LegalHold": { "Status": "ON" } } ``` Попробуем удалить объект: ```bash aws s3api delete-object \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` Результатом выполнения команды будет установка маркера: ```js { "DeleteMarker": true, "VersionId": "F1IzDfHkrhpMtWUZ7gUcnYPAE2xPQ7w" } ``` Проверим версии объекта: ```bash aws s3api list-object-versions \ --bucket object-lock-bucket \ --prefix legalhold-file.txt \ --endpoint-url https://s3.twcstorage.ru ``` Вы увидите версию и маркер удаления. ![Image4](https://content.timeweb.com/assets/d1e6a9a8-2612-47aa-a8e1-cacb8930bf94.png?width=1080&height=822) Удаленную версию можно [восстановить по инструкции](https://timeweb.cloud/docs/s3-storage/supported-features/s3-object-versioning#vosstanovlenie-konkretnoj-versii-obekta). Попробуем удалить конкретную версию: ```bash aws s3api delete-object \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --version-id \ --endpoint-url https://s3.twcstorage.ru ``` Выполнение команды вызовет ошибку. Чтобы снять блокировку, выполните: ```bash aws s3api put-object-legal-hold \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --legal-hold "Status=OFF" \ --endpoint-url https://s3.twcstorage.ru ``` После снятия блокировки версию объекта можно будет удалить. # Установка заголовков для объектов в S3 Source: https://timeweb.cloud/docs/s3-storage/supported-features/setting-headers-for-objects?utm_source=llms_txt&utm_medium=ai Рассмотрим, как можно установить заголовки для объектов в S3. Это полезно для управления кешированием, добавления пользовательских метаданных и оптимизации работы с данными в бакете. ## Установка заголовков через панель управления Для установки заголовков из панели управления перейдите в раздел «Объекты» в необходимом бакете. Наведите курсор на нужный файл, нажмите на три точки и выберите пункт «Изменить метаданные». ![Selection 139](https://content.timeweb.com/assets/ca5ee9f4-d9ae-41d5-9a71-befb5d01d4d1.png?width=792&height=881) Для добавления кастомного заголовка нажмите на кнопку «Добавить». ![Selection 140](https://content.timeweb.com/assets/5a6f8ea5-074c-473f-8880-7561fafa20c2.png?width=1037&height=894) ### Доступные параметры Можно настроить следующие параметры. #### Content-Type MIME-тип содержимого объекта. Определяет формат файла и используется клиентскими приложениями для его корректной обработки. Примеры значений: - `application/pdf` — PDF-документ; - `image/jpeg` — изображение JPEG; - `text/plain` — текстовый файл; - `application/json` — JSON-документ. Если указать неверное значение, браузер или приложение могут некорректно определить тип файла. #### Cache-Control Управляет кэшированием объекта браузерами, CDN и промежуточными прокси-серверами. Пример: `max-age=3600` В этом случае объект может храниться в кэше в течение 3600 секунд (1 часа) без повторного обращения к хранилищу. #### Content-Encoding Указывает способ кодирования содержимого объекта. Пример: `gzip` Используется для файлов, которые были сжаты перед загрузкой в хранилище. При получении объекта клиент может автоматически выполнить распаковку содержимого. #### Content-Disposition Определяет способ обработки файла при скачивании. Наиболее распространенные значения: - `attachment` — предложить пользователю скачать файл; - `inline` — попытаться открыть файл непосредственно в браузере. Например, для PDF-документов значение `inline` позволяет открыть документ во вкладке браузера, а инициирует его скачивание. #### Пользовательские метаданные (Metadata) Позволяют добавить произвольные пары «ключ — значение», связанные с объектом. Для добавления пользовательских метаданных нажмите «Добавить» и заполните поля: - Ключ — имя метаданных. Ключи пользовательских метаданных сохраняются с префиксом `x-amz-meta-`. - Значение — произвольное значение метаданных. Примеры: | **Ключ** | **Значение** | | --- | --- | | `project` | `website` | | `owner` | `marketing` | | `version` | `1.2` | К объекту можно добавить несколько пользовательских метаданных. Пользовательские метаданные не изменяют содержимое файла, но могут использоваться приложениями для хранения дополнительной информации об объекте, его классификации или обработки. ## Установка заголовков через командную строку Вы также можете установить заголовки с помощью командной строки, используя инструменты `[s3cmd](https://timeweb.cloud/docs/s3-storage/tools/s3cmd)` и `aws s3api`. ### Установка заголовка для одного объекта Чтобы установить заголовок для одного конкретного объекта, используйте команду `s3cmd modify`. Например, чтобы добавить заголовок `Cache-Control` для конкретного объекта: ```shell s3cmd modify s3://<имя_бакета>/<имя_объекта> --add-header="cache-control:max-age=7000" ``` В данном случае данный объект получит заголовок `Cache-Control` с параметром `max-age=7000`, что указывает браузеру или прокси-серверу кэшировать этот объект в течение `7000` секунд. ### Установка заголовков для всех объектов в бакете Если нужно установить заголовки для всех объектов в бакете, можно использовать опцию `--recursive`, чтобы применить изменения ко всем файлам: ```shell s3cmd modify --recursive s3://<имя_бакета> --add-header="cache-control:max-age=7001" ``` Эта команда рекурсивно добавит заголовок `Cache-Control` со значением `max-age=7001` ко всем объектам в указанном бакете. ### Создание кастомного заголовка Для добавления пользовательских заголовков можно воспользоваться командой `s3cmd modify` с указанием `x-amz-meta`: ```shell s3cmd modify s3://<имя_бакета>/<имя_объекта> --add-header="x-amz-meta-test-header:test" ``` Здесь создается кастомный заголовок `x-amz-meta-test-header` с значением `test`. При этом в метаданных объекта этот заголовок будет сохранен без префикса `x-amz-meta-`, то есть в результате получим: ```yml "Metadata": { "test-header": "test" } ``` Это позволяет хранить в объекте дополнительные данные, которые могут быть полезны для обработки или логирования. ### Проверка установленных заголовков Для проверки установленных заголовков можно воспользоваться командой `aws s3api head-object`. Это позволяет убедиться, что все заголовки и метаданные были успешно добавлены: ```shell aws s3api head-object --bucket <имя_бакета> --key <имя_объекта> --endpoint-url https://s3.twcstorage.ru ``` Команда вернет информацию об объекте, включая его метаданные и заголовки, что позволяет проверить, что все изменения были применены корректно. # Bucket Policies в S3 Source: https://timeweb.cloud/docs/s3-storage/supported-features/bucket-policies?utm_source=llms_txt&utm_medium=ai Возможности управления доступом к данным в хранилищах S3 позволяют гибко настраивать правила доступа для различных сценариев. Рассмотрим несколько полезных примеров настройки политик доступа для S3. ## Ограничение доступа только через SSL (HTTPS) Чтобы обезопасить передачу данных, можно ограничить доступ к бакету, разрешив только HTTPS-соединения. Это предотвращает попытки получить доступ через незащищенные HTTP-запросы, снижая риск компрометации данных. Создайте файл с политикой `ssl.json`: ```yml { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::<имя_бакета>/*", "Condition": { "Bool": { "aws:SecureTransport": "true" } } } ] } ``` Примените политику с помощью команды: ```shell aws s3api put-bucket-policy --bucket <имя_бакета> --policy file://ssl.json --endpoint-url https://s3.twcstorage.ru ``` Теперь, при попытке обращения по HTTP будет возникать ошибка 403. ## Ограничение доступа по IP-адресам Для дополнительной безопасности можно ограничить доступ к бакету только для определенных IP-адресов. Это может быть полезно, например, для защиты данных от несанкционированного доступа извне. Создайте файл с политикой `ip.json`: ```yml { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::<имя_бакета>/*", "Condition": { "IpAddress": { "aws:SourceIp": [ "" ] } } } ] } ``` Примените политику с помощью команды: ```shell aws s3api put-bucket-policy --bucket <имя_бакета> --policy file://ip.json --endpoint-url https://s3.twcstorage.ru ``` ## Доступ только для конкретного префикса Если вам нужно дать доступ к определенным объектам в бакете, например, к файлам, находящимся в конкретном префиксе, можно использовать следующую политику. Она подойдет для приватного бакета, чтобы предоставить доступ только к определенным данным. Создайте файл с политикой `prefix.json`: ```yml { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<имя_бакета>/html/*" } ] } ``` Примените политику с помощью команды: ```shell aws s3api put-bucket-policy --bucket <имя_бакета> --policy file://prefix.json --endpoint-url https://s3.twcstorage.ru ``` Теперь все файлы из префикса `/html` будут доступны для чтения. # Мультипарт-загрузка Source: https://timeweb.cloud/docs/s3-storage/supported-features/multipart-upload?utm_source=llms_txt&utm_medium=ai Мультипарт-загрузка — это метод передачи больших файлов в S3-хранилище, при котором файл разбивается на части (чанки) и загружается параллельно. Это ускоряет процесс и повышает надежность: при сбое можно перезагрузить только поврежденную часть, а не весь файл. Такой подход удобен для работы с крупными файлами и при нестабильных сетевых соединениях. ## Преимущества мультипарт-загрузки 1. Ускорение передачи данных: Параллельная загрузка нескольких частей сокращает время, необходимое для передачи больших файлов. 2. Гибкость: Возможность приостановить и возобновить загрузку облегчает работу в условиях нестабильного соединения. 3. Устойчивость к сбоям: Ошибки при передаче отдельных частей легко устраняются повторной отправкой только этой части. > [!NOTE] > Прерванная мультипарт-загрузка занимает место в бакете. ## Отображение прерванных загрузок Прерванные мультипарт-сессии отображаются в панели управления в разделе «Мультипарт-сессии». ![Scr 20250807 Oqwj](https://content.timeweb.com/assets/0b083de8-868b-4464-bf94-66cd3b44f67f.png?width=1542&height=626) Нажав на три точки рядом с нужной загрузкой, вы можете: - **Завершить загрузку** — части будут склеены в один файл. Но его целостность не гарантируется, если загрузка была неполной. - **Отменить загрузку** — все части будут удалены и перестанут занимать место в бакете. ## Права доступа Дополнительный пользователь с правами «Чтение и запись» может выполнять все операции мультипарт-загрузки с объектами в бакете: - Создавать мультипарт-загрузку - Загружать части объекта - Получать информацию о мультипарт-загрузке - Завершать мультипарт-загрузку - Отменять мультипарт-загрузку Эти права позволяют загружать крупные объекты по частям и управлять незавершенными мультипарт-загрузками. При этом пользователь с правами «Чтение и запись» не получает доступ к управлению настройками бакета. ## Примеры использования Многие инструменты и библиотеки для работы с S3 поддерживают мультипарт-загрузку и предоставляют возможность настройки размера частей. Инструкции по работе с мультипарт-загрузкой для конкретных инструментов можно найти в следующих статьях: - [s3cmd](https://timeweb.cloud/docs/s3-storage/tools/s3cmd#sostavnaya-multipart-zagruzka) - [S3 Browser](https://timeweb.cloud/docs/s3-storage/tools/s3-browser#upravlenie-prervannymi-sostavnymi-multipart-zagruzkami) - [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli#sostavnaya-zagruzka) Эти инструменты предоставляют гибкие возможности по настройке процесса загрузки, что позволяет оптимизировать передачу данных в зависимости от ваших потребностей и параметров сети. # Presigned URL Source: https://timeweb.cloud/docs/s3-storage/supported-features/presigned-url?utm_source=llms_txt&utm_medium=ai Presigned URL в S3 позволяет временно предоставить доступ к объекту в хранилище без необходимости изменять права доступа на объект. Это удобный инструмент для скачивания файлов сторонними пользователями. В статье рассмотрим, как создать Presigned URL двумя способами: через панель управления и с использованием [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli). > [!NOTE] > Генерация Presigned URL невозможна при использовании [своего домена](https://timeweb.cloud/docs/s3-storage/manage-storage/link-domain). ## Через панель управления Генерация Presigned URL доступна только для приватных бакетов. Чтобы сгенерировать Presigned URL, перейдите в раздел «Объекты» в нужном бакете. Наведите курсор на объект, для которого требуется создать ссылку, и нажмите на кнопку «Ссылка на файл».  ![Selection 143](https://content.timeweb.com/assets/e5d88a2a-b517-4aa3-b877-bb40762dd889.png?width=1047&height=646) Ссылка будет скопирована в буфер обмена и активна в течение 60 минут. После истечения этого времени при попытке перехода по ссылке будет возвращаться ошибка 403. В панели управления нельзя изменить продолжительность времени, на протяжении которого ссылка будет активна. Ссылку также можно сгенерировать для конкретной версии объекта, если в бакете [включено версионирование](https://timeweb.cloud/docs/s3-storage/supported-features/s3-object-versioning). Для этого откройте историю версий объекта и нажмите кнопку «Ссылка на файл» рядом с нужной версией. ![Scr 20250904 Qgda](https://content.timeweb.com/assets/e01cfa41-1559-4993-b032-d31ceafa6a61.png?width=2472&height=1526) ## Через AWS CLI Создать Presigned URL с помощью [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli) можно с помощью команды: ```shell aws s3 presign s3://<бакет>/<объект> --expires-in 60 --endpoint-url https://s3.twcstorage.ru ``` Параметр `--expires-in` необязателен. Он определяет время доступности объекта по ссылке в секундах. Если параметр не указан, объект будет доступен в течение 3600 секунд (1 час). Генерация Presigned URL для версии объекта, отличной от текущей, не поддерживается стандартными утилитами. Поэтому для создания ссылки на конкретную версию объекта можно воспользоваться самописными скриптами. Например, вы можете использовать следующий скрипт: ```py #!/usr/bin/env python3 import argparse import boto3 parser = argparse.ArgumentParser() parser.add_argument('--bucket', required=True) parser.add_argument('--key', required=True) parser.add_argument('--expires-in', type=int, default=3600) parser.add_argument('--version-id') parser.add_argument('--method', default='get_object') args = parser.parse_args() client = boto3.client('s3', endpoint_url='https://s3.twcstorage.ru') params = {'Bucket': args.bucket, 'Key': args.key} if args.version_id: params.update({'VersionId': args.version_id}) url = client.generate_presigned_url(args.method, Params=params, ExpiresIn=args.expires_in) print(url) ``` Скрипт запускается командой: ```bash python ./main.py --bucket имя_бакета --key имя_объекта --expires-in 6969 --version-id версия_объекта ``` Где: - `--expires-in` — время в секундах, через которое ссылка перестанет работать. - `--version-id` — версия объекта (`VersionId`), которую можно получить, например, с помощью AWS CLI. Данные для авторизации скрипт возьмет из файла `~/.aws/credentials`. ## Генерация Presigned URL до загрузки объекта Вы можете заранее сгенерировать ссылку для загрузки объекта — даже если сам объект еще не существует в бакете.  Стандартные утилиты вроде AWS CLI не поддерживают генерацию Presigned URL для загрузки, однако это можно реализовать с помощью SDK. Например, через `boto3` для Python. Пример скрипта: ```py import boto3 from botocore.client import Config # Укажите ваши данные AWS_ACCESS_KEY_ID = 'S3 Access Key' AWS_SECRET_ACCESS_KEY = 'S3 Secret Access Key' BUCKET_NAME = 'Имя бакета' OBJECT_KEY = 'example.txt' # имя будущего объекта EXPIRES_IN = 3600 # срок действия ссылки в секундах s3 = boto3.client( 's3', endpoint_url='https://s3.twcstorage.ru', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, config=Config(signature_version='s3v4'), region_name='ru-1' ) # Генерация presigned URL url = s3.generate_presigned_url( ClientMethod='put_object', Params={ 'Bucket': BUCKET_NAME, 'Key': OBJECT_KEY, }, ExpiresIn=EXPIRES_IN ) print(url) ``` Указывать `Content-Type` при генерации ссылки не нужно, так как его передача может привести к ошибке. В результате выполнения скрипта будет сгенерирована временная ссылка для загрузки объекта. Загрузить файл можно с помощью `curl`: ```shell curl -X PUT -T путь/до/загружаемого_файла.txt -H "Content-Type: text/plain" "ссылка_полученная_при_выполнении_скрипта" ``` # Настройка проксирования S3 через Nginx Source: https://timeweb.cloud/docs/s3-storage/supported-features/setting-up-s3-proxying?utm_source=llms_txt&utm_medium=ai Проксирование S3 через Nginx позволяет использовать ваш сервер в качестве посредника между клиентами и S3-хранилищем, предоставляя множество преимуществ. Вы можете скрыть прямой доступ к S3, обеспечить контроль кэширования для оптимизации трафика, настроить изменение заголовков для гибкой работы с запросами, а также ограничить доступ к контенту. Кроме того, прокси помогает объединить доступ к нескольким сервисам через единый домен, минимизировать затраты на трафик благодаря локальному кэшированию и вести детальное логирование запросов для анализа. ## Установка Nginx Для начала установим Nginx, если он ещё не установлен: ```shell sudo apt update sudo apt install nginx ``` После установки проверьте, что Nginx запущен, с помощью команды: ```shell sudo systemctl status nginx ``` Если сервис не запущен, активируйте его: ```shell sudo systemctl start nginx sudo systemctl enable nginx ``` ## Настройка доступа к бакету Для работы проксирования ваш бакет должен быть публичным или иметь настроенный доступ для IP-адреса вашего сервера. Чтобы открыть доступ к бакету с IP сервера, задайте политику бакета с помощью [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli). Для этого создайте файл `bucket-policy.json` с содержимым: ```js { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::имя_бакета/*", "Condition": { "IpAddress": { "aws:SourceIp": "IP_адрес_сервера" } } } ] } ``` Укажите параметры: - `имя_бакета` — имя вашего бакета. - `IP_адрес_сервера` — внешний IP-адрес вашего сервера. Примените политику к бакету: ```shell aws s3api put-bucket-policy --bucket имя_бакета --policy file://bucket-policy.json --endpoint-url https://s3.twcstorage.ru ``` Если нужно разрешить доступ нескольким IP-адресам, добавьте их в виде массива в поле `IpAddress`, например: ```js "IpAddress": { "aws:SourceIp": ["IP_адрес_1", "IP_адрес_2"] } ``` Теперь ваш бакет будет доступен только для указанных IP-адресов. ## Базовая настройка Создайте конфигурационный файл для проксирования. Например, создадим файл `s3_proxy.conf` в каталоге `/etc/nginx/sites-available`: ```shell sudo nano /etc/nginx/sites-available/s3_proxy.conf ``` Настройте конфигурацию следующим образом: ```shell server { listen 80; server_name ваш_домен; location / { proxy_pass https://s3.twcstorage.ru/имя_бакета/; proxy_set_header Host s3.twcstorage.ru; proxy_ssl_server_name on; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Authorization ""; proxy_hide_header x-amz-id-2; proxy_hide_header x-amz-request-id; proxy_hide_header Set-Cookie; add_header Cache-Control "public, max-age=3600"; expires 1h; } } ``` Сохраните файл и создайте символическую ссылку на него в каталоге `sites-enabled`: ```shell sudo ln -s /etc/nginx/sites-available/s3_proxy.conf /etc/nginx/sites-enabled/ ``` Проверьте конфигурацию на наличие ошибок: ```shell sudo nginx -t ``` Если ошибок нет, перезапустите Nginx: ```shell sudo systemctl restart nginx ``` Теперь файлы из бакета будут доступны по адресу `http://ваш_домен/имя_файла`. ## Установка SSL-сертификата для прокси Для повышения безопасности настройте HTTPS с помощью Certbot. Установите Certbot и плагин для Nginx: ```shell sudo apt install certbot python3-certbot-nginx ``` Сгенерируйте и установите сертификат: ```shell sudo certbot --nginx -d ваш_домен ``` Certbot автоматически обновит конфигурацию Nginx для работы по HTTPS. После успешного выполнения команда certbot активирует сертификат, и прокси начнёт работать через защищённое соединение. # Статические сайты в S3 Source: https://timeweb.cloud/docs/s3-storage/supported-features/static-websites?utm_source=llms_txt&utm_medium=ai С помощью S3-хранилища вы можете разместить статический сайт. Это удобно, например, для публикации документации, портфолио или лендинга. ## Настройка Для размещения сайта: 1. Загрузите индексный файл в корень бакета — он не должен находиться внутри папки. 2. Остальные файлы (страницы, стили, скрипты, медиа-контент) могут располагаться в директориях. Пример структуры: ```shell index.html pages/ firstpage.html secondpage.html img/ 1.png 2.png css/ style.css js/ index.js 404.html 403.html ``` Файлы можно загрузить через [объектный менеджер](https://timeweb.cloud/docs/s3-storage/manage-storage/object-manager) или с помощью сторонних утилит, например, [Cyberduck](https://timeweb.cloud/docs/s3-storage/tools/cyberduck). После загрузки: 1. Перейдите в раздел «Настройки» бакета. 2. Нажмите кнопку «Изменить» рядом с пунктом «Веб-сайт». ![Scr 20251014 Pxzy](https://content.timeweb.com/assets/76c1641e-7731-4c18-aed1-307b3b86f1e9.png?width=2022&height=1462) В открывшемся окне: 1. Включите статический сайт. 2. При необходимости измените имя индексного файла (по умолчанию index.html). 3. Настройте отображение ошибок — выберите код ошибки (например, 404) и соответствующую страницу. 4. Скопируйте ссылку, по которой будет доступен ваш сайт. 5. Сохраните изменения. ![Image 20251014181641694](https://content.timeweb.com/assets/c2755482-8c6f-466e-8b77-dd520963c409.png?width=2006&height=884) ## Ограничения - На текущий момент нельзя подключить собственный домен. Сайт будет доступен только по адресу вида: ```shell имя_бакета.website.twcstorage.ru ``` - Для работы сайта бакет должен быть публичным. Если сделать его непубличным, страницы начнут возвращать ошибку 403. - [Исходящий трафик тарифицируется](https://timeweb.cloud/docs/s3-storage/tariffication) так же, как и при обычной работе с S3. # Сценарии использования Source: https://timeweb.cloud/docs/s3-storage/use-cases?utm_source=llms_txt&utm_medium=ai Существует множество сценариев использования S3-хранилищ, которые облегчают задачи по хранению и резервному копированию данных. Примеры настройки нескольких популярных вариантов: - [Резервное копирование с Duplicity](https://timeweb.cloud/docs/s3-storage/use-cases/rezervnoe-kopirovanie-s-duplicity) - [Резервное копирование Bitrix в S3](https://timeweb.cloud/docs/s3-storage/use-cases/rezervnoe-kopirovanie-bitrix-v-s3) - [Резервное копирование в ISPmanager](https://timeweb.cloud/docs/s3-storage/use-cases/ispmanager-backups) - [Подключение S3-хранилища в Nextcloud](https://timeweb.cloud/docs/s3-storage/use-cases/connecting-s3-storage-in-nextcloud) # Резервное копирование с Duplicity Source: https://timeweb.cloud/docs/s3-storage/use-cases/rezervnoe-kopirovanie-s-duplicity?utm_source=llms_txt&utm_medium=ai Duplicity — это утилита командной строки для резервного копирования и восстановления. Резервные копии могут быть загружены в хранилище по протоколам SCP, SFTP, WebDAV, S3 и др. Утилита по умолчанию шифрует бэкапы с помощью GnuPG. Ниже рассмотрим настройку duplicity для резервного копирования в объектное хранилище Timeweb Cloud по протоколу S3. ## Подготовка Создайте для размещения резервных копий отдельный бакет. Установите пакет `duplicity`: ```shell sudo apt install duplicity ``` И установите пакет `boto`: ```shell pip3 install boto ``` ## Скрипт для создания резервной копии Создайте файл `backup.sh` со следующим содержимым и замените значения переменных на актуальные. Найти необходимые данные можно в панели управления в настройках бакета. ```bash #!/usr/bin/env bash export AWS_ACCESS_KEY_ID="S3 Access Key" export AWS_SECRET_ACCESS_KEY="S3 Secret Access Key" export PASSPHRASE="пароль_для_шифрования_бэкапа" endpoint_url="https://s3.twcstorage.ru" endpoint_host="s3.twcstorage.ru" # Путь до директории, которую необходимо копировать source=/home # Имя бакета и путь внутри него bucket=имя_бакета path_in_bucket=backup # Запуск duplicity duplicity \ --s3-endpoint-url="$endpoint_url" \ "$source" "s3://$endpoint_host/$bucket/$path_in_bucket" ``` Дайте скрипту права на выполнение командой: ```shell chmod +x backup.sh ``` Запустите скрипт: ```shell ./backup.sh ``` ## Скрипт для восстановления из резервной копии Для восстановления файлов из бэкапа также можно использовать скрипт. Создайте файл `restore.sh` со следующим содержимым: ```bash #!/usr/bin/env bash export AWS_ACCESS_KEY_ID="S3 Access Key" export AWS_SECRET_ACCESS_KEY="S3 Secret Access Key" export PASSPHRASE="пароль_для_шифрования_бэкапа" endpoint_url="https://s3.twcstorage.ru" endpoint_host="s3.twcstorage.ru" bucket=имя_бакета path_in_bucket=backup restore_path=/home/restore_test # сюда восстановим данные duplicity \ --s3-endpoint-url="$endpoint_url" \ "s3://$endpoint_host/$bucket/$path_in_bucket" \ "$restore_path" ``` Дайте скрипту права на выполнение: ```shell chmod +x restore.sh ``` Запустите скрипт: ```shell ./restore.sh ``` # Резервное копирование Bitrix в S3 Source: https://timeweb.cloud/docs/s3-storage/use-cases/rezervnoe-kopirovanie-bitrix-v-s3?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Для корректного создания резервных копий в S3 у вас должен быть установлен модуль «Облачные хранилища» v23.200.0 или выше. Использование S3 для резервного копирования в Битрикс позволяет размещать данные в облаке и легко восстанавливать их при необходимости. Это удобно, потому что S3-хранилища интегрируются с Битрикс напрямую, обеспечивая автоматизацию процесса и сокращая риски потери данных.  Рассмотрим, как настроить резервное копирование в S3-бакет. ## Подключение S3-хранилища 1. Создайте новый бакет по [инструкции](https://timeweb.cloud/docs/s3-storage/manage-storage#sozdanie-baketa). 2. В админке Битрикса перейдите в раздел «Настройки» → «Облачные хранилища» и нажмите на кнопку «Добавить». 3. В меню добавления укажите следующие параметры: - - **Провайдер:** S3 Compatible Storage. - **Имя сервера (API host):** `s3.twcstorage.ru`. Имя сервера указывается без префикса `https://`. - **Ключ доступа:** `Access Key` со страницы управления бакетом. - **Секретный ключ:** `Secret Access Key` со страницы управления бакетом. - **Подключаться с использованием HTTPS:** установите галочку. - **Контейнер:** укажите имя бакета. ![Selection 256](https://content.timeweb.com/assets/9376e90e-8728-446c-84a9-54dc90c63353.png?width=1023&height=962) У вас должен получиться такой результат: ![Screenshot 04 17 25 18:13:01](https://content.timeweb.com/assets/05305b4f-9e3c-40a4-a428-2b467c4349fb.png?width=1591&height=735) _Настройка подключения к облачному хранилищу в интерфейсе [Битрикс](https://www.1c-bitrix.ru/)_ Перейдите в раздел «Правила» и удалите пустое правило. ![Selection 257](https://content.timeweb.com/assets/d251f868-1c93-4e7e-8de5-3aff6c6e3391.png?width=1598&height=670) _Настройка подключения к облачному хранилищу в интерфейсе [Битрикс](https://www.1c-bitrix.ru/)_ Это необходимо, чтобы в бакет не загружались другие файлы, кроме бэкапов. После этого нажмите на кнопку «Сохранить». 4. После настройки подключенное хранилище отобразится в разделе «Настройки» → «Облачные хранилища». ![Screenshot 09 18 24 11:44:29](https://content.timeweb.com/assets/6d73528e-e19b-4256-a831-12913b4a0726.png?width=1911&height=514) _Раздел «Облачные хранилища» в интерфейсе [Битрикс](https://www.1c-bitrix.ru/)_ ## Создание резервной копии Для проверки, что все работает правильно, создайте резервную копию вручную:  1. Перейдите в «Настройки» → «Инструменты» → «Резервное копирование» → «Создание резервной копии». 2. В пункте «Размещение резервной копии» выберите добавленный бакет. 3. Запустите создание копии, нажав на кнопку «Создать резервную копию». ![Screenshot 09 17 24 17:26:30](https://content.timeweb.com/assets/fb247ce3-7da3-4aa4-b4fb-6a92d1aa35d2.png?width=1910&height=856) _Запуск резервного копирования в интерфейсе [Битрикс](https://www.1c-bitrix.ru/)_ 4. После завершения создания копии в панели управления бакетом перейдите во вкладку «Объекты» и проверьте, что копия успешно создана и сохранена в папке «bitrix». ![Screenshot 09 18 24 16:33:09](https://content.timeweb.com/assets/47ad7564-7625-4ac7-9cc5-aef6eeaa2eb4.png?width=1321&height=711) ## Настройка регулярных резервных копий Вы можете настроить создание регулярных резервных копий. Для этого: 1. Перейдите в раздел «Настройки» → «Инструменты» → «Резервное копирование» → «Регулярное резервное копирование».  2. Выберите вкладку «Параметры» и в пункте «Размещение резервной копии» укажите добавленный ранее бакет. 3. Заполните остальные параметры, включая расписание создания бэкапов, ориентируясь на [официальную документацию](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&LESSON_ID=4464&LESSON_PATH=3906.4833.4464). 4. После завершения настройки сохраните изменения. Теперь бэкапы будут создаваться автоматически и загружаться в выбранный бакет. ![Screenshot 09 18 24 16:56:47](https://content.timeweb.com/assets/bf771b76-9bcf-4e02-be90-82d063ce10e1.png?width=1596&height=947) _Настройка регулярных резервных копий в интерфейсе [Битрикс](https://www.1c-bitrix.ru/)_ ## Настройка срока хранения резервных копий Если вы настроили регулярное резервное копирование, со временем копии будут накапливаться в бакете и занимать все больше пространства. Чтобы не удалять устаревшие копии вручную, настройте [жизненный цикл объектов](https://timeweb.cloud/docs/s3-storage/supported-features/object-lifecycle). Он позволяет автоматически удалять резервные копии по истечении заданного срока. > [!NOTE] > Правило удаляет объекты по возрасту, даже если новые резервные копии перестали создаваться. Выбирайте срок хранения с запасом и периодически проверяйте успешность резервного копирования. Для настройки правила: 1. Откройте панель управления S3-бакетом и перейдите на вкладку «Настройки». 2. В строке «Жизненный цикл» нажмите «Настроить». 3. Нажмите «Добавить правило». 4. В поле «Префикс объекта» укажите `bitrix/backup/`. Правило будет применяться только к резервным копиям, которые Битрикс сохраняет в этой папке. 5. Выберите действие «Удалить объекты» и укажите срок хранения в днях. 6. Сохраните правило. ![Scr 20260807 Olvp](https://content.timeweb.com/assets/50636f9b-8271-4370-9346-34f68e3295bc.png?width=2744&height=1636) Например, если резервные копии создаются ежедневно, а хранить необходимо копии за последние 30 дней, укажите срок удаления 30 дней. После сохранения правила объекты из папки `bitrix/backup/` будут автоматически удаляться по истечении заданного срока. Просмотреть, изменить или временно отключить правило можно в настройках жизненного цикла бакета. ## Восстановление из резервной копии Для восстановления из резервной копии перейдите в «Настройки» → «Инструменты» → «Резервное копирование» → «Список резервных копий», нажмите на кнопку с тремя черточками рядом с необходимой копией. В открывшемся меню выберите пункт «Восстановить». ![Screenshot 09 18 24 12:02:15](https://content.timeweb.com/assets/ef671259-0d13-4e10-9961-5577cd0a19b5.png?width=1905&height=848) _Просмотр резервных копий и опция восстановления в интерфейсе [Битрикс](https://www.1c-bitrix.ru/)_ После этого запустится мастер восстановления из резервных копий. В меню мастера выберите пункт «Скачать резервную копию с другого сайта», где по умолчанию будет указана ссылка на бакет. После скачивания и распаковки архива, при необходимости, выполните восстановление базы данных. Более подробную информацию о процессе восстановления из резервной копии вы можете найти в [официальной документации Битрикс](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&LESSON_ID=6979&LESSON_PATH=3906.4833.6979). # Резервное копирование ispmanager в S3 Source: https://timeweb.cloud/docs/s3-storage/use-cases/ispmanager-backups?utm_source=llms_txt&utm_medium=ai Использование S3-хранилища для создания резервных копий в ispmanager — это удобный способ хранения данных вне сервера. S3 обеспечивает высокую доступность и безопасность, позволяя настраивать резервное копирование под нужды вашего проекта. В данной инструкции мы пошагово разберем, как подключить S3 в ispmanager и настроить создание резервных копий. Для начала перейдите в раздел «Резервные копии» и нажмите на кнопку «Настройки». ![Selection 019](https://content.timeweb.com/assets/0c8ac2ef-0e44-4a8c-84de-5f6a04391761.png?width=1479&height=808) _Раздел «Резервные копии» в интерфейсе [ispmanager](https://www.ispmanager.ru/)_ ## Настройка параметров S3 - В разделе «Тип хранилища» выберите «S3-совместимое». - В поле «URL хранилища» укажите: `https://s3.twcstorage.ru`. - В поле «Идентификатор ключа» укажите ваш `Access Key`. - В поле «Секретный ключ» укажите ваш `Secret Access Key`. - В поле «Корзина» выберите имя вашего бакета. - Поставьте галочку напротив «Автоматически определять регион корзины», чтобы система самостоятельно определяла нужный регион. Необходимые данные вы можете получить на странице «Дашборд». ![Selection 046](https://content.timeweb.com/assets/1640b4c1-ed86-48fe-99fa-a44c289f0b80.png?width=1045&height=962) После указания всех параметров у вас должен получиться подобный результат: ![Selection 027](https://content.timeweb.com/assets/2aca08c7-852f-4d53-acc4-9c02f6650d4e.png?width=1479&height=808) _Пример настройки резервного копирования в интерфейсе [ispmanager](https://www.ispmanager.ru/)_ ## Настройка расширенных параметров Вы можете настроить дополнительные параметры резервного копирования, перейдя в «Расширенные настройки», где можно задать дополнительные параметры резервного копирования, например: - Исключить из резервной копии определенные директории или файлы. - Задать количество копий, которые будут храниться одновременно. - Указать ограничение на общий объем хранилища, используемого для копий. ![Selection 022](https://content.timeweb.com/assets/a5ebaa59-ee88-482b-8765-ac5ed088ff6b.png?width=1474&height=808) _Пример настройки резервного копирования в интерфейсе [ispmanager](https://www.ispmanager.ru/)_ После настройки всех параметров нажмите «Сохранить», чтобы применить изменения. ## Проверка создания резервной копии Чтобы проверить правильность настроек, создайте тестовую копию. В разделе «Резервные копии» нажмите на «Создать копию» и выберите «Копия системных файлов и данных пользователей». После завершения создания копии перейдите в панель управления бакетом и убедитесь, что архивы копий успешно появились во вкладке «Объекты». ![Selection 024](https://content.timeweb.com/assets/e1a4c071-ca0c-464c-a88c-a30f49f1e118.png?width=1027&height=562) ## Настройка расписания создания копий После проверки резервного копирования можно настроить автоматическое создание копий по расписанию. Для этого перейдите в раздел «Расписание» в настройках резервных копий и укажите желаемые параметры создания копий. ![Selection 025](https://content.timeweb.com/assets/c29fd8d2-72da-4b50-979b-d16a46b78741.png?width=1476&height=807) _Настройка расписания резервного копирования в интерфейсе [ispmanager](https://www.ispmanager.ru/)_ Теперь ваш сервер настроен на регулярное резервное копирование данных в S3-хранилище, что обеспечит надежное и безопасное хранение ваших данных. # Подключение S3-хранилища в Nextcloud Source: https://timeweb.cloud/docs/s3-storage/use-cases/connecting-s3-storage-in-nextcloud?utm_source=llms_txt&utm_medium=ai Использование S3-хранилища в Nextcloud в качестве внешнего хранилища позволяет хранить файлы в облаке и получать быстрый доступ к ним. Такая интеграция снижает риски потери данных и уменьшает нагрузку на локальный сервер. В этой статье мы рассмотрим, как настроить подключение S3-хранилища к Nextcloud. ## Подключение S3-хранилища 1. Войдите в Nextcloud под учетной записью администратора. 2. Активируйте поддержку внешних хранилищ: - - Перейдите в раздел «Приложения», затем во вкладку «Ваши приложения». ![Image1](https://content.timeweb.com/assets/f8ce4f3b-cb2e-4411-83d5-bddc0b2372bd.png?width=1474&height=805) _Раздел «Ваши приложения» в интерфейсе [Nextcloud](https://nextcloud.com/)_ - - Найдите в списке расширение «External storage support» и включите его, нажав кнопку «Включить». 3. Настройте подключение S3: - - Перейдите в раздел «Параметры сервера» и выберите вкладку «Внешнее хранилище». ![Image5](https://content.timeweb.com/assets/e22cf810-2fd6-4dde-9cb9-a5e4dd8b8a45.png?width=1376&height=805) _Раздел «Внешнее хранилище» в интерфейсе [Nextcloud](https://nextcloud.com/)_ - - В столбце «Добавить хранилище» выберите «Amazon S3», а в поле «Аутентификация» выберите «Ключ доступа». 4. Заполните настройки конфигурации: - - **Имя папки:** укажите имя, которое будет отображаться в файловом менеджере Nextcloud. - **Корзина:** введите имя вашего бакета. - **Имя хоста:** укажите `s3.twcstorage.ru`, без префикса `https://`. - **Порт:** оставьте это поле пустым. - **Регион:** укажите `ru-1`. - **Ключ доступа:** введите `Access Key`, полученный на странице управления бакетом. - **Секретный ключ:** введите `Secret Access Key` со страницы управления бакетом. - **Использовать SSL:** убедитесь, что галочка установлена. - Остальные параметры оставьте по умолчанию. ![Selection 049](https://content.timeweb.com/assets/c9c13f72-2dae-4570-8ed0-0c503c720f92.png?width=1074&height=953) 5. Настройте доступ для пользователей: - - В столбце «Доступно для» выберите нужных пользователей или группы, либо установите галочку «Все пользователи». 6. Сохраните изменения, нажав на кнопку «Сохранить». ![Image3](https://content.timeweb.com/assets/8c9c6345-bea3-4cbe-ba25-a6ea8ddb7027.png?width=1476&height=806) _Раздел «Внешнее хранилище» в интерфейсе [Nextcloud](https://nextcloud.com/)_ Теперь подключенное S3-хранилище будет отображаться в файловом менеджере Nextcloud.  ![Image4](https://content.timeweb.com/assets/6c47021a-ce6b-443d-947e-1ceb9f6e039f.png?width=1028&height=504) _Раздел «Все файлы» в интерфейсе [Nextcloud](https://nextcloud.com/)_ ## Проверка корректности настроек Для проверки корректности настроек загрузите любой файл в подключенную папку и убедитесь, что этот файл появился в бакете во вкладке «Объекты» в панели управления бакетом. ![Image2](https://content.timeweb.com/assets/129b090f-0841-4ae9-98df-b9485620e7a3.png?width=1030&height=508) На скриншоте видно, что тестовый файл отображается в бакете, что подтверждает правильность настройки подключения. # SDK для S3 Source: https://timeweb.cloud/docs/s3-storage/sdk?utm_source=llms_txt&utm_medium=ai SDK для S3 — это библиотеки для работы с объектным хранилищем напрямую из кода. С помощью SDK можно выполнить все те же действия, что и с помощью консольных клиентов S3, например загрузку и скачивание файлов, получение списка объектов, удаление и генерацию подписанных ссылок. В этом разделе собраны примеры использования SDK на разных языках программирования: - [Python](https://timeweb.cloud/docs/s3-storage/sdk/python) - [Node.js](https://timeweb.cloud/docs/s3-storage/sdk/javascript) - [PHP](https://timeweb.cloud/docs/s3-storage/sdk/php) # Python Source: https://timeweb.cloud/docs/s3-storage/sdk/python?utm_source=llms_txt&utm_medium=ai [boto3](https://pypi.org/project/boto3/) — это официальный SDK от Amazon для работы с S3 на языке Python. С его помощью можно управлять объектами: загружать и скачивать файлы, получать списки объектов, работать с метаданными, выполнять мультипарт-загрузку и создавать подписанные URL. ## Установка Для установки `boto3` используйте `pip`: ```bash pip install boto3 ``` После установки библиотека доступна для использования в Python-коде. ## Настройка доступа При использовании `boto3` реквизиты доступа можно задать несколькими способами: ### Через файлы ~/.aws/config и ~/.aws/credentials При использовании [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli) в домашней директории пользователя автоматически создается папка .aws с файлами, содержащими данные для подключения к S3. При необходимости эту папку и файлы можно создать вручную — без использования AWS CLI.  Файл `~/.aws/credentials` должен содержать такие данные: ```bash [default] aws_access_key_id = aws_secret_access_key = ``` И `~/.aws/config`: ```bash [default] output = json endpoint_url = https://s3.twcstorage.ru region = ru-1 ``` При использовании профиля `default` дополнительная настройка в коде не требуется — `boto3` автоматически подхватит эти данные. ### Через переменные окружения Реквизиты доступа можно задать с помощью переменных окружения: ```bash export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY= ``` ### Через код приложения Реквизиты можно передать напрямую при создании клиента S3: ```py import boto3 s3 = boto3.client( "s3", aws_access_key_id="", aws_secret_access_key="", endpoint_url="https://s3.twcstorage.ru", region_name="ru-1" ) ``` Этот способ не рекомендуется для продакшена, так как ключи доступа хранятся непосредственно в коде. ### Использование отдельных профилей Если в файлах `~/.aws/config` и `~/.aws/credentials` настроено несколько профилей, можно явно указать нужный профиль при создании сессии: ```py import boto3 session = boto3.Session(profile_name="myprofile") s3 = session.client("s3") ``` Это удобно, если один и тот же код используется для работы с несколькими бакетами или окружениями. ## Пример Рассмотрим, как при помощи SDK выполнять базовые операции с объектами. В этом примере скрипт: - загружает файл в бакет; - выводит список всех объектов; - скачивает загруженный файл под другим именем; - удаляет объект из хранилища. Предварительно создайте файл с именем `example.txt` в той же директории, где находится скрипт. Код скрипта: ```py import boto3 import os bucket_name = "имя_бакета" endpoint_url = "https://s3.twcstorage.ru" local_upload_path = "example.txt" s3_key = "example.txt" local_download_path = "downloaded_example.txt" # Создание клиента S3 s3 = boto3.client("s3", endpoint_url=endpoint_url) # 1. Загрузка файла в бакет if os.path.exists(local_upload_path): print(f"Загрузка файла {local_upload_path} в бакет...") s3.upload_file(local_upload_path, bucket_name, s3_key) print("Загрузка завершена.") else: print(f"Файл {local_upload_path} не найден. Пропуск загрузки.") # 2. Получение списка объектов в бакете print("\nСодержимое бакета:") paginator = s3.get_paginator("list_objects_v2") for page in paginator.paginate(Bucket=bucket_name): for obj in page.get("Contents", []): print(f"- {obj['Key']}") # 3. Скачивание файла из бакета print(f"\nСкачивание {s3_key} в {local_download_path}...") s3.download_file(bucket_name, s3_key, local_download_path) print("Скачивание завершено.") # 4. Удаление файла из бакета print(f"\nУдаление {s3_key} из бакета...") s3.delete_object(Bucket=bucket_name, Key=s3_key) print("Удаление завершено.") ``` Дополнительные примеры использования SDK вы можете найти в [нашем репозитории GitHub](https://github.com/timeweb-cloud/s3-examples/tree/master/python3). # JavaScript Source: https://timeweb.cloud/docs/s3-storage/sdk/javascript?utm_source=llms_txt&utm_medium=ai `[@aws-sdk/client-s3](https://www.npmjs.com/package/@aws-sdk/client-s3)` — это официальная библиотека AWS SDK для работы с сервисом S3 на языке JavaScript. С ее помощью можно загружать и скачивать файлы, получать списки объектов, удалять их, использовать мультипарт-загрузку и формировать подписанные ссылки. ## Установка Для установки используйте `npm` или `yarn`: ``` npm install @aws-sdk/client-s3 ``` или ``` yarn add @aws-sdk/client-s3 ``` ## Настройка доступа При использовании `@aws-sdk/client-s3` реквизиты доступа можно задать несколькими способами. ### Через файлы `~/.aws/config` и `~/.aws/credentials` При использовании [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli) в домашней директории пользователя автоматически создается папка `.aws` с файлами, содержащими данные для подключения к S3. При необходимости эту папку и файлы можно создать вручную — без использования AWS CLI. Файл `~/.aws/credentials` должен содержать такие данные: ``` [default] aws_access_key_id = aws_secret_access_key = ``` И `~/.aws/config`: ``` [default] output = json endpoint_url = https://s3.twcstorage.ru region = ru-1 ``` ### Через переменные окружения Реквизиты можно задать с помощью переменных окружения: ``` export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY= ``` ### Через код приложения Полная настройка клиента с явной передачей всех параметров: ```js const { S3Client } = require("@aws-sdk/client-s3"); const s3 = new S3Client({ region: "ru-1", endpoint: "https://s3.twcstorage.ru", credentials: { accessKeyId: "", secretAccessKey: "" } }); ``` ### Использование профиля AWS CLI Если настроено несколько профилей, можно указать нужный через переменную окружения: ``` export AWS_PROFILE=myprofile ``` В этом случае можно создать клиента без передачи ключей: ```js const s3 = new S3Client({ region: "ru-1", endpoint: "https://s3.twcstorage.ru" }); ``` ## Пример Рассмотрим, как при помощи SDK выполнять базовые операции с объектами. В этом примере скрипт: - загружает файл в бакет; - выводит список всех объектов; - скачивает загруженный файл под другим именем; - удаляет объект из хранилища. Предварительно создайте файл с именем `example.txt` в той же директории, где находится скрипт. Код скрипта: ```js const { S3Client, ListObjectsV2Command, PutObjectCommand, GetObjectCommand, DeleteObjectCommand } = require("@aws-sdk/client-s3"); const { createReadStream, createWriteStream, existsSync } = require("fs"); const { pipeline } = require("stream"); const { promisify } = require("util"); const pipe = promisify(pipeline); const bucketName = "имя_бакета"; const region = "ru-1"; const endpoint = "https://s3.twcstorage.ru"; const localUploadPath = "example.txt"; const s3Key = "example.txt"; const localDownloadPath = "downloaded_example.txt"; // Создание клиента S3 const s3 = new S3Client({ region, endpoint, }); async function main() { // 1. Загрузка файла if (existsSync(localUploadPath)) { console.log(`Загрузка файла ${localUploadPath} в бакет...`); await s3.send(new PutObjectCommand({ Bucket: bucketName, Key: s3Key, Body: createReadStream(localUploadPath), })); console.log("Загрузка завершена."); } else { console.log(`Файл ${localUploadPath} не найден. Пропуск загрузки.`); } // 2. Список объектов console.log("\nСодержимое бакета:"); const list = await s3.send(new ListObjectsV2Command({ Bucket: bucketName })); (list.Contents || []).forEach((obj) => { console.log(`- ${obj.Key}`); }); // 3. Скачивание console.log(`\nСкачивание ${s3Key} в ${localDownloadPath}...`); const { Body } = await s3.send(new GetObjectCommand({ Bucket: bucketName, Key: s3Key, })); if (Body) { await pipe(Body, createWriteStream(localDownloadPath)); console.log("Скачивание завершено."); } // 4. Удаление console.log(`\nУдаление ${s3Key} из бакета...`); await s3.send(new DeleteObjectCommand({ Bucket: bucketName, Key: s3Key })); console.log("Удаление завершено."); } main().catch((err) => { console.error("Ошибка при выполнении операций:", err); }); ``` Дополнительные примеры использования SDK вы можете найти в [нашем репозитории GitHub](https://github.com/timeweb-cloud/s3-examples/tree/master/nodejs). # PHP Source: https://timeweb.cloud/docs/s3-storage/sdk/php?utm_source=llms_txt&utm_medium=ai `[aws/aws-sdk-php](https://github.com/aws/aws-sdk-php)` — это официальный SDK от Amazon для работы с S3 на языке PHP. Он позволяет выполнять базовые операции с объектами в S3: загрузку, скачивание, удаление, вывод списка объектов, а также формирование подписанных ссылок. ## Установка Установите библиотеку с помощью Composer: ``` composer require aws/aws-sdk-php ``` После установки библиотека будет расположена в директории `vendor`. Для ее использования подключите библиотеку: ```php require 'vendor/autoload.php'; ``` Для корректной работы SDK требуется установленный PHP-модуль `ext-xml`. Проверьте наличие модуля командой: ``` php -m | grep xml ``` Если модуль не установлен, установите его: - Debian/Ubuntu: `sudo apt install php-xml` - Alpine: `apk add php8-xml` - RHEL/CentOS: `sudo yum install php-xml` ## Настройка доступа Реквизиты доступа можно задать несколькими способами. ### Через файлы `~/.aws/config` и `~/.aws/credentials` При использовании [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli) в домашней директории пользователя автоматически создается папка `.aws` с файлами, содержащими данные для подключения к S3. При необходимости эту папку и файлы можно создать вручную — без использования AWS CLI. Файл `~/.aws/credentials` должен содержать такие данные: ``` [default] aws_access_key_id = aws_secret_access_key = ``` И `~/.aws/config`: ``` [default] output = json endpoint_url = https://s3.twcstorage.ru region = ru-1 ``` ### Через переменные окружения Можно задать переменные: ``` export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY= ``` И использовать SDK без дополнительной настройки: ```php $s3 = new Aws\S3\S3Client([    'region' => 'ru-1',    'version' => 'latest',    'endpoint' => 'https://s3.twcstorage.ru', ]); ``` ### Через код Можно явно задать реквизиты при создании клиента: ```php use Aws\S3\S3Client; ​ $s3 = new S3Client([    'region' => 'ru-1',    'version' => 'latest',    'endpoint' => 'https://s3.twcstorage.ru',    'credentials' => [        'key' => '',        'secret' => '',   ], ]); ``` ### Использование другого профиля AWS CLI Если в `~/.aws/credentials` настроено несколько профилей, можно указать нужный: ```php $s3 = new S3Client([    'profile' => 'myprofile',    'region' => 'ru-1',    'version' => 'latest',    'endpoint' => 'https://s3.twcstorage.ru', ]); ``` ## Пример Пример ниже демонстрирует базовые операции с объектами: - загрузка файла в бакет; - вывод списка объектов; - скачивание файла; - удаление объекта. Предварительно создайте файл с именем `example.txt` в той же директории, где находится скрипт. Код скрипта: ```php 'ru-1', 'version' => 'latest', 'endpoint' => 'https://s3.twcstorage.ru', 'credentials' => [ 'key' => '', 'secret' => '', ], ]); try { // 1. Загрузка файла в бакет if (file_exists($localUpload)) { echo "Загрузка файла $localUpload...\n"; $s3->putObject([ 'Bucket' => $bucket, 'Key' => $key, 'SourceFile' => $localUpload, ]); echo "Загрузка завершена.\n"; } else { echo "Файл $localUpload не найден. Пропуск загрузки.\n"; } // 2. Получение списка объектов echo "\nСодержимое бакета:\n"; $result = $s3->listObjectsV2([ 'Bucket' => $bucket, ]); if (!empty($result['Contents'])) { foreach ($result['Contents'] as $object) { echo "- {$object['Key']}\n"; } } else { echo "(Бакет пустой)\n"; } // 3. Скачивание файла echo "\nСкачивание $key в $localDownload...\n"; $s3->getObject([ 'Bucket' => $bucket, 'Key' => $key, 'SaveAs' => $localDownload, ]); echo "Скачивание завершено.\n"; // 4. Удаление файла echo "\nУдаление $key из бакета...\n"; $s3->deleteObject([ 'Bucket' => $bucket, 'Key' => $key, ]); echo "Удаление завершено.\n"; } catch (AwsException $e) { echo "Ошибка: {$e->getMessage()}\n"; } ``` Дополнительные примеры использования SDK вы можете найти в [нашем репозитории GitHub](https://github.com/timeweb-cloud/s3-examples/tree/master/php).