Безопасный доступ к данным в S3
В этой статье показано, как клиенты ClickHouse Cloud могут использовать ролевой доступ для аутентификации в Amazon Simple Storage Service (S3) и безопасного доступа к своим данным.
Введение
Прежде чем переходить к настройке безопасного доступа к 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, принадлежащую сервису ClickHouse.
4 - Настройте стек CloudFormation. Ниже приведена дополнительная информация об этих параметрах.
| Parameter | Default Value | Description |
|---|---|---|
| RoleName | ClickHouseAccess-001 | Имя новой роли, которую ClickHouse Cloud будет использовать для доступа к вашему бакету S3 |
| Role Session Name | * | Role Session Name может использоваться в качестве общего секрета для дополнительной защиты вашего бакета. |
| ClickHouse Instance Roles | Список ролей IAM сервиса ClickHouse, разделённых запятыми, которые могут использовать эту интеграцию Secure 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):
Политика IAM (замените {BUCKET_NAME} на имя вашего бакета):
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.