Открыть публичный доступ к операциям с бакетом

По умолчанию бакеты в Object Storage создаются с приватным доступом. Это значит, что записывать и перезаписывать объекты в бакет, а также настраивать к ним доступ, может только авторизованный пользователь с персональным API-ключом или ключом сервисного аккаунта.

Чтобы пользователи и приложения имели доступ к данным в бакете без авторизации, настройте публичный доступ:

Управлять публичным доступом можно через ACL и Bucket Policy.

Внимание

Публичный доступ к бакету дает возможность совершать операции с объектами широкому кругу лиц. Убедитесь заранее, что в публичный доступ не попадает ваша конфиденциальная информация.

Мы как поставщик инфраструктуры обеспечиваем надежность хранения данных в нашем облаке, а вы как владелец самих данных обеспечиваете контроль доступа к ним и отвечаете за их сохранность (подробнее — в пп. 1.1.6. , пп. 1.1.9, п. 1.2. Приложения 3 к Договору).

Напишите в техническую поддержку — и мы расскажем, с чего начать, чтобы правильно организовать работу с Object Storage.

Открыть доступ через ACL

ACL позволяет выдать пользователям разрешения на операции с объектами в бакете: чтение списка объектов, скачивание, запись и перезапись.

Все новые бакеты или объекты в хранилище создаются с отключенным ACL и параметром владения ресурсом OwnershipControls = BucketOwnerEnforced. Подробнее в документации AWS.

  1. Установите и настройте AWS CLI.

  2. Измените значение на OwnershipControls=ObjectWriter для бакета:

    aws --endpoint-url=https://s3.cloud.ru s3api put-bucket-ownership-controls --bucket <bucket_name> --ownership-controls="Rules=[{ObjectOwnership=ObjectWriter}]"
    

    где:

    • <endpoint> — URL, адрес доступа к бакету.

    • put-bucket-ownership-controls — команда, устанавливает владение объектами бакета.

    • <bucket_name> — название бакета.

    • --ownership-controls — параметр, устанавливает правила для бакета.

  3. Назначьте права на чтение и запись через предопределенное разрешение — Canned ACL.

    aws --endpoint-url=https://s3.cloud.ru s3api put-bucket-acl --bucket <bucket_name> --acl public-read-write
    

После назначения ACL проверьте, что можно загрузить объекты в бакет как неавторизованный пользователь.

Открыть доступ через Bucket Policy

Bucket Policy — более гибкая настройка правил доступа к ресурсам. Например, вы можете запретить определенные действия с объектами или разрешить доступ к ресурсам только для указанных в политике IP-адресов.

Bucket Policy настраивается с помощью JSON-файла политики. Для создания политики воспользуйтесь генератором политик AWS.

Пример политики

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AddPerm",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::<bucket-name>",
        "arn:aws:s3:::<bucket-name>/*"
      ]
    }
  ]
}

где:

  • Sid — дополнительный идентификатор политики. Значение Sid должно быть уникальным в рамках политики.

  • Effect — разрешение политики, обязательный элемент. Может иметь значение Allow или Deny.

  • Principal — получатель разрешения, например, пользователь или сервис. Если указать *, то политика будет назначена для всех пользователей, в том числе анонимных.

  • Actionдействие, которое разрешает или запрещает политика.

  • Resource — ресурс, на который действует политика. В качестве ресурса может быть указан бакет, объект в бакете (<bucket_name>/../<key>) или префикс *.

  1. Установите и настройте AWS CLI.

  2. Сгенерируйте файл политики, которая разрешает публичный доступ на чтение и скачивание объектов бакета для любого пользователя. Сохраните политику в файл policy.json.

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

    aws --endpoint-url=https://s3.cloud.ru s3api put-bucket-policy --bucket <bucket-name> --policy file://path/to/policy.json
    

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

Загрузить объект в бакет

Чтобы загрузить объект в бакет как неавторизованный пользователь убедитесь, что для бакета указаны его глобальное название или доменное имя.

  1. В личном кабинете перейдите на Evolution.

  2. В разделе Хранение данных выберите Object Storage.

  3. Нажмите на Название бакета — откроется его карточка.

  4. Проверьте, что для бакета указаны Глобальное название или Доменное имя.

    Что делать, если поля не заполнены

    Если ни одно из полей не заполнено:

    1. Нажмите Редактировать.

    2. Укажите Глобальное название или Доменное имя в соответствии с требованиями к именованию.

    3. Нажмите Сохранить изменения.

  5. Загрузите объект в бакет с адресацией через:

    • глобальное название — 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 Continue

HTTP/2 200 OK
x-amz-request-id: 318BC8BC148832E5
x-amz-copy-source-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo
x-amz-version-id: QUpfdndhfd8438MNFDN93jdnJFkdmqnh893
Date: Wed, 25 Oct 2023 22:32:00 GMT
ETag: "1b2cf535f27731c974343645a3985328"
Content-Length: 0
Connection: close
Server: s3.cloud.ru

Закрыть публичный доступ

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

ACL

Чтобы закрыть доступ к ресурсам, отключите ACL (OwnershipControls = BucketOwnerEnforced).

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

aws --endpoint-url=https://s3.cloud.ru s3api put-bucket-ownership-controls --bucket <bucket-name> --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerEnforced}]"

Подсказка

Удалить созданный ACL нельзя. Чтобы удалить разрешения, передайте пустой ACL.

BucketPolicy

Закрыть доступ к ресурсам можно с помощью AWS CLI или API.

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

aws --endpoint-url=https://s3.cloud.ru s3api delete-bucket-policy --bucket <bucket-name>
Запустили Evolution free tier
для Dev & Test
Получить