Управление политикой доступа (bucket policy)
Политики доступа (bucket policy) устанавливают права на действия с бакетами, объектами и группами объектов.
Применить или изменить политику
Минимально необходимая роль для применения или изменения политики доступа — storage.configurer
. См. описание роли.
Для применения или изменения политики доступа к бакету:
- В консоли управления выберите каталог, в котором нужно настроить политику доступа для бакета.
- Выберите сервис Object Storage.
- Выберите бакет в списке.
- Перейдите на вкладку Политика доступа в меню слева.
- Нажмите кнопку
Настроить доступ. - Введите идентификатор политики доступа.
- Настройте правило:
- Введите идентификатор правила.
- Настройте параметры правила:
- Результат — разрешить или запретить.
- Принцип выбора — включить или исключить пользователей.
- Пользователь — все пользователи или набор конкретных пользователей.
- Действие, для которого создается правило. Вы также можете выбрать опцию Все действия.
- Ресурс — по умолчанию указан выбранный бакет. Чтобы добавить другие ресурсы в правило, нажмите кнопку Добавить ресурс.
- При необходимости добавьте условие для правила:
- Выберите Ключ из списка.
- Выберите Оператор из списка. Чтобы оператор действовал в существующих полях, выберите опцию Применить, если поле существует. Тогда, если поля не существует, условие будет считаться выполненным.
- Введите Значение.
- Нажмите кнопку Добавить значение, чтобы добавить дополнительное значение в условие.
- При необходимости добавьте правила и настройте их.
- Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для редактирования ACL бакета:
yc storage bucket update --help
-
Опишите конфигурацию политики доступа в виде схемы данных в формате JSON:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<имя бакета>/*", "Condition": { "Bool": { "aws:SecureTransport": "true" } } } }
-
Выполните команду:
yc storage bucket update <имя_бакета> --policy-from-file <путь_к_файлу_с_политиками>
Результат:
name: my-bucket folder_id: csgeoelk7fl15s6dsvbo default_storage_class: STANDARD versioning: VERSIONING_SUSPENDED max_size: "10737418240" policy: Statement: Action: s3:GetObject Condition: Bool: aws:SecureTransport: "true" Effect: Allow Principal: '*' Resource: arn:aws:s3:::my-bucket Version: "2012-10-17" acl: {} created_at: "2022-12-14T08:42:16.273717Z"
Примечание
Для управления политикой доступа с помощью AWS CLI сервисному аккаунту должна быть назначена роль storage.admin
.
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Опишите конфигурацию политики доступа в виде схемы данных формата JSON:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<имя бакета>/*", "Condition": { "Bool": { "aws:SecureTransport": "true" } } } }
Сохраните готовую конфигурацию в файле
policy.json
. -
Выполните команду:
aws --endpoint https://storage.yandexcloud.net s3api put-bucket-policy \ --bucket <имя бакета> \ --policy file://policy.json
Если ранее для бакета уже была установлена политика доступа, то после применения новой политики она будет полностью перезаписана.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Получите статические ключи доступа — секретный ключ и идентификатор ключа, используемые для аутентификации в Object Storage.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_storage_bucket" "b" { bucket = "my-policy-bucket" policy = <<POLICY { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::my-policy-bucket/*", "arn:aws:s3:::my-policy-bucket" ] }, { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::my-policy-bucket/*", "arn:aws:s3:::my-policy-bucket" ] } ] } POLICY }
Где:
access_key
— идентификатор статического ключа доступа.secret_key
— значение секретного ключа доступа.bucket
— имя бакета. Обязательный параметр.policy
— имя политики. Обязательный параметр.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.
-
Воспользуйтесь методом PutBucketPolicy. Если ранее для бакета уже была установлена политика доступа, то после применения новой политики она будет полностью перезаписана.
Просмотреть политику
Минимально необходимая роль для просмотра политики доступа — storage.configViewer
. См. описание роли.
Чтобы просмотреть примененную к бакету политику доступа:
- В консоли управления выберите каталог, в котором нужно просмотреть политику доступа для бакета.
- Выберите сервис Object Storage.
- Выберите бакет в списке.
- Перейдите на вкладку Политика доступа в меню слева.
Выполните следующую команду:
aws --endpoint https://storage.yandexcloud.net s3api get-bucket-policy \
--bucket <имя бакета> \
--output text
Результат:
{
"Policy": "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::<имя бакета>/*\",\"Condition\":{\"Bool\":{\"aws:SecureTransport\":\"true\"}}}}"
}
Подробнее о параметрах читайте в описании схемы данных.
Воспользуйтесь методом GetBucketPolicy.
Удалить политику
Минимально необходимая роль для удаления политики доступа — storage.configurer
. См. описание роли.
Чтобы удалить политику доступа:
- В консоли управления выберите каталог, в котором нужно настроить политику доступа для бакета.
- Выберите сервис Object Storage.
- Выберите бакет в списке.
- Перейдите на вкладку Политика доступа в меню слева.
- Нажмите значок
- Нажмите кнопку Удалить.
Выполните следующую команду:
aws --endpoint https://storage.yandexcloud.net s3api delete-bucket-policy \
--bucket <имя бакета>
Подробнее о Terraform в документации.
Если вы применили политику доступа к бакету при помощи Terraform, вы можете удалить её:
-
Найдите в конфигурационном файле параметры созданной ранее политики доступа, которую необходимо удалить:
resource "yandex_storage_bucket" "b" { bucket = "my-policy-bucket" policy = <<POLICY { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::my-policy-bucket/*", "arn:aws:s3:::my-policy-bucket" ] }, { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::my-policy-bucket/*", "arn:aws:s3:::my-policy-bucket" ] } ] } POLICY }
-
Удалите поле
policy
с описанием параметров политики доступа из конфигурационного файла. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы редактировали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров без удаляемого описания политики доступа. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Удалите политику доступа.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Введите слово
yes
и нажмите Enter.
После этого в указанном каталоге будет удалена политика доступа к бакету. Проверить отсутствие политики доступа можно в консоли управления.
-
Воспользуйтесь методом DeleteBucketPolicy.