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


このアプローチにより、顧客はすべての S3 バケットへのアクセスを、各バケットポリシーを一つずつ確認してアクセス権の追加や削除を行う必要なく、1 か所(引き受けるロールの IAM ポリシー)で一元管理できるようになります。 以下のセクションでは、この設定方法について説明します。
ClickHouse サービスの IAM ロール ARN を取得する
-
ClickHouse Cloud アカウントにログインします。
-
連携を作成したい ClickHouse サービスを選択します。
-
Settings タブを選択します。
-
ページ下部の Network security information セクションまでスクロールします。
-
下図に示すように、そのサービスに対応する Service role ID (IAM) の値をコピーします。

IAM Assume Role の設定
IAM Assume Role は次のいずれかの方法で設定できます。
CloudFormation スタックでデプロイする
-
IAM ロールを作成および管理できる権限を持つ IAM ユーザーで、Web ブラウザーから AWS アカウントにログインします。
-
CloudFormation スタックを作成するために、次の CloudFormation URL にアクセスします。
-
先ほど取得したサービス用の service role ID (IAM) を "ClickHouse Instance Roles" という名前の入力欄に入力(または貼り付け)します。
Cloud コンソールに表示されているとおりの service role ID をそのまま貼り付けて構いません。 -
"Bucket Names" という名前の入力欄に、バケット名を入力します。バケット URL が
https://ch-docs-s3-bucket.s3.eu-central-1.amazonaws.com/clickhouseS3/の場合、バケット名はch-docs-s3-bucketです。
バケット ARN 全体ではなく、バケット名のみを指定してください。
- 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 | このロールがアクセスできるバケット名のカンマ区切りリストです。注意: バケット ARN 全体ではなく、バケット名を使用してください。 |
-
I acknowledge that AWS CloudFormation might create IAM resources with custom names. チェックボックスを選択します。
-
右下にある Create stack ボタンをクリックします。
-
CloudFormation スタックがエラーなく完了したことを確認します。
-
新しく作成されたスタックを選択し、CloudFormation スタックの Outputs タブを選択します。
-
この連携用に RoleArn の値をコピーします。これは S3 バケットにアクセスするために必要な値です。

IAM ロールを手動で作成する
-
IAM ロールの作成および管理権限を持つ IAM ユーザーで、ウェブブラウザから自分の AWS アカウントにログインします。
-
IAM サービスコンソールにアクセスします。
-
次の IAM ポリシーおよび信頼ポリシーを使用して新しい IAM ロールを作成し、
{ClickHouse_IAM_ARN}を ClickHouse インスタンスに対応する IAM ロール ARN に置き換えます。
IAM ポリシー
- 作成後に新しい IAM Role Arn をコピーします。これは S3 バケットにアクセスするために必要な情報です。
ClickHouseAccess ロールを使用して S3 バケットにアクセスする
ClickHouse Cloud では、S3 テーブル関数の一部として extra_credentials を指定できます。
以下は、上で作成した新しいロールを使用してクエリを実行する例です。
以下は、role_session_name を共有シークレットとして使用し、バケット内のデータをクエリするクエリ例です。
role_session_name が正しくない場合、この操作は失敗します。
データ転送料金を抑えるため、S3 バケットは ClickHouse Cloud サービスと同じリージョンに配置することを推奨します。詳細については S3 pricing を参照してください。
高度なアクション制御
より厳格なアクセス制御を行うために、aws:SourceVpce 条件 を使用して、ClickHouse Cloud の VPC エンドポイントから発行されたリクエストのみを受け付けるようにバケットポリシーを制限できます。ご利用の ClickHouse Cloud リージョンの VPC エンドポイントを取得するには、ターミナルを開いて次を実行します。
次に、取得したエンドポイントを使用して、IAM ポリシーに Deny ルールを追加します。
ClickHouse Cloud サービスのエンドポイントへのアクセス方法の詳細については、Cloud IP Addresses を参照してください。