GCS データに安全にアクセスする
このガイドでは、Google Cloud Storage (GCS) に安全に認証し、ClickHouse Cloud からデータにアクセスする方法を説明します。
はじめに
ClickHouse Cloud は、Google Cloud サービスアカウントに関連付けられた HMAC (Hash-based Message Authentication Code) キーを使用して GCS に接続します。 この方法により、クエリ内に認証情報を直接埋め込むことなく、GCS バケットに安全にアクセスできます。
動作の流れは次のとおりです:
- 適切な GCS 権限を持つ Google Cloud サービスアカウントを作成します
- そのサービスアカウント用の HMAC キーを生成します
- これらの HMAC 認証情報を ClickHouse Cloud に設定します
- ClickHouse Cloud はこれらの認証情報を使用して GCS バケットにアクセスします
この方法では、サービスアカウントに対する IAM ポリシーを通じて GCS バケットへのすべてのアクセスを管理できるため、個々のバケットポリシーを変更することなく、アクセス権の付与や取り消しを容易に行えます。
前提条件
このガイドに従うには、次のものが必要です。
- 有効な ClickHouse Cloud サービス
- Cloud Storage が有効になっている Google Cloud プロジェクト
- GCP プロジェクトでサービスアカウントを作成し、HMAC キーを生成する権限
セットアップ
Google Cloud サービスアカウントを作成する
- Google Cloud Console で、[IAM と管理] → [サービス アカウント] に移動します

- 左側のメニューで
Service accountsをクリックし、次にCreate service accountをクリックします。

サービスアカウントの名前と説明を入力してください。例:
Create and continueをクリックします

サービスアカウントに Storage Object User ロールを付与します:

このロールは、GCSオブジェクトへの読み取りおよび書き込みアクセスを提供します
読み取り専用アクセスには、代わりに Storage Object Viewer を使用してください
より細かい制御が必要な場合は、カスタムロールを作成できます
Continueをクリックし、次にDoneをクリックします
サービスアカウントのメールアドレスをメモしてください:

サービスアカウントにバケットへのアクセス権を付与する
アクセス権は、プロジェクトレベルまたは個別のバケットレベルで付与できます。
オプション1: 特定のバケットへのアクセスを許可(推奨)
Cloud Storage→Bucketsを開きます- アクセス権を付与するバケットをクリックします
Permissionsタブを開きます- 「Permissions」で、前の手順で作成したプリンシパルの
Grant accessをクリックします - "New principals" フィールドにサービス アカウントのメールアドレスを入力します
- 該当するロールを選択してください:
- 読み取り/書き込みアクセス権を持つ Storage Object USER
- 読み取り専用アクセス用 Storage Object Viewer
Saveをクリックします。- 追加のバケットがある場合は、同じ手順を繰り返します
オプション2: プロジェクトレベルのアクセス権限を付与する
- 「IAM と管理」→「IAM」に移動します
Grant accessをクリックします- サービスアカウントのメールアドレスを
New principalsフィールドに入力します - Storage Object User(読み取り専用とする場合は Storage Object Viewer)を選択します。
- [SAVE] をクリックします
プロジェクト全体の権限ではなく、ClickHouseがアクセスする必要のある特定のバケットのみにアクセス権を付与してください。
サービスアカウントのHMAC鍵を生成する
Cloud Storage → Settings → Interoperabilityに移動します:

「Access keys」セクションが表示されない場合は、Enable interoperability access をクリックします
「サービスアカウント用のアクセスキー」の下で、Create a key for a service accountをクリックします:

先ほど作成したサービスアカウントを選択します(例:clickhouse-gcs-access@your-project.iam.gserviceaccount.com)
Create keyをクリックします。

HMACキーが表示されます。 アクセスキーとシークレットの両方を直ちに保存してください。シークレットは後から再表示できません。
以下にキーの例を示します:
これらの認証情報は安全に保管してください。 この画面を閉じると、シークレットを再度取得することはできません。 シークレットを紛失した場合は、新しいキーを生成する必要があります。
ClickHouse CloudでHMACキーを使用する
これで、HMAC認証情報を使用してClickHouse CloudからGCSにアクセスできるようになりました。 これには、GCSテーブル関数を使用します:
複数のファイルにはワイルドカードを使用してください:
GCS向けClickPipesでのHMAC認証
ClickPipesは、Google Cloud Storageへの認証にHMAC(Hash-based Message Authentication Code)キーを使用します。
- ClickPipe のセットアップ時に、
Authentication methodでCredentialsを選択します - 前の手順で取得した HMAC 認証情報を入力します

サービスアカウント認証は現在サポートされていません。HMAC キーを使用してください。
GCS バケット URL は https://storage.googleapis.com/<bucket>/<path> の形式で指定してください(gs:// 形式は使用できません)。
HMACキーは、roles/storage.objectViewerロールを持つサービスアカウントに関連付ける必要があります。このロールには以下が含まれます:
storage.objects.list: バケット内のオブジェクトを一覧表示するstorage.objects.get: オブジェクトを取得/読み取りする
ベストプラクティス
環境ごとに個別のサービスアカウントを使用する
開発、ステージング、本番といった各環境ごとに、個別のサービスアカウントを作成します。例えば:
これにより、他の環境に影響を与えることなく、特定の環境へのアクセスだけを簡単に取り消せます。
最小権限アクセスを適用する
必要最小限の権限のみを付与します。
- 読み取り専用アクセスには Storage Object Viewer を使用する
- プロジェクト全体ではなく特定のバケットにのみアクセスを付与する
- 特定のパスへのアクセスを制限するため、バケットレベルの条件の利用を検討する
HMAC キーを定期的にローテーションする
キーのローテーションスケジュールを実装します:
- 新しい HMAC キーを生成する
- ClickHouse の設定を新しいキーに更新する
- 新しいキーで動作を確認する
- 古い HMAC キーを削除する
Google Cloud は HMAC キーの有効期限を強制しないため、独自のローテーションポリシーを実装する必要があります。
Cloud Audit Logs でアクセスを監視する
Cloud Storage 用に Cloud Audit Logs を有効化し、アクセスを監視します:
- IAM & Admin → Audit Logs に移動します
- 一覧から Cloud Storage を探します
Admin Read、Data Read、Data Write logsを有効にします- これらのログを使用してアクセスパターンを監視し、異常を検知します