Редактирование ACL бакета
В Object Storage реализовано несколько механизмов для управления доступом к ресурсам. Алгоритм взаимодействия этих механизмов см. в Обзор способов управления доступом в Object Storage.
Примечание
-
В консоли управления
в списке сервисов выберите Object Storage. -
Выберите нужный бакет и нажмите
→ ACL объекта. -
В окне Редактирование ACL выдайте или отзовите необходимые разрешения.
Примечание
В консоли управления разрешения можно выдать только тем сервисным аккаунтам, которые созданы в том же каталоге, что и сам бакет. Выдать разрешения для сервисных аккаунтов, относящихся к другим каталогам, можно с помощью YC CLI (только для ACL бакета), AWS CLI, Terraform или API.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Перед настройкой ACL посмотрите описание команды CLI для редактирования бакета:
yc storage bucket update --help
Чтобы посмотреть текущий ACL бакета, выполните команду:
yc storage bucket get <имя_бакета> --with-acl
Вы можете применить к бакету предопределенный ACL или настроить разрешения для отдельных пользователей, сервисных аккаунтов, групп пользователей и публичных групп (группа всех пользователей интернета, группа всех аутентифицированных пользователей Yandex Cloud). Эти настройки несовместимы: у бакета должен быть либо предопределенный ACL, либо набор отдельных разрешений.
- Предопределенный ACL
-
Выполните команду:
yc storage bucket update --name <имя_бакета> --acl <предопределенный_ACL>
Где:
--name
— имя бакета.--acl
— предопределенный ACL. Список значений см. в разделе Предопределенные ACL.
Результат:
name: my-bucket folder_id: csgeoelk7fl1******** default_storage_class: STANDARD versioning: VERSIONING_DISABLED max_size: "1073741824" acl: grants: - permission: PERMISSION_READ grant_type: GRANT_TYPE_ALL_USERS created_at: "2022-12-14T19:10:05.957940Z"
- Настройка отдельных разрешений
-
-
Чтобы выдать разрешения ACL для пользователя Yandex Cloud, сервисного аккаунта или группы пользователей, получите их идентификатор:
- Пользователь.
- Сервисный аккаунт.
- Группа пользователей — перейдите на вкладку Группы
в интерфейсе Cloud Organization.
-
Выполните команду:
yc storage bucket update --name <имя_бакета> \ --grants grant-type=<тип_получателя_разрешения>,grantee-id=<идентификатор_получателя>,permission=<тип_разрешения>
Где:
grant-type
— тип получателя разрешения. Возможные значения:grant-type-account
— пользователь, сервисный аккаунт или группа пользователей;grant-type-all-authenticated-users
— публичная группа всех аутентифицированных пользователей Yandex Cloud;grant-type-all-users
— публичная группа всех пользователей интернета.
grantee-id
— идентификатор пользователя, сервисного аккаунта или группы пользователей, которым нужно дать разрешение. Указывается, только еслиgrant-type=grant-type-account
.permission
— тип разрешения ACL. Возможные значения:permission-read
— доступ к списку объектов в бакете, чтению различных настроек бакета (жизненный цикл, CORS, статический хостинг), чтению всех объектов в бакете.permission-write
— доступ к записи, перезаписи и удалению объектов в бакете. Используется только совместно сpermission-read
.permission-full-control
— полный доступ к бакету и объектам в нем.
Подробнее о разрешениях см. в разделе Виды разрешений.
Чтобы настроить несколько разрешений, укажите параметр
--grants
несколько раз. Например, чтобы выдать разрешение на запись в бакет, выполните команду:yc storage bucket update --name <имя_бакета> \ --grants grant-type=<тип_получателя_разрешения>,grantee-id=<идентификатор_получателя>,permission=permission-read \ --grants grant-type=<тип_получателя_разрешения>,grantee-id=<идентификатор_получателя>,permission=permission-write
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
Примечание
Чтобы управлять ACL бакета, назначьте сервисному аккаунту, через который работает AWS CLI, роль storage.admin
.
Посмотрите текущий ACL бакета:
aws s3api get-bucket-acl \
--endpoint https://storage.yandexcloud.net \
--bucket <имя_бакета>
Где:
--bucket
— имя бакета.--endpoint
— эндпоинт Object Storage.
Вы можете применить к бакету предопределенный ACL или настроить разрешения для отдельных пользователей, сервисных аккаунтов, групп пользователей и публичных групп (группа всех пользователей интернета, группа всех аутентифицированных пользователей Yandex Cloud). Эти настройки несовместимы: у бакета должен быть либо предопределенный ACL, либо набор отдельных разрешений.
- Предопределенный ACL
-
Выполните команду:
aws s3api put-bucket-acl \ --endpoint https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --acl <предопределенный_ACL>
Где:
--endpoint
— эндпоинт Object Storage.--bucket
— имя бакета.--acl
— предопределенный ACL. Список значений см. в разделе Предопределенные ACL.
- Настройка отдельных разрешений
-
-
Чтобы выдать разрешения ACL для пользователя Yandex Cloud, сервисного аккаунта или группы пользователей, получите их идентификатор:
- Пользователь.
- Сервисный аккаунт.
- Группа пользователей — перейдите на вкладку Группы
в интерфейсе Cloud Organization.
-
Выполните команду:
aws s3api put-bucket-acl \ --endpoint https://storage.yandexcloud.net \ --bucket <имя_бакета> \ <тип_разрешения> <получатель_разрешения>
Где:
-
--bucket
— имя бакета. -
--endpoint
— эндпоинт Object Storage. -
Возможные типы разрешений ACL:
--grant-read
— доступ к списку объектов в бакете, чтению различных настроек бакета (жизненный цикл, CORS, статический хостинг), чтению всех объектов в бакете.--grant-write
— доступ к записи, перезаписи и удалению объектов в бакете. Используется только совместно с--grant-read
.--grant-full-control
— полный доступ к бакету и объектам в нем.
Подробнее о разрешениях см. в разделе Виды разрешений.
-
Возможные получатели разрешений:
id=<идентификатор_получателя>
— идентификатор пользователя, сервисного аккаунта или группы пользователей, которым нужно дать разрешение.uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers
— публичная группа всех аутентифицированных пользователей Yandex Cloud.uri=http://acs.amazonaws.com/groups/global/AllUsers
— публичная группа всех пользователей интернета.
Чтобы настроить несколько разрешений, укажите параметры, тип разрешения и получателя разрешения несколько раз. Например, чтобы выдать разрешение на запись в бакет, выполните команду:
aws s3api put-bucket-acl \ --endpoint https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --grant-read id=<идентификатор_получателя> \ --grant-write id=<идентификатор_получателя>
-
-
Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin
, на каталог, в котором будут создаваться ресурсы.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Перед началом работы, получите статические ключи доступа — секретный ключ и идентификатор ключа, используемые для аутентификации в Object Storage.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_storage_bucket" "test" { access_key = "<идентификатор_статического_ключа>" secret_key = "<секретный_ключ>" bucket = "<имя_бакета>" grant { id = "<идентификатор_пользователя>" type = "CanonicalUser" permissions = ["FULL_CONTROL"] } grant { type = "Group" permissions = ["READ", "WRITE"] uri = "http://acs.amazonaws.com/groups/global/AllUsers" } }
Где:
access_key
— идентификатор статического ключа доступа.secret_key
— значение секретного ключа доступа.bucket
— имя бакета. Обязательный параметр.grant
— настройки ACL. Необязательный параметр. Чтобы управлять этим параметром, у сервисного аккаунта, на который получены статические ключи доступа, должна быть рольstorage.admin
на бакет или каталог.-
type
— тип получателя разрешений. Возможные значения:CanonicalUser
— для пользователя, сервисного аккаунта или группы пользователей.Group
— для публичной группы.
-
permissions
— тип разрешений ACL, возможные значения:READ
— доступ к списку объектов в бакете, чтению различных настроек бакета (жизненный цикл, CORS, статический хостинг), чтению всех объектов в бакете.WRITE
— доступ к записи, перезаписи и удалению объектов в бакете. Используется только совместно сREAD
, напримерpermissions = ["READ", "WRITE"]
.FULL_CONTROL
— полный доступ к бакету и объектам в нем.
Подробнее о разрешениях см. в разделе Виды разрешений.
-
id
— идентификатор пользователя, сервисного аккаунта или группы пользователей. Используется с типом получателя разрешенийCanonicalUser
.Идентификаторы можно получить следующими способами:
- Пользователь.
- Сервисный аккаунт.
- Группа пользователей — перейдите на вкладку Группы
в интерфейсе Cloud Organization.
-
uri
— идентификатор публичной группы. Используется с типом получателя разрешенийGroup
. Возможные значения:http://acs.amazonaws.com/groups/global/AllUsers
— все пользователи интернета.http://acs.amazonaws.com/groups/global/AuthenticatedUsers
— все аутентифицированные пользователи Yandex Cloud.
-
Вместо параметра
grant
вы можете указать параметрacl
— предопределенный ACL бакета. Значение по умолчанию —private
: пользователи Yandex Cloud получают разрешения в соответствии со своими ролями в IAM.Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Чтобы редактировать ACL бакета, воспользуйтесь методом REST API update для ресурса Bucket, вызовом gRPC API BucketService/Update или методом S3 API bucketPutAcl.