Безопасный доступ к данным в 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 Role, относящуюся к сервису 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 Service Console.
3 - Создайте новую IAM-роль со следующими политиками IAM и доверия.
Политика доверия (замените {ClickHouse_IAM_ARN} на ARN IAM-роли, относящейся к вашему инстансу ClickHouse):
Политика IAM (пожалуйста, замените {BUCKET_NAME} на имя вашего бакета):
4 - После создания скопируйте новый ARN роли IAM. Он понадобится для доступа к вашему бакету S3.
Получение доступа к вашему бакету S3 с помощью роли ClickHouseAccess
В ClickHouse Cloud появилась новая возможность, которая позволяет указывать extra_credentials как часть табличной функции S3. Ниже приведён пример выполнения запроса с использованием только что созданной роли, скопированной выше.
Ниже приведён пример запроса, который использует role_session_name в качестве общего секретного ключа для выборки данных из бакета. Если значение role_session_name указано неверно, операция завершится с ошибкой.
Мы рекомендуем размещать исходный S3‑бакет в том же регионе, что и ваш ClickHouse Cloud Service, чтобы снизить расходы на передачу данных. Для получения дополнительной информации см. цены на S3.