Назначить политику доступа в Object Storage для сервисного подключения
Важно
Функциональность Сервисные подключения (VPC Private Endpoints) находится на стадии Preview. Чтобы запросить доступ, обратитесь к вашему аккаунт-менеджеру.
Политики доступа (bucket policy) устанавливают права на действия с бакетами, объектами и группами объектов.
Минимально необходимая роль для применения или изменения политики доступа — storage.configurer. См. описание роли.
Чтобы назначить политику доступа в Object Storage для сервисного подключения:
Примечание
На уровне политики доступа можно разрешить доступ в бакет из сервисных подключений VPC с идентификаторами, указанными в политике. Однако, согласно схеме механизмов доступа, все еще остается возможность доступа в бакет из публичной сети, например с помощью ACL объекта или при наличии другого разрешающего правила в политике.
Также при такой настройке остается возможность копирования объектов на стороне сервера (Server Side Copy) в такой бакет и из него.
-
В консоли управления
выберите каталог, в котором вы настроили сервисное подключение VPC. -
Перейдите в сервис Object Storage.
-
Выберите бакет в списке.
-
Перейдите на вкладку
Безопасность в меню слева. -
В верхней части экрана перейдите на вкладку Политика доступа.
-
Нажмите кнопку Настроить доступ.
-
Введите идентификатор политики доступа, например
private-endpoint-policy. -
Настройте правило:
-
Введите идентификатор правила, например
private-endpoint-rule. -
Настройте параметры правила:
-
Результат — разрешить.
-
Принцип выбора — включить пользователей.
-
Пользователь — все пользователи.
-
Действие — выберите опцию Все действия.
-
Ресурс —
<имя_бакета>/*.Нажмите кнопку Добавить ресурс и введите
<имя_бакета>.Примечание
Ресурс бакета не включает в себя ресурсы всех его объектов. Чтобы правило в политике доступа относилось к бакету и всем объектам, их нужно указать как отдельные ресурсы: например,
samplebucketиsamplebucket/*.
-
-
Добавьте условие для правила:
- В поле Ключ выберите
private-endpoint-id. - В поле Оператор выберите
StringEquals. - В поле Значение укажите идентификатор сервисного подключения (Private Endpoint), например
enpd7rq1s3f5********.
- В поле Ключ выберите
-
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Посмотрите описание команды CLI для изменения настроек бакета:
yc storage bucket update --help -
Опишите конфигурацию политики доступа в виде схемы данных формата JSON:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": [ "arn:aws:s3:::<имя_бакета>/*", "arn:aws:s3:::<имя_бакета>" ], "Condition": { "StringEquals": { "yc:private-endpoint-id": "<идентификатор_подключения>" } } } }Где:
<имя_бакета>— имя бакета в Object Storage, к которому нужно применить политику доступа, напримерmy-s3-bucket.<идентификатор_подключения>— идентификатор сервисного подключения (Private Endpoint), напримерenpd7rq1s3f5********.
-
Сохраните готовую конфигурацию в файле
policy.json. -
Выполните команду:
yc storage bucket update \ --name <имя_бакета> \ --policy-from-file <путь_к_файлу_с_политикой>После успешного применения политики доступа подключение к бакету будет возможно только из облачной сети VPC, в которой было создано соответствующее сервисное подключение (Private Endpoint).
Примечание
Для управления политикой доступа с помощью AWS CLI сервисному аккаунту должна быть назначена роль storage.admin.
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Опишите конфигурацию политики доступа в виде схемы данных формата JSON:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": [ "arn:aws:s3:::<имя_бакета>/*", "arn:aws:s3:::<имя_бакета>" ], "Condition": { "StringEquals": { "yc:private-endpoint-id": "<идентификатор_подключения>" } } } }Где:
<имя_бакета>— имя бакета в Object Storage, к которому нужно применить политику доступа, напримерmy-s3-bucket.<идентификатор_подключения>— идентификатор сервисного подключения (Private Endpoint), напримерenpd7rq1s3f5********.
-
Сохраните готовую конфигурацию в файле
policy.json. -
Выполните команду:
aws s3api put-bucket-policy \ --endpoint https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --policy file://policy.json
После успешного применения политики доступа подключение к бакету будет возможно только из облачной сети VPC, в которой было создано соответствующее сервисное подключение (Private Endpoint).
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
По умолчанию для аутентификации в Object Storage Terraform использует IAM-токен. Кроме IAM-токена для аутентификации в Object Storage можно использовать сервисный аккаунт и статические ключи доступа. Более подробную информацию об особенностях аутентификации Terraform в Object Storage см. в документации провайдера.
Примечание
Если вы работаете с Object Storage через Terraform от имени сервисного аккаунта, назначьте сервисному аккаунту нужную роль, например storage.admin, на каталог, в котором будут создаваться ресурсы.
-
Откройте файл конфигурации Terraform и задайте политику с помощью ресурса
yandex_storage_bucket_policy:resource "yandex_storage_bucket_policy" "bpolicy" { bucket = "my-policy-bucket" policy = <<POLICY { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": [ "arn:aws:s3:::<имя_бакета>/*", "arn:aws:s3:::<имя_бакета>" ], "Condition": { "StringEquals": { "yc:private-endpoint-id": "<идентификатор_подключения>" } } } } POLICY }Где:
<имя_бакета>— имя бакета в Object Storage, к которому нужно применить политику доступа, напримерmy-s3-bucket.<идентификатор_подключения>— идентификатор сервисного подключения (Private Endpoint), напримерenpd7rq1s3f5********.
Более подробную информацию о параметрах ресурса
yandex_storage_bucket_policyсм. в документации провайдера. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
Проверить изменения можно в консоли управления
. -
Чтобы настроить политику доступа для бакета, воспользуйтесь методом REST API update для ресурса Bucket, вызовом gRPC API BucketService/Update или методом S3 API PutBucketPolicy. Если ранее для бакета уже была настроена политика доступа, то после применения новой политики она будет полностью перезаписана.
Подробная информация о работе с политикой доступа бакета изложена на странице Управление политикой доступа.