Skip to main content
Snowflake アカウントを接続して、Tony(データベースエンジニア)がウェアハウスのクレジット消費を読み取り、低速クエリと失敗クエリを順位付けし、テーブルのストレージ負荷を測定できるようにします。CloudThinker はプログラマティックアクセストークンを使い SQL REST API 経由で Snowflake に接続し、新しい接続は書き込みツールをオンにするまで読み取り専用です。

前提条件

  • ロール、サービスユーザー、トークンを作成するための ACCOUNTADMIN(または同等の権限)。
  • そのユーザーに割り当てるネットワークポリシー。ネットワークポリシーが存在するまで、Snowflake はトークン認証を拒否します。
  • ロールが使用できるウェアハウス。メタデータクエリはコンピュートを必要としないため、ウェアハウスがなくても接続テストは成功し、実際の分析だけが失敗することがあります。

セットアップ

1

読み取り専用ロールを作成する

ACCOUNTADMIN で実行します。USAGE_VIEWER はメータリングとストレージ、OBJECT_VIEWER はオブジェクトインベントリを対象とし、GOVERNANCE_VIEWERQUERY_HISTORY を読み取り可能にします:
2

サービスユーザーを作成する

SERVICE タイプのユーザーはパスワード、MFA、SSO を持たないため、トークンだけで認証します:
3

ネットワークポリシーを割り当てる

テストアカウント以外では、ALLOWED_IP_LIST を自社の送信 IP レンジに絞り込んでください:
この手順の省略が最も多いセットアップ失敗であり、返るエラー(390403)はポリシーについて何も述べません。
4

プログラマティックアクセストークンを発行する

Snowflake がトークンを表示するのは作成時の一度だけです。DAYS_TO_EXPIRY は厳格な有効期限で、その日から接続は 390318 で失敗し始めるため、新しいトークンを発行します。
5

CloudThinker で接続を追加する

Connections → Snowflake を開き、次を入力します:
  • Account identifier: MYORG-MYACCOUNTSnowsight → Account details で確認できます。完全な URL ではありません。
  • Programmatic access token: 前の手順で発行したトークン。アカウントのパスワードではありません。
  • Role: 任意。空欄にするとユーザーのデフォルトロールを使用します。
  • Warehouse: 任意。空欄にするとユーザーのデフォルトウェアハウスを使用します。
Connect をクリックします。CloudThinker がアカウント、リージョン、ロール、ウェアハウスを解決すると、ステータスが Connected になります。

接続の詳細

REST ホストはアカウント識別子を小文字にし、区切り文字をハイフンとして扱うため、アンダースコアで書かれた識別子でも解決されます。

必要な権限

読み取り専用(デフォルト)

GOVERNANCE_VIEWER は見落としやすい権限です。これがないと、コストとストレージの回答は動作し続ける一方で、低速クエリとエラーの回答はすべて QUERY_HISTORY で失敗します。

書き込みアクセス(有効にする場合のみ)

OPERATE はエージェントが操作してよいウェアハウスにのみ付与し、共有の本番ウェアハウスには決して付与しないでください。リソースモニターを設定した専用のエージェント用ウェアハウスなら、そのコンピュートにプロンプトでは引き上げられない上限を設けられます。

エージェントの機能

接続後、Tony は次のことができます:

接続を確認する

プロンプト例

Snowflake が公開するのはクレジットであり通貨ではありません。クレジット単価はこの接続からは読み取れないため、エージェントはクレジットをクレジットとして報告します。

書き込みアクセス

接続は読み取り専用で出荷され、アクセス権は資格情報に従うため、書き込みは接続ごとの判断になります。1 つのワークスペースが読み取り専用トークンと書き込み可能トークンを同時に保持できます。 有効化は Connections → Snowflake → Tool permissions から行います。事前に検討すべき点が 2 つあります:
  • ここでの書き込みは正確に 2 つの操作であり、任意の SQL ではありません。 リソースモニターの引き上げ、DATA_RETENTION_TIME_IN_DAYS の引き下げ、ウェアハウスのサイズ変更は、Snowsight で実行するステートメントとしてユーザーに報告されます。
  • グラントの方が強い制御です。 ツール権限は CloudThinker が書き込みを要求するかどうかを決めます。Snowflake が書き込みを許可するかどうかは、トークンの ROLE_RESTRICTION とロールのグラントが決めます。
Snowflake に条件付きの一時停止はありません。ビジー状態の確認と ALTER は別々のステートメントであるため、その間にクエリが開始してコンピュートを失う可能性があります。エージェントは状態変更とこの制約を報告し、一時停止が安全だったとは決して述べません。
書き込みは毎回、ツール呼び出しでのユーザー承認を必要とします。

トラブルシューティング

ユーザーにネットワークポリシーがありません。割り当てられるまで Snowflake はトークン認証を拒否します: ALTER USER SVC_CLOUDTHINKER SET NETWORK_POLICY = CT_POLICY;
トークンが期限切れまたは取り消されています。DAYS_TO_EXPIRY は厳格な有効期限です。新しいトークンを発行し、接続を更新してください。
ビュー名の誤記ではなく、データベースロールの不足です。エージェントに探索を実行させてください。ロールが読み取れる ACCOUNT_USAGE ビューを一覧し、読み取れないビューには正確な GRANT 行を出力します。
リソースモニターがクォータを超過しているか、ウェアハウスが一時停止していて再開できません。これは権限ではなくアカウントのキャパシティの問題であり、GRANT では解決しません。アカウント管理者がリソースモニターを引き上げるかリセットします。資格情報は有効であり、テストプローブはコンピュートを必要としないため、接続は Connected のままです。
サービスユーザーに DEFAULT_WAREHOUSE がなく、設定もされていません。接続の Warehouse を設定するか、ユーザーにデフォルトを付与してください。
ロールがトークンの ROLE_RESTRICTION の範囲外です。トークンが引き受けられるロールを使うか、Role を空にしてユーザーのデフォルトを使用してください。
エラーではありません。ACCOUNT_USAGE には数時間の遅延があり、履歴は 1 年分保持されるため、利用の少ないアカウントで狭い期間を指定すると行が返りません。

セキュリティ

  • 最小権限 — エージェントがユースケースに必要な権限のみを付与します。まず読み取り専用から始め、後から拡張してください。
  • デフォルトで読み取り専用 — エージェントにこの接続で変更を行わせる場合を除き、読み取り専用の認証情報を使用してください。
  • 認証情報のローテーション — 通常のスケジュールに従ってキーとトークンをローテーションしてください。接続を更新すると、CloudThinker が新しい値を自動的に取得します。
  • オフボーディング時に失効 — 接続を削除するか、チームメンバーが退職する際には、プロバイダー側で認証情報を無効化してください。
  • 専用のサービスユーザーTYPE = SERVICE のユーザーはパスワード、MFA、SSO を持たないため、トークンが唯一の経路となり、監査証跡が読み取りやすく保たれます。
  • トークンを制限し期限を設けるROLE_RESTRICTION が接続の到達範囲すべてを限定し、DAYS_TO_EXPIRY が忘れがちなローテーションを強制します。

関連

Tony エージェント

データベースに特化した最適化エージェント

ClickHouse 接続

ClickHouse クラスタ向けの同様のセットアップ