Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Iceberg データへの安全なアクセス

ClickHouse Cloud は、ARN ベースの AWS IAM 信頼関係を利用して、オブジェクトストレージ (通常は S3) に保存された Iceberg データへの安全なロールベースアクセスをサポートしています。このガイドでは、S3 データへの安全なアクセスと同じ安全なセットアップのパターンに沿って、ClickHouse に Iceberg 固有の設定を追加します。

概要

  • ClickHouse Cloud サービスロール ID (IAM) を取得します。
  • ClickHouse が引き受けられる IAM ロールを AWS アカウントに作成します。
  • Iceberg 固有のオブジェクトポリシーとカタログポリシーをロールにアタッチします。
  • ロールベースの認証情報を使用して、Iceberg テーブル関数または IcebergS3 テーブルエンジンを使用します。

ClickHouseサービスのロール ID (ARN) を取得する

1. ClickHouse Cloud アカウントにログインします。

2. Iceberg データをクエリする ClickHouseサービスを選択します。

[object Object]

[object Object]

[object Object]

この ARN は、Iceberg データにアクセスする AWS IAM ロールの信頼ポリシーで必要になります。

ClickHouseサービスの IAM ロール ARN を取得する

IAM AssumeRole を設定する

1. AWS にログインし、IAM サービスに移動します。

2. `Roles` を選択し、次に `Create role` を選択します。

Trusted entity typeCustom trust policy を選択し、ステップ 3 に基づいて値を入力します。

3. 信頼ポリシーと IAM ポリシーを追加します。

{service-role-id} を、ClickHouse インスタンスの サービスロール ID (IAM) に置き換えてください。

{
  "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]

ClickHouse Cloud で Iceberg へのアクセスを設定する

オプション A: ロール ARN を使用する Iceberg テーブル関数

NOSIGN オプションとロールベースの認証情報を指定して、icebergS3 テーブル関数を使用します。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: Glue 向け DataLake Catalog

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. AccessDeniedInvalidAccessKeyId などの IAM エラーがないか確認します。

トラブルシューティング

  • ClickHouse Cloud サービスの設定でロール ARN を確認します。
  • レイテンシとコストを抑えるため、バケット/オブジェクトが Iceberg クエリと同じリージョンにあることを確認します。
  • Iceberg テーブルのパスが有効な Iceberg メタデータの場所 (テーブルのルート配下にある metadata/v1/... ファイル) を指していることを確認します。
  • カタログ モードでは、AWS Glue コンソールで Glue メタデータとパーティションの可視性を確認します。
Navigation