Безопасный доступ к данным в S3
В этой статье показано, как использовать доступ на основе ролей для аутентификации в Amazon Simple Storage Service (S3) и безопасного доступа к данным из ClickHouse Cloud.
Введение
Прежде чем переходить к настройке безопасного доступа к S3, важно понять, как это работает. Ниже приведён обзор того, как сервисы ClickHouse могут получать доступ к приватным S3‑бакетам, принимая на себя роль в вашем аккаунте AWS.

Такой подход позволяет вам управлять всем доступом к S3‑бакетам в одном месте (IAM‑политика предполагаемой роли), без необходимости просматривать и изменять политики отдельных бакетов для предоставления или отзыва доступа.
Настройка
Получение ARN роли IAM сервиса ClickHouse
1 - Войдите в свою учетную запись ClickHouse Cloud.
2 - Выберите сервис ClickHouse, из которого вы хотите осуществлять подключение.
3 - Откройте вкладку Settings.
4 - Прокрутите страницу вниз до раздела Network security information в нижней части страницы.
5 - Скопируйте значение Service role ID (IAM), соответствующее сервису, как показано ниже.

Настройка роли IAM для операции AssumeRole
Вариант 1: Развертывание с помощью стека CloudFormation
1 - Войдите в свою учетную запись AWS в веб-браузере, используя IAM-пользователя с достаточными правами для создания и управления ролями IAM.
2 - Перейдите по этой ссылке, чтобы создать стек CloudFormation.
3 - Введите IAM Role для сервиса ClickHouse, которую вы записали на предыдущем шаге.
4 - Настройте стек CloudFormation. Ниже приведена дополнительная информация об этих параметрах.
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| RoleName | ClickHouseAccess-001 | Имя новой роли, которую ClickHouse Cloud будет использовать для доступа к вашему S3-бакету. |
| Role Session Name | * | Role Session Name может использоваться в качестве общего секрета для дополнительной защиты вашего бакета. |
| ClickHouse Instance Roles | Список через запятую IAM-ролей сервиса ClickHouse, которые могут использовать эту защищенную интеграцию с S3. | |
| Bucket Access | Read | Задает уровень доступа для указанных бакетов. |
| Bucket Names | Список через запятую имен бакетов, к которым эта роль будет иметь доступ. Примечание: используйте имя бакета, а не полный ARN бакета. |
5 - Установите флажок I acknowledge that AWS CloudFormation might create IAM resources with custom names.
6 - Нажмите кнопку Create stack в правом нижнем углу.
7 - Убедитесь, что стек CloudFormation создан без ошибок.
8 - Перейдите в раздел Outputs стека CloudFormation.
9 - Скопируйте значение RoleArn для этой интеграции. Оно понадобится для настройки доступа к вашему S3-бакету на следующем шаге.

Вариант 2: создание роли IAM вручную
1 - Войдите в свою учетную запись AWS в веб-браузере под IAM-пользователем, который имеет права на создание и управление ролями IAM.
2 - Перейдите в консоль сервиса IAM.
3 - Создайте новую роль IAM со следующими политиками IAM и доверия, заменив {ClickHouse_IAM_ARN} на ARN роли IAM, принадлежащей вашему экземпляру ClickHouse, а {BUCKET_NAME} — на имя бакета.
Политика доверия
Политика IAM
4 - После создания скопируйте новый IAM Role Arn. Он понадобится для настройки доступа к вашему S3-бакету на следующем шаге.
Доступ к бакету S3 с ролью ClickHouseAccess
В ClickHouse Cloud появилась новая возможность указывать параметр extra_credentials в S3 table function. Ниже приведён пример того, как выполнить запрос, используя только что созданную роль, скопированную выше.
Ниже приведён пример запроса, который использует role_session_name как общий секрет для выборки данных из бакета. Если значение role_session_name указано неверно, операция завершится с ошибкой.
Мы рекомендуем размещать исходное хранилище S3 в том же регионе, что и ваш сервис ClickHouse Cloud, чтобы снизить затраты на передачу данных. Для получения дополнительной информации см. раздел S3 pricing.
Расширенное управление действиями
Для более строгого контроля доступа можно ограничить политику S3‑бакета так, чтобы она принимала только запросы, исходящие из конечных точек VPC ClickHouse Cloud, с использованием условия aws:SourceVpce. Чтобы получить конечные точки VPC для вашего региона ClickHouse Cloud, откройте терминал и выполните:
Затем добавьте правило Deny в политику IAM с полученными конечными точками:
Дополнительную информацию о доступе к конечным точкам служб ClickHouse Cloud см. в разделе Cloud IP Addresses.