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

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

IAM ロールの引き受けの設定
オプション 1: CloudFormation スタックを使用してデプロイする
1 - IAM ロールの作成および管理権限を持つ IAM ユーザーで、ウェブブラウザから自分の AWS アカウントにログインします。
2 - CloudFormation スタックを作成するために この URL にアクセスします。
3 - ClickHouse サービスに対応する IAM Role を入力(またはペースト)します。
4 - CloudFormation スタックを設定します。以下は各パラメータに関する補足情報です。
| Parameter | Default Value | Description |
|---|---|---|
| RoleName | ClickHouseAccess-001 | ClickHouse Cloud が S3 バケットへアクセスする際に使用する、新しいロールの名前です。 |
| Role Session Name | * | Role Session Name は、共有シークレットとして使用し、バケットをさらに保護するために利用できます。 |
| ClickHouse Instance Roles | この Secure S3 連携を使用できる ClickHouse サービス IAM ロールの、カンマ区切りリストです。 | |
| Bucket Access | Read | 指定されたバケットに対するアクセスレベルを設定します。 |
| Bucket Names | このロールがアクセス権を持つ バケット名 のカンマ区切りリストです。 |
注意: バケットの完全な ARN ではなく、バケット名のみを指定してください。
5 - I acknowledge that AWS CloudFormation might create IAM resources with custom names. チェックボックスを選択します。
6 - 右下の Create stack ボタンをクリックします。
7 - CloudFormation スタックがエラーなく完了したことを確認します。
8 - CloudFormation スタックの Outputs を選択します。
9 - この連携用に RoleArn の値をコピーします。これは S3 バケットへアクセスするために必要な値です。

オプション 2: IAM ロールを手動で作成する
1 - IAM ロールの作成および管理権限を持つ IAM ユーザーで、ウェブブラウザから自分の AWS アカウントにログインします。
2 - IAM サービスコンソールにアクセスします。
3 - 次の IAM ポリシーおよび信頼ポリシーを使用して、新しい IAM ロールを作成します。
信頼ポリシー({ClickHouse_IAM_ARN} を、ClickHouse インスタンスに対応する IAM ロール ARN に置き換えてください):
IAM ポリシー({BUCKET_NAME} をバケット名に置き換えてください):
4 - 作成後に新しい IAM Role Arn をコピーします。これは S3 バケットにアクセスするために必要なものです。
ClickHouseAccess ロールを使用して S3 バケットにアクセスする
ClickHouse Cloud では、S3 テーブル関数の一部として extra_credentials を指定できる新機能が利用できます。以下は、上で作成した新しいロールを使用してクエリを実行する例です。
以下は、role_session_name を共有シークレットとして使用し、バケットからデータをクエリするサンプルクエリです。role_session_name が正しくない場合、この操作は失敗します。
データ転送料金を抑えるため、ソースの S3 バケットは ClickHouse Cloud サービスと同じリージョンに配置することを推奨します。詳細については S3 pricing を参照してください。