このガイドでは、ClickHouse Cloud のお客様がロールベースのアクセス制御を利用して Amazon Simple Storage Service (S3) で認証し、データへ安全にアクセスする方法を説明します。 安全な S3 アクセスの設定に入る前に、その仕組みを理解しておくことが重要です。以下は、お客様の AWS アカウント内のロールを引き受けることで、ClickHouseサービスがプライベートな S3 バケットにアクセスする仕組みの概要です。

この方法では、S3 バケットへのすべてのアクセスを 1 か所 (引き受けるロールの IAM ポリシー) で管理できるため、アクセスを追加または削除するたびに各バケットポリシーを見直す必要がありません。 以下のセクションでは、この設定方法を説明します。
ClickHouseサービスの IAM ロール ARN を取得する
-
ClickHouse Cloud アカウントにログインします。
-
インテグレーションを作成する ClickHouseサービスを選択します。
-
Settings タブを選択します。
-
ページ下部の Network security information セクションまでスクロールします。
-
以下に示すように、そのサービスの Service role ID (IAM) の値をコピーします。

IAM Assume Role を設定する
IAM Assume Role は、次の 2 つの方法のいずれかで設定できます。
CloudFormation スタックを使用したデプロイ
-
IAM ロールを作成および管理する権限を持つ IAM ユーザーで、Web ブラウザーから AWS アカウントにログインします。
-
次の CloudFormation URL にアクセスし、CloudFormation スタックの作成画面を開きます。
-
前の手順で取得したサービスの service role ID (IAM) を、"ClickHouse Instance Roles" という入力欄に入力 (または貼り付け) します。 service role ID は Cloud Console に表示されているものをそのまま貼り付けできます。
-
"Bucket Names" という入力欄にバケット名を入力します。バケット URL が
https://ch-docs-s3-bucket.s3.eu-central-1.amazonaws.com/clickhouseS3/の場合、バケット名はch-docs-s3-bucketです。
- CloudFormation スタックを設定します。以下に、これらのパラメータに関する追加情報を示します。
| Parameter | Default Value | Description |
|---|---|---|
| RoleName | ClickHouseAccess-001 | ClickHouse Cloud が S3 バケットへのアクセスに使用する新しいロールの名前です。 |
| Role Session Name | * | Role Session Name は、バケットをさらに保護するための共有シークレットとして使用できます。 |
| ClickHouse Instance Roles | この安全な S3 インテグレーションを使用できる ClickHouseサービス IAM ロールのカンマ区切りリストです。 | |
| Bucket Access | Read | 指定したバケットに対するアクセスレベルを設定します。 |
| Bucket Names | このロールがアクセスできるバケット名のカンマ区切りリストです。 Note: 完全なバケット ARN ではなく、バケット名を使用してください。 |
-
I acknowledge that AWS CloudFormation might create IAM resources with custom names. チェックボックスを選択します
-
右下にある Create stack ボタンをクリックします
-
CloudFormation スタックがエラーなく完了することを確認します。
-
新しく作成した Stack を選択し、CloudFormation スタックの Outputs タブを選択します
-
このインテグレーションの RoleArn 値をコピーします。これは S3 バケットにアクセスするために必要な値です。

IAM ロールを手動で作成する
-
IAM ロールの作成と管理の権限を持つ IAM ユーザーで、ウェブブラウザから AWS アカウントにログインします。
-
IAM サービスのコンソールに移動します
-
以下の IAM ポリシーと信頼ポリシーを使用して、新しい IAM ロールを作成します。
{ClickHouse_IAM_ARN}は、ClickHouse インスタンスに属する IAM ロールの ARN に置き換えてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "{ClickHouse_IAM_ARN}"
},
"Action": "sts:AssumeRole"
}
]
}IAM ポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::{BUCKET_NAME}"
],
"Effect": "Allow"
},
{
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::{BUCKET_NAME}/*"
],
"Effect": "Allow"
}
]
}- 作成後、新しいIAM Role Arnをコピーします。これは、S3 バケットにアクセスするために必要です。
ClickHouseAccessロールでS3バケットにアクセスする
ClickHouse Cloud では、S3 table function の一部として extra_credentials を指定できます。
以下は、上でコピーした新しく作成したロールを使用してクエリを実行する例です。
DESCRIBE TABLE s3('https://s3.amazonaws.com/BUCKETNAME/BUCKETOBJECT.csv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001'))以下は、role_session_name を共有シークレットとして使用してバケット内のデータをクエリする例です。
role_session_name が正しくない場合、この操作は失敗します。
DESCRIBE TABLE s3('https://s3.amazonaws.com/BUCKETNAME/BUCKETOBJECT.csv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001', role_session_name = 'secret-role-name'))高度なアクション制御
より厳格なアクセス制御を行うには、aws:SourceVpce 条件を使用して、ClickHouse Cloud の VPC エンドポイント経由のリクエストのみを受け入れるようにバケットポリシーを制限できます。お使いの ClickHouse Cloud リージョンの VPC エンドポイントを取得するには、ターミナルを開いて次を実行します。
# Replace <your-region> with your ClickHouse Cloud region
curl -s https://api.clickhouse.cloud/static-ips.json | jq -r '.aws[] | select(.region == "<your-region>") | .s3_endpoints[]'次に、返されたエンドポイントを使って、IAMポリシーに拒否ルールを追加します:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:Get*"
],
"Resource": [
"arn:aws:s3:::{BUCKET_NAME}",
"arn:aws:s3:::{BUCKET_NAME}/*"
]
},
{
"Sid": "VisualEditor3",
"Effect": "Deny",
"Action": [
"s3:GetObject"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": [
"{ClickHouse VPC ID from your S3 region}",
"{ClickHouse VPC ID from your S3 region}",
"{ClickHouse VPC ID from your S3 region}"
]
}
}
}
]
}ClickHouse Cloud サービスのエンドポイントへのアクセス方法の詳細については、Cloud IP Addressesを参照してください。