Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

الوصول إلى بيانات Iceberg بأمان

يدعم 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 الخاصة بك.

الحصول على ARN لدور IAM لخدمة ClickHouse

إعداد 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;

التحقّق من إمكانية الوصول

  1. شغّل استعلامًا بسيطًا:
SELECT * FROM icebergS3('https://{your-bucket}.s3.{region}.amazonaws.com/{iceberg-path}/', 'NOSIGN')
LIMIT 5;
  1. تحقّق من أخطاء IAM مثل AccessDenied أو InvalidAccessKeyId.

استكشاف الأخطاء وإصلاحها

  • تحقّق من معرّف ARN الخاص بالدور في إعدادات ClickHouse Cloud service.
  • تأكّد من أن bucket/objects لديك موجودة في نفس المنطقة التي تُنفَّذ فيها استعلامات Iceberg، لتقليل زمن الوصول والتكلفة.
  • أكّد أن مسار جدول Iceberg يشير إلى موقع صالح لبيانات Iceberg الوصفية (ملفات metadata/v1/... ضمن جذر الجدول).
  • في وضع الكتالوج، تحقّق من البيانات الوصفية في Glue ومن ظهور الأقسام باستخدام وحدة تحكم AWS Glue.
Navigation