Настроить публичный доступ к бакету в Object Storage
По умолчанию бакеты в Object Storage создаются с приватным доступом. Это значит, что загружать объекты в бакет, изменять их версии, а также настраивать к ним доступ может только авторизованный пользователь с персональным API-ключом или ключом сервисного аккаунта.
Чтобы пользователи и приложения имели доступ к объектам в бакете без авторизации, настройте публичный доступ:
на получение объектов из бакета;
на чтение списка объектов в бакете;
на загрузку объектов в бакет.
Управлять публичным доступом можно через ACL и Bucket Policy.
Публичный доступ к бакету дает возможность совершать операции с объектами широкому кругу лиц. Убедитесь заранее, что в публичный доступ не попадает ваша конфиденциальная информация.
Мы как поставщик инфраструктуры обеспечиваем надежность хранения данных в нашем облаке, а вы как владелец самих данных обеспечиваете контроль доступа к ним и отвечаете за их сохранность (подробнее — в пп. 1.1.6. , пп. 1.1.9, п. 1.2. Приложения 3 к Договору).
Напишите в техническую поддержку — и мы расскажем, с чего начать, чтобы правильно организовать работу с Object Storage.
Открыть доступ через ACL
ACL позволяет выдать пользователям разрешения на операции с объектами в бакете: чтение списка объектов, скачивание, запись и перезапись.
Все новые бакеты или объекты в хранилище создаются с отключенным ACL и параметром владения ресурсом OwnershipControls = BucketOwnerEnforced. Подробнее в документации AWS.
Измените значение на OwnershipControls=ObjectWriter для бакета:
aws s3api put-bucket-ownership-controls \--endpoint-url=https://s3.cloud.ru \--bucket <bucket_name> \--ownership-controls="Rules=[{ObjectOwnership=ObjectWriter}]"где:
<endpoint> — URL, адрес доступа к бакету.
put-bucket-ownership-controls — команда, устанавливает владение объектами бакета.
<bucket_name> — название бакета.
--ownership-controls — параметр, устанавливает правила для бакета.
Назначьте права на чтение и запись через предопределенное разрешение — Canned ACL.
aws --endpoint-url=https://s3.cloud.ru s3api put-bucket-acl --bucket <bucket_name> --acl public-read-write
После назначения ACL проверьте, что можно загрузить объекты в бакет как неавторизованный пользователь.
Закрыть публичный доступ через ACL
Чтобы закрыть доступ к ресурсам, отключите ACL (OwnershipControls = BucketOwnerEnforced).
Выполните команду:
aws s3api put-bucket-ownership-controls \--endpoint-url=https://s3.cloud.ru \--bucket <bucket_name> \--ownership-controls="Rules=[{ObjectOwnership=BucketOwnerEnforced}]"
Удалить созданный ACL нельзя. Чтобы удалить разрешения, передайте пустой ACL.
Открыть доступ через Bucket Policy
Авторизуйтесь в личном кабинете.
На верхней панели слева нажмите
и выберите Хранение данных → Object Storage.
В списке бакетов выберите нужный.
Слева выберите Настройка Bucket Policy.
Активируйте опцию Публичный доступ к бакету.
После назначения политики доступа проверьте возможность загрузить объект в бакет как неавторизованный пользователь.
Закрыть публичный доступ через BucketPolicy
Авторизуйтесь в личном кабинете.
На верхней панели слева нажмите
и выберите Хранение данных → Object Storage.
В списке бакетов выберите нужный.
Слева выберите Настройка Bucket Policy.
Деактивируйте опцию Публичный доступ к бакету.
Загрузить объект в публичный бакет
Авторизуйтесь в личном кабинете.
На верхней панели слева нажмите
и выберите Хранение данных → Object Storage.
В списке бакетов выберите нужный.
Слева выберите О бакете.
Проверьте, что для бакета указаны Глобальное название или Доменное имя.
Если ни одно из полей не заполнено, измените настройки бакета.
Загрузите объект в бакет с адресацией через:
глобальное название — https://global.s3.cloud.ru/<global_bucket_name>/<object_key>.
доменное имя — https://<domain_bucket_name>.s3.cloud.ru/<object_key>.
Пример загрузки файла my_image.png в бакет по глобальному названию global_my_bucket:
curl --location --request PUT 'https://global.s3.cloud.ru/global_my_bucket/images' \--header 'Content-Type: image/png' \--data '@path/to/my_image.png'
Результат:
HTTP/2 100 ContinueHTTP/2 200 OKx-amz-request-id: 318BC8BC********x-amz-copy-source-version-id: 3/L4kqtJlcpX********x-amz-version-id: QUpfdndhfd8438MNFDN93jdnJFk********Date: Wed, 25 Oct 2023 22:32:00 GMTETag: "1b2cf535f27731c974343645********"Content-Length: 0Connection: closeServer: s3.cloud.ru
- Открыть доступ через ACL
- Закрыть публичный доступ через ACL
- Открыть доступ через Bucket Policy
- Закрыть публичный доступ через BucketPolicy
- Загрузить объект в публичный бакет