ClickHouse Cloud поддерживает безопасный ролевой доступ к данным Iceberg, хранящимся в Объектном хранилище (обычно S3), с использованием доверительной связи AWS IAM на основе ARN. В этом руководстве используется тот же подход к безопасной настройке, что и в Безопасный доступ к данным S3, а также добавляется специфичная для Iceberg конфигурация в ClickHouse.
Обзор
- Получите идентификатор сервисной роли ClickHouse Cloud (IAM).
- Создайте в своей учётной записи AWS роль IAM, которую ClickHouse сможет взять на себя.
- Прикрепите к роли политики доступа к объектам и каталогу для Iceberg.
- Используйте табличные функции Iceberg или движок таблицы IcebergS3 с ролевыми учётными данными.
Получите идентификатор сервисной роли ClickHouse (ARN)
1. Войдите в свою учетную запись ClickHouse Cloud.
2. Выберите сервис ClickHouse, в котором хотите выполнять запросы к данным Iceberg.
[object Object]
[object Object]
[object Object]
Этот ARN требуется для политики доверия роли IAM в AWS, которая будет использоваться для доступа к вашим данным Iceberg.

Настройка роли IAM с AssumeRole
1. Войдите в AWS и перейдите в сервис IAM.
2. Выберите Roles, затем Create role.
В поле Trusted entity type выберите Custom trust policy и введите значения из шага 3.
3. Добавьте policy доверия и политику IAM.
Замените {service-role-id} на Service Role ID (IAM) из вашего экземпляра ClickHouse.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ClickHouseServiceRoleTrustPolicy",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "{service-role-id}"
}
},
{
"Sid": "ReadOnlyIcebergS3IAMPolicy",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:GetObjectVersion",
"s3:ListBucketVersions"
],
"Resource": [
"arn:aws:s3:::{your-bucket}",
"arn:aws:s3:::{your-bucket}/*"
]
},
{
"Sid": "OptionalGlueDataCatalogIAMPolicy",
"Effect": "Allow",
"Action": [
"glue:GetDatabase",
"glue:GetDatabases",
"glue:GetTable",
"glue:GetTables",
"glue:GetPartition",
"glue:GetPartitions"
],
"Resource": "arn:aws:glue:{region}:{account-id}:*"
}
]
}4. Завершите создание роли.
a. Нажмите Next, затем ещё раз Next на экране назначения разрешений.
b. Укажите имя (например, iceberg-role-for-clickhouse) и описание.
c. Добавьте теги (необязательно).
d. Проверьте политики.
e. Выберите Create role.
[object Object]
Настроить доступ к Iceberg в ClickHouse Cloud
Вариант A: табличная функция Iceberg с ARN роли
Используйте табличную функцию icebergS3 с параметром NOSIGN и ролевыми учётными данными. ClickHouse Cloud вызовет STS, чтобы взять на себя эту роль.
SELECT count(*)
FROM icebergS3(
'https://{your-bucket}.s3.{region}.amazonaws.com/{iceberg-path}/',
'NOSIGN',
extra_credentials(role_arn='arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse', role_session_name='iceberg-session')
);Вариант B: Постоянный движок таблицы Iceberg
CREATE TABLE iceberg_secure (
id UInt64,
event_date Date,
data String
)
ENGINE = IcebergS3(
'https://{your-bucket}.s3.{region}.amazonaws.com/{iceberg-path}/',
'NOSIGN',
extra_credentials(role_arn='arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse')
);Вариант C: каталог Glue + IcebergS3
CREATE TABLE my_db.my_table
ENGINE = IcebergS3(
's3://{your-bucekt}/warehouse/{db}/{table}/',
'NOSIGN',
extra_credentials(role_arn='arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse')
)
SETTINGS
catalog_type = 'glue',
warehouse = '{your-warehouse}',
storage_endpoint = 's3://{your-bucket}',
region = '{region}'
aws_role_arn = 'arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse';Примечание: при использовании каталога Glue убедитесь, что у вашей роли IAM есть разрешения S3 и Glue на чтение и просмотр списков.
Вариант D: каталог DataLake для Glue
CREATE DATABASE glue_test2
ENGINE = DataLakeCatalog
SETTINGS
catalog_type = 'glue',
region = {region},
aws_role_arn = 'arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse',
aws_role_session_name = {session-name},
SETTINGS
allow_database_glue_catalog = 1;Проверьте доступ
- Выполните простой запрос:
SELECT * FROM icebergS3('https://{your-bucket}.s3.{region}.amazonaws.com/{iceberg-path}/', 'NOSIGN')
LIMIT 5;- Проверьте, нет ли ошибок IAM, таких как
AccessDeniedилиInvalidAccessKeyId.
Устранение неполадок
- Проверьте ARN роли в настройках сервиса ClickHouse Cloud.
- Убедитесь, что ваш бакет/объекты находятся в том же регионе, что и запросы к Iceberg, чтобы снизить задержку и стоимость.
- Убедитесь, что путь к таблице Iceberg указывает на корректное расположение метаданных Iceberg (файлы
metadata/v1/...в корневом каталоге таблицы). - Для режима каталога проверьте метаданные Glue и видимость партиций в консоли AWS Glue.