- tocdepth
2
Открыть публичный доступ к операциям с бакетом в 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 --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
— параметр, устанавливает правила для бакета.
Назначьте права на чтение и запись через предопределенное разрешение — Canned ACL.
aws --endpoint-url=https://s3.cloud.ru s3api put-bucket-acl --bucket <bucket_name> --acl public-read-write
Выполите команду PutBucketOwnershipControls. В теле запроса передайте параметр
OwnershipControls=ObjectWriter
.PUT /<bucket-name>?/ownershipControls= HTTP/2 Host: s3.cloud.ru Date: Wed, 25 Oct 2023 22:32:00 GMT x-amz-content-sha256: bafb46c18574a73704c8227aef060df1c12ea0d964e19b949d06e9f763805fe2 Authorization: authorization string <?xml version="1.0" encoding="UTF-8"?> <OwnershipControls xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Rule> <ObjectOwnership>ObjectWriter</ObjectOwnership> </Rule> </OwnershipControls>
Выполните команду PutBucketAcl. В теле запроса укажите права
READ
иWRITE
для группыAllUsers
:PUT /<bucket-name>?acl HTTP/2 Host: s3.cloud.ru Content-Length: 1660 Date: Wed, 25 Oct 2023 22:32:00 GMT Authorization: authorization string <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>852b113e7a2f25102679df27bb0ae12b3f85be6</ID> <DisplayName>OwnerDisplayName</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" _XMLSchema-instance:type="CanonicalUser"> <ID>852b113e7a2f25102679df27bb0ae12b3f85be6</ID> <DisplayName>OwnerDisplayName</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> <Grant> <Grantee xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" _XMLSchema-instance:type="Group"> <URI xmlns="">http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission xmlns="">READ</Permission> </Grant> <Grant> <Grantee xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" _XMLSchema-instance:type="Group"> <URI xmlns="">http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission xmlns="">WRITE</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
После назначения 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>
) или префикс*
.
Подсказка
Сгенерируйте файл политики, которая разрешает публичный доступ на чтение и скачивание объектов бакета для любого пользователя. Сохраните политику в файл
policy.json
.Выполните команду:
aws --endpoint-url=https://s3.cloud.ru s3api put-bucket-policy --bucket <bucket-name> --policy file://path/to/policy.json
Сгенерируйте файл политики, которая разрешает публичный доступ на чтение и скачивание объектов бакета для любого пользователя.
Выполните команду PutBucketPolicy. В теле запроса передайте политику.
PUT /<bucket-name>?policy HTTP/2 Host: s3.cloud.ru Date: Wed, 25 Oct 2023 22:32:00 GMT Authorization: authorization string { "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>/*" ] } ] }
После назначения политики доступа проверьте, что можно загрузить объекты в бакет как неавторизованный пользователь.
Загрузить объект в бакет
Чтобы загрузить объект в бакет как неавторизованный пользователь убедитесь, что для бакета указаны его глобальное название или доменное имя.
В личном кабинете перейдите на Evolution.
В разделе Хранение данных выберите 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 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}]"
Выполните команду PutBucketAcl:
PUT /<bucket-name>?/ownershipControls= HTTP/2
Host: s3.cloud.ru
Date: Wed, 25 Oct 2023 22:32:00 GMT
x-amz-content-sha256: bafb46c18574a73704c8227aef060df1c12ea0d964e19b949d06e9f763805fe2
Authorization: authorization string
<?xml version="1.0" encoding="UTF-8"?>
<OwnershipControls xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Rule>
<ObjectOwnership>BucketOwnerEnforced</ObjectOwnership>
</Rule>
</OwnershipControls>
Подсказка
Удалить созданный ACL нельзя. Чтобы удалить разрешения, передайте пустой ACL.
BucketPolicy
Закрыть доступ к ресурсам можно с помощью AWS CLI или API.
Выполните команду:
aws --endpoint-url=https://s3.cloud.ru s3api delete-bucket-policy --bucket <bucket-name>
Выполните команду DeleteBucketPolicy:
DELETE /<bucket-name>?policy HTTP/2
Host: s3.cloud.ru
Date: Wed, 25 Oct 2023 22:32:00 GMT
Authorization: authorization string
для Dev & Test