概要
Snowflakeの接続情報を作成するためのDocsです。
なお、Snowflakeを利用する場合、必要な権限が付与されたロールを、あらかじめユーザーに付与しておく必要があります。
詳しくは、後述の権限とロールを参照ください。
入力項目
| 項目名 | 必須 | 内容 |
|---|---|---|
| 名前 | Yes | TROCCO内部で利用する接続情報の名前を入力します。 |
| メモ | No | TROCCO内部で利用する接続情報のメモを入力できます。 |
| ホスト | Yes | Snowflakeのホストを入力します。 詳しくは、ホスト名の入力形式を参照ください。 |
| 認証方式 | Yes | 認証方式を選択します。キーペア認証、プログラムによるアクセストークン認証、またはMicrosoft Entra IDによるOAuth認証から選択できます。 各選択肢に固有の設定項目については、認証方式についてを参照ください。 |
| ロール | No | ユーザーに付与されているロール名を入力します。 未入力の場合、Snowflakeのデフォルトの設定が利用されます。デフォルトの設定がない場合は、入力する必要があります。 ロールについて、詳しくは権限とロールを参照ください。 |
| JDBCドライバー | No | Snowflakeサーバーに接続するJDBCドライバーのバージョンを選択できます。
|
JDBCドライバーが未指定の場合、それぞれ以下のバージョンが利用されます。
- 転送元Snowflakeの場合:
3.13.5 - 転送先Snowflakeの場合:
3.13.26
ただし、JDBCドライバーの3.13系は2023年10月31日をもってSnowflakeのサポート対象外となります。
そのため、3.14系以上のバージョンの利用を推奨しております。
ホスト名の入力形式
以下のいずれかの形式で入力できます。
<LOCATOR>.<REGION>.<CLOUD>.snowflakecomputing.com- 入力例:
hm*****.ap-northeast-1.aws.snowflakecomputing.com
- 入力例:
<ORGANIZATION>-<ACCOUNT_NAME>.snowflakecomputing.com- 入力例:
*******-km*****.snowflakecomputing.com
- 入力例:
上記各要素は、Snowflakeのコンソール画面左下より確認できます。

認証方式について
認証方式ごとに固有の設定項目を記載します。
ユーザー・パスワード認証は、Snowflakeの仕様変更により将来的に廃止される予定です。
新規で接続情報を作成する場合は、キーペア認証、プログラムによるアクセストークン認証、またはMicrosoft Entra IDによるOAuth認証から選択してください。
既存の接続情報でユーザー・パスワード認証を利用している場合は、引き続き利用できますが、他の認証方式への移行を推奨します。
なお、認証方式を一度他の認証方式に変更した後は、ユーザー・パスワード認証に戻すことはできません。
キーペア認証の場合
| 項目名 | 必須 | 内容 |
|---|---|---|
| ユーザー | Yes | Snowflakeのユーザー名を入力します。 |
| 秘密鍵 | Yes | 認証方式でキーペア認証を選択した場合に入力します。 Snowflakeの秘密鍵を入力してください。 詳しくは、キーペア認証についてを参照ください。 |
| 秘密鍵のパスフレーズ | No | パスフレーズ付きの秘密鍵を利用する場合に入力してください。 |
プログラムによるアクセストークン認証の場合
| 項目名 | 必須 | 内容 |
|---|---|---|
| ユーザー | Yes | Snowflakeのユーザー名を入力します。 |
| プログラムによるアクセストークン | Yes | 認証方式でプログラムによるアクセストークン認証を選択した場合に入力します。 Snowflakeで発行したプログラムによるアクセストークンを入力してください。 |
プログラムによるアクセストークン(Programmatic Access Token)を利用するためには、Snowflake側で以下の事前設定が必要です。
- 対象ユーザーへのネットワークポリシーの設定
- プログラムによるアクセストークンの有効期限(expiry date)の設定(最長1年)
有効期限が切れたトークンを利用している接続情報では、ジョブが実行エラーとなります。
有効期限が切れる前に、Snowflake側でトークンを再発行し、TROCCOの接続情報を更新してください。
詳しくは、Snowflake公式ドキュメント - プログラムによるアクセストークンを参照ください。
Microsoft Entra IDによるOAuth認証の場合
| 項目名 | 必須 | 内容 |
|---|---|---|
| クライアントID | Yes | Microsoft Entra IDに登録したクライアント用アプリケーションの、アプリケーション(クライアント)IDを入力してください。 |
| クライアントシークレット | Yes | Microsoft Entra IDに登録したクライアント用アプリケーションの、クライアントシークレットを入力してください。 |
| テナントID | Yes | Microsoft Entra IDのテナントIDを入力してください。UUID形式(例:00000000-0000-0000-0000-000000000000)またはドメイン形式(例:xxx.onmicrosoft.com)で入力できます。 |
| スコープ | Yes | 認証方式でMicrosoft Entra IDによるOAuth認証を選択した場合に入力します。 Snowflakeのロールに対応するスコープを、Application ID URIを含む形式( <application_id_uri>/session:role-any)で入力してください。複数のスコープを指定する場合は、追加をクリックして入力欄を追加してください。 |
詳しくはMicrosoft Entra ID OAuth認証についてを参照ください。
キーペア認証について
公開鍵・秘密鍵を生成し、公開鍵をSnowflake側に、秘密鍵をTROCCO側に、設定する必要があります。
公開鍵・秘密鍵の生成
ターミナルにて、以下のコマンドを順に実施してください。
- 秘密鍵を作成する
生成した秘密鍵は、TROCCOのSnowflake接続情報の秘密鍵欄に入力してください。
$ openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
パスフレーズ付きの秘密鍵を利用する場合は、-nocryptオプションを削除してください。
- 公開鍵を生成する
$ openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
- 公開鍵を整形する(改行と不要な箇所の除去)
$ cat rsa_key.pub | \
tr -d "\n" | \
sed "s/-----BEGIN PUBLIC KEY-----//g" | \
sed "s/-----END PUBLIC KEY-----//g"
Snowflakeへの公開鍵の設定
先に作成・整形した公開鍵を踏まえて、Snowflake側で以下クエリを実行してください。
ALTER USER {USERNAME} SET RSA_PUBLIC_KEY='{PUBLIC_KEY}'
Microsoft Entra ID OAuth認証について
Microsoft Entra ID(旧Azure AD)を外部OAuthの認証サーバーとして利用し、Snowflakeに接続する認証方式です。
接続情報の作成時にMicrosoftアカウントで認証し、TROCCOが取得したアクセストークンを用いてSnowflakeに接続します。
事前準備
Microsoft Entra ID OAuth認証を利用するには、Microsoft Entra IDとSnowflakeで、あらかじめ以下の設定が必要です。
設定手順について、詳しくはSnowflake公式ドキュメント - 外部 OAuth 用 Microsoft Entra ID の構成を参照ください。
-
OAuthリソース用アプリケーションの登録
Microsoft Entra IDにアプリケーションを登録し、Application ID URIを設定します。
あわせて、Snowflakeのロールに対応するスコープ(session:role-anyまたはsession:role:<role_name>)を定義します。
アプリケーションの登録方法について、詳しくはMicrosoft Learn - Microsoft Entra IDにアプリを登録する方法を参照ください。 -
OAuthクライアント用アプリケーションの登録
Microsoft Entra IDにクライアント用のアプリケーションを登録します。
登録後、クライアントシークレットを生成し、手順1で登録したアプリケーションに対するアクセス許可を付与します。 -
Snowflakeでのセキュリティ統合の作成
Snowflakeで、外部OAuth用のセキュリティ統合(
external_oauth_type = azure)を作成します。
セキュリティ統合では、Microsoft Entra IDの発行者や署名鍵のエンドポイントに加えて、Snowflakeユーザーとの対応付けに用いるクレームを指定します。 -
Redirect URIの設定
TROCCOの接続情報の作成画面で、認証方式にMicrosoft Entra IDによるOAuth認証を選択します。
事前準備にRedirect URIが表示されるため、手順2で登録したアプリケーションのRedirect URIに設定してください。
Microsoft Entra ID OAuth認証では、接続に用いられるSnowflakeユーザーは、セキュリティ統合のexternal_oauth_token_user_mapping_claimおよびexternal_oauth_snowflake_user_mapping_attributeの設定に基づいて決定されます。
また、アクセストークンのスコープで指定されていないロールは利用できません。
接続情報のロール欄でスコープと異なるロールを指定する場合は、スコープにsession:role-anyを指定したうえで、セキュリティ統合のexternal_oauth_any_role_modeを有効にしてください。
TROCCOでの設定手順
- Snowflakeの接続情報の作成画面で、認証方式にMicrosoft Entra IDによるOAuth認証を選択します。
- クライアントID、クライアントシークレット、テナントID、スコープを入力します。
- Microsoftアカウント認証をクリックします。
- 別ウィンドウが開くため、Microsoftアカウントで認証します。
- 認証に成功すると、認証済みアカウントとして認証したMicrosoftアカウントが表示されます。
- 保存をクリックします。
権限とロール
Snowflakeを利用するにあたり、ロールに必要な権限を付与し、ユーザーにロールを付与する必要があります。
なお、転送設定(転送元・転送先)とデータマート定義とで、ロールに付与する必要のある権限は異なります。
転送設定(転送元)を利用する場合
必要となる権限
| 項目 | 権限 | 内容 |
|---|---|---|
| 仮想ウェアハウス権限 | OPERATE | ウェアハウスの状態(停止、開始、一時停止、再開)を変更し、実行中のクエリを中止できるようにします。 |
| 仮想ウェアハウス権限 | USAGE | 仮想ウェアハウスを使用し、その結果として、ウェアハウスでクエリを実行します。 |
| データベース権限 | USAGE | データベースを使用できるようにします。データベース内のオブジェクトを表示またはアクションを実行するには、追加の権限が必要です。 |
| スキーマ権限 | USAGE | スキーマを使用できるようにします。 |
| テーブル権限 | SELECT | テーブルでSELECTステートメントを実行できるようにします。 |
クエリサンプル
以下の条件を例に、ロールに権限を付与するクエリサンプルをご紹介します。
- 作成するロール:
TROCCO_INPUT_ROLE - ロールを付与するユーザー:
TROCCO_USER - 対象ウェアハウス:
TROCCO_WAREHOUSE - 対象データベース:
TROCCO_DATABASE - 対象スキーマ:
PUBLIC - 対象テーブル:
TROCCO_TABLE
実際にロールに権限を付与する場合は、適宜内容を読み替えてください。
-
ロールを作成可能なロールに切り替える
USE ROLE ACCOUNTADMIN; -
ロールを新規作成する
CREATE ROLE TROCCO_INPUT_ROLE; -
指定したユーザーにロールを使用可能にする
GRANT ROLE TROCCO_INPUT_ROLE TO USER TROCCO_USER; -
ユーザーに対し、作成したロールをデフォルトで使用するロールにする
ALTER USER TROCCO_USER SET DEFAULT_ROLE = TROCCO_INPUT_ROLE; -
ウェアハウスの利用権限をロールに付与する
GRANT USAGE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_INPUT_ROLE; GRANT OPERATE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_INPUT_ROLE; -
データベースの利用権限をロールに付与する
GRANT USAGE ON DATABASE TROCCO_DATABASE TO ROLE TROCCO_INPUT_ROLE; -
スキーマの利用権限をロールに付与する
GRANT USAGE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_INPUT_ROLE; -
スキーマの全テーブルに対してSELECTクエリを実行可能にする権限をロールに付与する場合
GRANT SELECT ON ALL TABLES IN SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_INPUT_ROLE; -
個別のテーブルのみSELECTクエリを実行可能にする権限をロールに付与する場合
GRANT SELECT on TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_INPUT_ROLE;
転送設定(転送先)を利用する場合
必要となる権限
| 項目 | 権限 | 内容 | 備考 |
|---|---|---|---|
| 仮想ウェアハウス権限 | OPERATE | ウェアハウスの状態(停止、開始、一時停止、再開)を変更し、実行中のクエリを中止できるようにします。 | |
| 仮想ウェアハウス権限 | USAGE | 仮想ウェアハウスを使用し、その結果として、ウェアハウスでクエリを実行します。 | |
| データベース権限 | USAGE | データベースを使用できるようにします。データベース内のオブジェクトを表示またはアクションを実行するには、追加の権限が必要です。 | |
| スキーマ権限 | USAGE | スキーマを使用できるようにします。 | |
| スキーマ権限 | CREATE TABLE | テーブルの複製など、スキーマで新しいテーブルを作成できるようにします。 | |
| スキーマ権限 | CREATE STAGE | ステージの複製など、スキーマで新しいステージを作成できるようにします。 | |
| テーブル権限 | OWNERSHIP | テーブルの所有権を譲渡します。これにより、テーブルに対するフル制御が付与されます。 | 転送モードがreplaceの場合、 DROP TABLE クエリを実行するために必要となります。 ※DROP TABLEクエリを使用するにはテーブルの所有権を持つロールを使用する必要があります。 Snowflake ドキュメント - 使用上の注意 ※ すでに存在するテーブルに対して実行する場合のみ必要になります。 |
クエリサンプル
以下の条件を例に、ロールに権限を付与するクエリサンプルをご紹介します。
- 作成するロール:
TROCCO_OUTPUT_ROLE - ロールを付与するユーザー:
TROCCO_USER - 対象ウェアハウス:
TROCCO_WAREHOUSE - 対象データベース:
TROCCO_DATABASE - 対象スキーマ:
PUBLIC - 対象テーブル:
TROCCO_TABLE
実際にロールに権限を付与する場合は、適宜内容を読み替えてください。
-
ロールを作成可能なロールに切り替える
USE ROLE ACCOUNTADMIN; -
ロールを新規作成する
CREATE ROLE TROCCO_OUTPUT_ROLE; -
指定したユーザーにロールが使えるようにする
GRANT ROLE TROCCO_OUTPUT_ROLE TO USER TROCCO_USER; -
ユーザーに対し、作成したロールをデフォルトで使用するロールにする
ALTER USER TROCCO_USER SET DEFAULT_ROLE = TROCCO_OUTPUT_ROLE; -
ウェアハウスの利用権限をロールに付与する
GRANT USAGE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_OUTPUT_ROLE; GRANT OPERATE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_OUTPUT_ROLE; -
データベースの利用権限をロールに付与する
GRANT USAGE ON DATABASE TROCCO_DATABASE TO ROLE TROCCO_OUTPUT_ROLE; -
スキーマの利用権限をロールに付与する
GRANT USAGE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_OUTPUT_ROLE; -
テーブル作成の権限をロールに付与する\
GRANT CREATE TABLE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_OUTPUT_ROLE; -
ステージの操作の権限をロールに付与する
GRANT CREATE STAGE on SCHEMA TROCCO_DATABASE.PUBLIC to ROLE TROCCO_OUTPUT_ROLE; -
テーブルの所有権をロールに移行させる
※ すでに存在するテーブルに対して実行する場合に必要になります。
GRANT OWNERSHIP ON TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_OUTPUT_ROLE;
データマート定義を利用する場合
必要となる権限
| 項目 | 権限 | 内容 | 備考 |
|---|---|---|---|
| 仮想ウェアハウス権限 | OPERATE | ウェアハウスの状態(停止、開始、一時停止、再開)を変更し、実行中のクエリを中止できるようにします。 | |
| 仮想ウェアハウス権限 | USAGE | 仮想ウェアハウスを使用し、その結果として、ウェアハウスでクエリを実行します。 | |
| データベース権限 | USAGE | データベースを使用できるようにします。データベース内のオブジェクトを表示またはアクションを実行するには、追加の権限が必要です。 | |
| スキーマ権限 | USAGE | スキーマを使用できるようにします。 | |
| スキーマ権限 | CREATE TABLE | テーブルの複製など、スキーマで新しいテーブルを作成できるようにします。 | |
| テーブル権限 | SELECT | テーブルでSELECTステートメントを実行できるようにします。 | |
| テーブル権限 | INSERT | テーブルでINSERTステートメントを実行できるようにします。 | 書き込みモードが追記の場合、出力先テーブルへデータを登録するために必要となります。 |
| テーブル権限 | OWNERSHIP | テーブルの所有権を譲渡します。これにより、テーブルに対するフル制御が付与されます。 | 書き込みモードが全件洗い替えの場合、出力先テーブルの削除を実行するために必要となります。 ※ すでに存在するテーブルに対して実行する場合のみ必要になります。 |
クエリサンプル
以下の条件を例に、ロールに権限を付与するクエリサンプルをご紹介します。
- 作成するロール:
TROCCO_DATAMART_ROLE - ロールを付与するユーザー:
TROCCO_USER - 対象ウェアハウス:
TROCCO_WAREHOUSE - 対象データベース:
TROCCO_DATABASE - 対象スキーマ:
PUBLIC - 対象テーブル:
TROCCO_TABLE
実際にロールに権限を付与する場合は、適宜内容を読み替えてください。
-
ロールを作成可能なロールに切り替える
USE ROLE ACCOUNTADMIN; -
ロールを新規作成する
CREATE ROLE TROCCO_DATAMART_ROLE; -
指定したユーザーにロールが使えるようにする
GRANT ROLE TROCCO_DATAMART_ROLE TO USER TROCCO_USER; -
ユーザーに対し、作成したロールをデフォルトで使用するロールにする
ALTER USER TROCCO_USER SET DEFAULT_ROLE = TROCCO_DATAMART_ROLE; -
ウェアハウスの利用権限をロールに付与する
GRANT USAGE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_DATAMART_ROLE; GRANT OPERATE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_DATAMART_ROLE; -
データベースの利用権限をロールに付与する
GRANT USAGE ON DATABASE TROCCO_DATABASE TO ROLE TROCCO_DATAMART_ROLE; -
スキーマの利用権限をロールに付与する
GRANT USAGE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_DATAMART_ROLE; -
テーブル作成の権限をロールに付与する
GRANT CREATE TABLE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_DATAMART_ROLE; -
テーブルへINSERTクエリを実行可能にする権限をロールに付与する
GRANT INSERT ON TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_DATAMART_ROLE; -
テーブルの所有権をロールに移行させる
※ すでに存在するテーブルに対して実行する場合に必要になります。
GRANT OWNERSHIP ON TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_DATAMART_ROLE;