Настройка доступа к Object Storage из кластера ClickHouse®
Managed Service for ClickHouse® поддерживает работу с Yandex Object Storage для:
- подключения моделей машинного обучения, схем формата данных и собственной геобазы;
- обработки данных, которые находятся в объектном хранилище, если эти данные представлены в любом из поддерживаемых ClickHouse® форматов
.
Для доступа к данным в бакете Object Storage из кластера настройте беспарольный доступ к бакету с помощью сервисного аккаунта:
Примечание
От имени сервисного аккаунта будут отправляться SQL-запросы к Object Storage. При этом указание ключа и секрета в запросе роли не играет.
Если сервисный аккаунт не указан, то SQL-запросы отправляются:
- Анонимно, если ключ и секрет не указаны в запросе.
- По ключу, если ключ и секрет указаны в запросе.
См. также Примеры работы с объектами.
Перед началом работы назначьте вашему аккаунту в Yandex Cloud роль iam.serviceAccounts.user или выше. Она нужна в следующих случаях:
- если вы создаете или изменяете кластер и привязываете к нему сервисный аккаунт;
- если вы восстанавливаете из резервной копии кластер с привязкой к сервисному аккаунту.
Подключите сервисный аккаунт к кластеру
-
При создании или изменении кластера выберите существующий сервисный аккаунт либо создайте новый.
-
Назначьте этому аккаунту корректные роли из группы ролей
storage.*, напримерstorage.viewerиstorage.uploader.
Совет
Для связи кластеров Managed Service for ClickHouse® с Object Storage рекомендуется использовать специально созданные для этой цели сервисные аккаунты: это позволяет организовать работу с любыми бакетами, в том числе с такими, для которых предоставление публичного доступа нежелательно или невозможно.
Настройте права доступа
-
В консоли управления
выберите каталог, в котором находится нужный бакет. Если бакета не существует — создайте его и наполните необходимыми данными. -
В консоли управления
выберите каталог, в котором находится кластер. -
Перейдите в сервис Object Storage.
-
Настройте ACL бакета или ACL объекта:
- В списке бакетов или объектов выберите нужный элемент и нажмите на значок
. - Нажмите Настроить ACL или ACL объекта.
- В выпадающем списке Выберите пользователя укажите сервисный аккаунт, подключенный к кластеру.
- Задайте нужные разрешения для сервисного аккаунта из выпадающего списка.
- Нажмите кнопку Добавить и Сохранить.
Примечание
При необходимости отзовите доступ у одного или нескольких пользователей, нажав кнопку Отменить в нужной строке.
- В списке бакетов или объектов выберите нужный элемент и нажмите на значок
-
Если в бакете включено шифрование, назначьте сервисному аккаунту роль kms.keys.encrypterDecrypter на ключ шифрования, привязанный к бакету.
Примеры работы с объектами
На объект в бакете можно получить ссылку вида https://storage.yandexcloud.kz/<имя_бакета>/<имя_объекта>. Ее можно использовать при работе с геометками, схемами, а также при использовании табличной функции s3 и табличного движка S3.
Табличный движок S3 аналогичен движкам FileSELECT и INSERT.
Табличная функция s3 предоставляет ту же самую функциональность, что и движок таблиц S3, но при ее использовании не требуется предварительно создавать таблицу.
Например, если в бакете Object Storage в файле table.tsv хранятся данные таблицы в формате TSV, то можно создать таблицу или функцию, которая будет работать с этим файлом. Предполагается, что настроен беспарольный доступ и получена ссылка на файл table.tsv.
-
Сервисному аккаунту, привязанному к кластеру Managed Service for ClickHouse®, назначьте роли
managed-clickhouse.editorиstorage.uploader. -
Создайте таблицу:
CREATE TABLE test (n Int32) ENGINE = S3('https://storage.yandexcloud.kz/<имя_бакета>/table.tsv', 'TSV'); -
Выполните тестовые запросы к таблице:
INSERT INTO test VALUES (1); SELECT * FROM test; ┌─n─┐ │ 1 │ └───┘
-
Сервисному аккаунту, привязанному к кластеру Managed Service for ClickHouse®, назначьте роли
managed-clickhouse.editorиstorage.uploader. -
Вставьте данные:
INSERT INTO FUNCTION s3('https://storage.yandexcloud.kz/<имя_бакета>/table.tsv', 'TSV', 'n Int32') VALUES (1); -
Выполните тестовый запрос:
SELECT * FROM s3('https://storage.yandexcloud.kz/<имя_бакета>/table.tsv', 'TSV', 'n Int32'); ┌─n─┐ │ 1 │ └───┘
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc