Доступ в бакет с помощью сервисного подключения из Yandex Virtual Private Cloud
Важно
Функциональность Сервисные подключения (VPC Private Endpoints) находится на стадии Preview и будет доступна для тестирования с 26 сентября 2024 г. Чтобы запросить доступ, обратитесь к вашему аккаунт-менеджеру.
Вы можете организовать прямой доступ к бакетам Object Storage из облачных сетей VPC с помощью сервисного подключения VPC. При таком подключении сервис Object Storage будет доступен по внутренним IP-адресам VPC без использования доступа в интернет.
Чтобы организовать доступ в бакет с помощью сервисного подключения из VPC:
Создайте сервисное подключение VPC
Для создания сервисного подключения необходима одна из следующих ролей:
vpc.privateEndpoints.editor
vpc.privateEndpoints.admin
vpc.privateAdmin
vpc.admin
admin
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для создания сервисного подключения:
yc vpc private-endpoint create --help
-
Создайте сервисное подключение к Object Storage в каталоге по умолчанию:
yc vpc private-endpoint create \ --name s3-vpc-link \ --description "Private Endpoint to the Object Storage" \ --network-name default-net \ --object-storage
Где:
--name
— (опционально) имя сервисного подключения.--description
— (опционально) описание сервисного подключения.--network-name
— имя облачной сети, в которой будет создано сервисное подключение. Также вы можете использовать идентификатор сети в параметре--network-id
.--object-storage
— сервисное подключение к Object Storage. Другие типы сервисных подключений пока не доступны.
При создании сервисного подключения можно использовать дополнительные параметры:
-
--address-spec
— (опционально) параметры в форматеключ=значение
для внутреннего IP-адреса, который будет назначен сервисному подключению:-
address
— (опционально) внутренний IP-адрес для сервисного подключения. Если IP-адрес не указан, он будет назначен случайно из диапазона указанной подсети. -
subnet-id
— (опционально) идентификатор подсети, из которой будет взят IP-адрес для сервисного подключения. Если подсеть не указана, внутренний IP-адрес будет назначен случайно из диапазона одной из подсетей облачной сети.Примечание
Чтобы создать сервисное подключение, в вашей сети должна быть хотя бы одна подсеть.
-
-
--private-dns-records-enabled
— (опционально) параметр для создания дополнительных ресурсных записей в DNS для переопределения публичного FQDN сервиса, к которому создается подключение.В зависимости от того, применен ли параметр, будут автоматически созданы следующие ресурсные записи для доступа в Object Storage:
-
параметр не используется:
Имя Тип Значение storage.pe.yandexcloud.net A <внутренний_IP-адрес_сервисного_подключения> *.storage.pe.yandexcloud.net A <внутренний_IP-адрес_сервисного_подключения> -
параметр используется:
Имя Тип Значение storage.pe.yandexcloud.net A <внутренний_IP-адрес_сервисного_подключения> *.storage.pe.yandexcloud.net A <внутренний_IP-адрес_сервисного_подключения> storage.yandexcloud.net A <внутренний_IP-адрес_сервисного_подключения> *.storage.yandexcloud.net A <внутренний_IP-адрес_сервисного_подключения>
-
-
Проверьте, что сервисное подключение создалось:
yc vpc private-endpoint list
Результат выполнения команды:
+----------------------+-------------+--------------------------------+ | ID | NAME | DESCRIPTION | +----------------------+-------------+--------------------------------+ | enpd7rq************* | s3-vpc-link | Private Endpoint to the Object | | | | Storage | +----------------------+-------------+--------------------------------+
О том, как узнать параметры созданного сервисного подключения, см. в разделе Получить информацию о сервисном подключении.
Сохраните идентификатор сервисного подключения.
Теперь бакеты Object Storage доступны по внутреннему IP-адресу VPC без использования доступа в интернет.
Настройте политику доступа бакета
Чтобы доступ к бакету осуществлялся только по внутренним IP-адресам VPC, назначьте бакету политику доступа для сервисного подключения.
-
В консоли управления
выберите каталог, в котором вы настроили сервисное подключение VPC. -
Выберите сервис Object Storage.
-
Выберите бакет в списке.
-
Перейдите на вкладку
Безопасность в меню слева. -
В верхней части экрана перейдите на вкладку Политика доступа.
-
Нажмите кнопку Настроить доступ.
-
Введите идентификатор политики доступа, например
private-endpoint-policy
. -
Настройте правило:
-
Введите идентификатор правила, например
private-endpoint-rule
. -
Настройте параметры правила:
-
Результат — разрешить.
-
Принцип выбора — включить пользователей.
-
Пользователь — все пользователи.
-
Действие — выберите опцию Все действия.
-
Ресурс —
<имя_бакета>/*
.Нажмите кнопку Добавить ресурс и введите
<имя_бакета>
.Примечание
Ресурс бакета не включает в себя ресурсы всех его объектов. Чтобы правило в политике доступа относилось к бакету и всем объектам, их нужно указать как отдельные ресурсы: например,
samplebucket
иsamplebucket/*
.
-
-
Добавьте условие для правила:
- В поле Ключ выберите
private-endpoint-id
. - В поле Оператор выберите
StringEquals
. - В поле Значение укажите идентификатор сервисного подключения (Private Endpoint), например
enpd7rq1s3f5********
.
- В поле Ключ выберите
-
-
Нажмите кнопку Сохранить.
Примечание
Для управления политикой доступа с помощью 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).
Подробная информация о работе с политикой доступа бакета изложена на странице Управление политикой доступа.