接続情報 - Snowflake

Prev Next

概要

Snowflakeの接続情報を作成するためのDocsです。

なお、Snowflakeを利用する場合、必要な権限が付与されたロールを、あらかじめユーザーに付与しておく必要があります。
詳しくは、後述の権限とロールを参照ください。

入力項目

項目名 必須 内容
名前 Yes TROCCO内部で利用する接続情報の名前を入力します。
メモ No TROCCO内部で利用する接続情報のメモを入力できます。
ホスト Yes Snowflakeのホストを入力します。
詳しくは、ホスト名の入力形式を参照ください。
ユーザー Yes Snowflakeのユーザー名を入力します。
認証方式 Yes 認証方式を選択します。新規作成時は、キーペア認証またはプログラムによるアクセストークン認証から選択できます。
秘密鍵 Yes 認証方式でキーペア認証を選択した場合に入力します。
Snowflakeの秘密鍵を入力してください。
詳しくは、キーペア認証についてを参照ください。
秘密鍵のパスフレーズ No パスフレーズ付きの秘密鍵を利用する場合に入力してください。
プログラムによるアクセストークン Yes 認証方式でプログラムによるアクセストークン認証を選択した場合に入力します。
Snowflakeで発行したプログラムによるアクセストークンを入力してください。
パスワード Yes 認証方式でユーザー・パスワード認証を選択した場合に入力します。
Snowflakeのパスワードを入力してください。
※ユーザー・パスワード認証は廃止予定です。
ロール No ユーザーに付与されているロール名を入力します。
未入力の場合、Snowflakeのデフォルトの設定が利用されます。デフォルトの設定がない場合は、入力する必要があります。
ロールについて、詳しくは権限とロールを参照ください。
JDBCドライバー No Snowflakeサーバーに接続するJDBCドライバーのバージョンを選択できます。
  • 3.14.2
  • 3.17.0
  • 3.24.2
JDBCドライバーのバージョンについて

JDBCドライバーが未指定の場合、それぞれ以下のバージョンが利用されます。

  • 転送元Snowflakeの場合:3.13.5
  • 転送先Snowflakeの場合:3.13.26

ただし、JDBCドライバーの3.13系は2023年10月31日をもってSnowflakeのサポート対象外となります。
そのため、3.14系以上のバージョンの利用を推奨しております。

ユーザー・パスワード認証の廃止予定

ユーザー・パスワード認証は、Snowflakeの仕様変更により将来的に廃止される予定です。
新規で接続情報を作成する場合は、キーペア認証またはプログラムによるアクセストークン認証から選択してください。

既存の接続情報でユーザー・パスワード認証を利用している場合は、引き続き利用できますが、キーペア認証またはプログラムによるアクセストークン認証への移行を推奨します。
なお、認証方式を一度キーペア認証またはプログラムによるアクセストークン認証に変更した後は、ユーザー・パスワード認証に戻すことはできません。

プログラムによるアクセストークン認証の利用条件

プログラムによるアクセストークン(Programmatic Access Token)を利用するためには、Snowflake側で以下の事前設定が必要です。

  • 対象ユーザーへのネットワークポリシーの設定
  • プログラムによるアクセストークンの有効期限(expiry date)の設定(最長1年)

有効期限が切れたトークンを利用している接続情報では、ジョブが実行エラーとなります。
有効期限が切れる前に、Snowflake側でトークンを再発行し、TROCCOの接続情報を更新してください。

詳しくは、Snowflake公式ドキュメント - プログラムによるアクセストークンを参照ください。

ホスト名の入力形式

以下のいずれかの形式で入力できます。

  • <LOCATOR>.<REGION>.<CLOUD>.snowflakecomputing.com
    • 入力例:hm*****.ap-northeast-1.aws.snowflakecomputing.com
  • <ORGANIZATION>-<ACCOUNT_NAME>.snowflakecomputing.com
    • 入力例:*******-km*****.snowflakecomputing.com

上記各要素は、Snowflakeのコンソール画面左下より確認できます。
connection-configuration-snowflake_001

キーペア認証について

公開鍵・秘密鍵を生成し、公開鍵をSnowflake側に、秘密鍵をTROCCO側に、設定する必要があります。

公開鍵・秘密鍵の生成

ターミナルにて、以下のコマンドを順に実施してください。

  1. 秘密鍵を作成する
    生成した秘密鍵は、TROCCOのSnowflake接続情報の秘密鍵欄に入力してください。
$ openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
パスフレーズ付きの秘密鍵

パスフレーズ付きの秘密鍵を利用する場合は、-nocryptオプションを削除してください。

  1. 公開鍵を生成する
$ openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
  1. 公開鍵を整形する(改行と不要な箇所の除去)
$ 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}'

権限とロール

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;