Управление политикой доступа (bucket policy)
В Object Storage реализовано несколько механизмов для управления доступом к ресурсам. Алгоритм взаимодействия этих механизмов см. в Обзор способов управления доступом в Object Storage.
Политики доступа (bucket policy) устанавливают права на действия с бакетами, объектами и группами объектов.
Применить или изменить политику
Минимально необходимая роль для применения или изменения политики доступа — storage.configurer
. См. описание роли.
Примечание
Если ранее бакету была назначена политика доступа, то после применения изменений она будет полностью перезаписана.
Для применения или изменения политики доступа к бакету:
-
В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, в котором нужно настроить политику доступа. -
На панели слева выберите
Безопасность и перейдите на вкладку Политика доступа. -
Нажмите кнопку Настроить доступ.
-
Введите идентификатор политики доступа.
-
Настройте правило:
-
Введите идентификатор правила.
-
Настройте параметры правила:
-
Результат — разрешить или запретить.
-
Принцип выбора — включить или исключить пользователей.
-
Пользователь — все пользователи или набор конкретных пользователей. Чтобы задать набор конкретных пользователей или сервисных аккаунтов, выберите их имена в выпадающем списке.
-
Действие, для которого создается правило. Вы также можете выбрать опцию Все действия.
-
Ресурс — по умолчанию указан выбранный бакет. Чтобы добавить другие ресурсы в правило, нажмите кнопку Добавить ресурс.
Примечание
Ресурс бакета не включает в себя ресурсы всех его объектов. Чтобы правило в политике доступа относилось к бакету и всем объектам, их нужно указать как отдельные ресурсы: например,
samplebucket
иsamplebucket/*
.
-
-
При необходимости добавьте условие для правила:
- Выберите Ключ из списка.
- Выберите Оператор из списка. Чтобы оператор действовал в существующих полях, выберите опцию Применить, если поле существует. Тогда, если поля не существует, условие будет считаться выполненным.
- Введите Значение.
- Нажмите кнопку Добавить значение, чтобы добавить дополнительное значение в условие.
Вы можете настроить для правила одновременно несколько условий и задать для каждого условия несколько ключей. При этом такие условия и их ключи будут проверяться с логикой
И
. То есть для выполнения правила запрос должен будет соответствовать сразу всем указанным признакам.Для каждого ключа условия вы можете задать одновременно несколько значений. При этом такие значения будут проверяться с логикой
ИЛИ
. То есть для выполнения правила запрос должен будет соответствовать любому из заданных значений ключа условия.
-
-
При необходимости добавьте правила и настройте их.
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки 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" } } } }
Где:
Version
— версия описания политик доступа. Необязательный параметр.Statement
— правила политики доступа:-
Effect
— запрет или разрешение запрошенного действия. Возможные значения:Allow
иDeny
. -
Principal
— идентификатор субъекта запрошенного разрешения. Получателем может быть пользователь, сервисный аккаунт или группа пользователей. Возможные значения:*
,<идентификатор_субъекта>
. Необязательный параметр.Идентификаторы можно получить следующими способами:
- Пользователь.
- Сервисный аккаунт.
- Группа пользователей — перейдите на вкладку Группы
в интерфейсе Cloud Organization.
-
Action
— действие, которое будет разрешено при срабатывании политики. Возможные значения:s3:GetObject
,s3:PutObject
и*
если необходимо применять политику ко всем действиям. -
Resource
— ресурс, к которому будет применяться правило. -
Condition
— условие, которое будет проверяться. Необязательный параметр.Вы можете настроить для правила одновременно несколько условий и задать для каждого условия несколько ключей. При этом такие условия и их ключи будут проверяться с логикой
И
. То есть для выполнения правила запрос должен будет соответствовать сразу всем указанным признакам.Для каждого ключа условия вы можете задать одновременно несколько значений. При этом такие значения будут проверяться с логикой
ИЛИ
. То есть для выполнения правила запрос должен будет соответствовать любому из заданных значений ключа условия.
-
-
Выполните команду:
yc storage bucket update \ --name <имя_бакета> \ --policy-from-file <путь_к_файлу_с_политиками>
Результат:
name: my-bucket folder_id: csgeoelk7fl1******** 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" } } } }
Где:
Version
— версия описания политик доступа. Необязательный параметр.Statement
— правила политики доступа:-
Effect
— запрет или разрешение запрошенного действия. Возможные значения:Allow
иDeny
. -
Principal
— идентификатор субъекта запрошенного разрешения. Получателем может быть пользователь, сервисный аккаунт или группа пользователей. Возможные значения:*
,<идентификатор_субъекта>
. Необязательный параметр.Идентификаторы можно получить следующими способами:
- Пользователь.
- Сервисный аккаунт.
- Группа пользователей — перейдите на вкладку Группы
в интерфейсе Cloud Organization.
-
Action
— действие, которое будет разрешено при срабатывании политики. Возможные значения:s3:GetObject
,s3:PutObject
и*
если необходимо применять политику ко всем действиям. -
Resource
— ресурс, к которому будет применяться правило. -
Condition
— условие, которое будет проверяться. Необязательный параметр.Вы можете настроить для правила одновременно несколько условий и задать для каждого условия несколько ключей. При этом такие условия и их ключи будут проверяться с логикой
И
. То есть для выполнения правила запрос должен будет соответствовать сразу всем указанным признакам.Для каждого ключа условия вы можете задать одновременно несколько значений. При этом такие значения будут проверяться с логикой
ИЛИ
. То есть для выполнения правила запрос должен будет соответствовать любому из заданных значений ключа условия.
-
Сохраните готовую конфигурацию в файле
policy.json
. -
Выполните команду:
aws s3api put-bucket-policy \ --endpoint https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --policy file://policy.json
Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin
, на каталог, в котором будут создаваться ресурсы.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Получите статические ключи доступа — секретный ключ и идентификатор ключа, используемые для аутентификации в Object Storage.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_iam_service_account" "sa" { name = "<имя_сервисного_аккаунта>" } // Назначение роли сервисному аккаунту resource "yandex_resourcemanager_folder_iam_member" "sa-admin" { folder_id = "<идентификатор_каталога>" role = "storage.admin" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } // Создание статического ключа доступа resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = yandex_iam_service_account.sa.id description = "static access key for object storage" } resource "yandex_storage_bucket" "b" { access_key = "yandex_iam_service_account_static_access_key.sa-static-key.access_key" secret_key = "yandex_iam_service_account_static_access_key.sa-static-key.secret_key" 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
— имя политики. Обязательный параметр.
Настройки политики:
Version
— версия описания политик доступа. Необязательный параметр.Statement
— правила политики доступа:-
Effect
— запрет или разрешение запрошенного действия. Возможные значения:Allow
иDeny
. -
Principal
— идентификатор субъекта запрошенного разрешения. Получателем может быть пользователь, сервисный аккаунт или группа пользователей. Возможные значения:*
,<идентификатор_субъекта>
. Необязательный параметр.Идентификаторы можно получить следующими способами:
- Пользователь.
- Сервисный аккаунт.
- Группа пользователей — перейдите на вкладку Группы
в интерфейсе Cloud Organization.
-
Action
— действие, которое будет разрешено при срабатывании политики. Возможные значения:s3:GetObject
,s3:PutObject
и*
если необходимо применять политику ко всем действиям. -
Resource
— ресурс, к которому будет применяться правило. -
Condition
— условие, которое будет проверяться. Необязательный параметр.Вы можете настроить для правила одновременно несколько условий и задать для каждого условия несколько ключей. При этом такие условия и их ключи будут проверяться с логикой
И
. То есть для выполнения правила запрос должен будет соответствовать сразу всем указанным признакам.Для каждого ключа условия вы можете задать одновременно несколько значений. При этом такие значения будут проверяться с логикой
ИЛИ
. То есть для выполнения правила запрос должен будет соответствовать любому из заданных значений ключа условия.
-
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Чтобы управлять политикой доступа, воспользуйтесь методом REST API update для ресурса Bucket, вызовом gRPC API BucketService/Update или методом S3 API 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\"}}}}"
}
Подробнее о параметрах читайте в описании схемы данных.
Воспользуйтесь методом S3 API GetBucketPolicy.
Удалить политику
Минимально необходимая роль для удаления политики доступа — storage.configurer
. См. описание роли.
Чтобы удалить политику доступа:
- В консоли управления
в списке сервисов выберите Object Storage. - Выберите бакет в списке.
- В меню слева выберите Безопасность и перейдите на вкладку Политика доступа.
- Нажмите значок
и выберите Удалить политику доступа. - Нажмите кнопку Удалить.
Выполните следующую команду:
aws --endpoint https://storage.yandexcloud.net s3api delete-bucket-policy \
--bucket <имя_бакета>
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Если вы применили политику доступа к бакету при помощи 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.
После этого в указанном каталоге будет удалена политика доступа к бакету. Проверить отсутствие политики доступа можно в консоли управления
. -
Воспользуйтесь методом S3 API DeleteBucketPolicy.