Настройка Яндекс Object Storage для 1С-Битрикс
Яндекс Object Storage — S3-совместимое хранилище, но с несколькими отличиями от AWS, которые ломают стандартную S3-интеграцию Битрикса. Endpoint не amazonaws.com, регион всегда ru-central1, и URL бакета имеет собственный формат.
Параметры подключения
Endpoint Яндекс Object Storage: https://storage.yandexcloud.net. Регион: ru-central1. URL публичного доступа к файлам: https://[bucket].storage.yandexcloud.net/[key] — virtual hosted style.
В /bitrix/admin/main_cloud_storage.php:
- Тип хранилища: Amazon S3 (совместимо)
-
Endpoint:
https://storage.yandexcloud.net -
Region:
ru-central1 - Access Key: идентификатор статического ключа из консоли Яндекс.Облако
- Secret Key: секретный ключ
- Bucket: имя бакета
Создание сервисного аккаунта и ключей — в консоли Яндекс.Облако: IAM → Сервисные аккаунты → Создать → Выдать роль storage.editor на бакет → Создать статический ключ доступа.
Расхождение с модулем Битрикса
Модуль main.cloudstorages в Битриксе использует AWS SDK PHP. При подключении к Яндекс Object Storage через этот SDK возникает проблема со Signature Version. Яндекс поддерживает только AWS Signature Version 4 (SigV4), а SDK по умолчанию для кастомных endpoint может пытаться использовать SigV2. Явное указание версии подписи:
// Класс /bitrix/modules/main/lib/cloudstorages/amazon.php
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => 'ru-central1',
'endpoint' => 'https://storage.yandexcloud.net',
'signature' => 'v4',
'credentials' => [
'key' => $accessKey,
'secret' => $secretKey,
],
]);
Если модуль не позволяет передать параметр signature через интерфейс, редактируется класс-провайдер с бэкапом — или применяется патч через наследование.
CORS для загрузки из браузера
При использовании прямой загрузки в Object Storage из браузера (presigned URL) необходима CORS-конфигурация бакета. В консоли Яндекс.Облако, раздел "CORS":
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>https://example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<MaxAgeSeconds>3600</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>
Без CORS браузер блокирует загрузку файлов из редактора TinyMCE или кастомных форм загрузки.
Lifecycle-политики для временных файлов
В Яндекс Object Storage поддерживаются lifecycle-правила — автоматическое удаление файлов старше N дней. Это полезно для временных файлов импорта/экспорта, которые Битрикс складывает в /upload/tmp/ и /upload/import/. Настройка в консоли или через API:
{
"Rules": [{
"ID": "cleanup-tmp",
"Status": "Enabled",
"Filter": { "Prefix": "upload/tmp/" },
"Expiration": { "Days": 7 }
}]
}
Настройка CDN
Яндекс Cloud CDN интегрируется с Object Storage в две минуты: создать CDN-ресурс с источником — бакет Object Storage, указать домен CDN в настройках модуля main.cloudstorages как CDN_URL. После этого Битрикс формирует публичные URL через CDN, а файлы раздаются с ближайшей точки присутствия.
Параметр в настройках модуля:
\Bitrix\Main\Config\Option::set('main', 'cloud_storage_cdn_url', 'https://cdn.example.com');
При этом запись файлов идёт напрямую в бакет, а чтение — через CDN. Для Битриксового кэша ресайзов изображений это даёт ощутимый прирост скорости загрузки страниц каталога.







