يدعم ClickHouse Cloud وصولًا آمنًا قائمًا على الأدوار إلى بيانات Iceberg المخزنة في التخزين الكائني (عادةً S3)، وذلك باستخدام علاقة ثقة في AWS IAM مستندة إلى ARN. ويتبع هذا الدليل النمط نفسه للإعداد الآمن كما في الوصول الآمن إلى بيانات S3، مع إضافة إعدادات خاصة بـ Iceberg في ClickHouse.
نظرة عامة
- احصل على معرّف دور خدمة ClickHouse Cloud (IAM).
- أنشئ دور IAM في حساب AWS الخاص بك بحيث يمكن لـ ClickHouse تولّيه.
- أرفِق بالدور سياسات الكائنات وكتالوج الخاصة بـ Iceberg.
- استخدم دوال جداول Iceberg أو محرك جدول IcebergS3 مع بيانات اعتماد قائمة على الدور.
احصل على معرّف دور خدمة ClickHouse (ARN)
1. سجّل الدخول إلى حسابك في ClickHouse Cloud.
2. حدّد خدمة ClickHouse التي تريد الاستعلام من خلالها عن بيانات Iceberg.
[object Object]
[object Object]
[object Object]
هذا الـ ARN مطلوب لسياسة الثقة في دور AWS IAM الذي سيصل إلى بيانات Iceberg الخاصة بك.

إعداد IAM افتراض الدور
1. سجّل الدخول إلى AWS وانتقل إلى خدمة IAM.
2. حدّد Roles ثم Create role.
عيّن Trusted entity type إلى Custom trust policy وأدخل القيم استنادًا إلى الخطوة 3.
3. أضف سياسات Trust وIAM.
استبدل {service-role-id} بـ معرّف دور الخدمة (IAM) الخاص بـ ClickHouse instance لديك.
{
"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. أضف tags (اختياري).
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')
);الخيار ب: محرك جدول 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 role لديك يمتلك أذونات القراءة والعرض لكلٍّ من 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 service.
- تأكّد من أن bucket/objects لديك موجودة في نفس المنطقة التي تُنفَّذ فيها استعلامات Iceberg، لتقليل زمن الوصول والتكلفة.
- أكّد أن مسار جدول Iceberg يشير إلى موقع صالح لبيانات Iceberg الوصفية (ملفات
metadata/v1/...ضمن جذر الجدول). - في وضع الكتالوج، تحقّق من البيانات الوصفية في Glue ومن ظهور الأقسام باستخدام وحدة تحكم AWS Glue.