TableauとSnowflakeを接続する方法

catch-img

こんにちは、中村です。

SnowflakeとTableauの接続に戸惑ったので今回、記事にすることにしました。

同じように躓いている方、何を選ぼうか迷っている方はぜひ参考にしていただけると幸いです。

目次

設定

まずはSnowflake上でTableau用のシステムユーザーを作成しましょう

SnowsightのSQLで以下を実行してください。

-- 1. ユーザー作成
CREATE USER tableau
 Type = SERVISE
  DEFAULT_ROLE = 'tableau_role'
  COMMENT = 'Tableau専用ユーザー';

-- 2. ロール作成
CREATE ROLE tableau_role;

-- 3. ユーザーにロールを付与
GRANT ROLE tableau_role TO USER tableau;

続いてTableau接続用のODBCドライバーをこちらからダウンロードしましょう

Tableauを起動して、データソース画面からサーバーへ>その他を選択

ここで接続先一覧が表示されるのでSnowflakeを選択しましょう。

すると下の画像のような画面が表示されるので、各項目を入力していきます。役割(ロール)とウェアハウスはオプションなので、今回は入力をパスします。

サーバー欄にはSnowflakeのURL(*******.snowflakecomputing.com)を入力します。
Snowsightから自分のアカウントをクリック、アカウントからアカウントの詳細を表示するをクリック

アカウント/サーバーURLをコピーして入力しましょう。

認証方法

認証方法は4種類あります。
・OAuth
・ユーザー名とパスワード(非推奨)/PAT
・Oktaのユーザー名とパスワード
・キーペア

今回はOkta以外の3つを紹介します。

OAuth

注意:今回作成したサービスタイプのユーザーでは接続できません、MFA認証をした通常のユーザーでの接続方法になります。

SnowflakeのSQLワークシートから次を実行してください。

USE ROLE ACCOUNTADMIN;

--Tableau Desktopの場合
CREATE OR REPLACE SECURITY INTEGRATION tableau_desktop_oauth
  TYPE = OAUTH
  ENABLED = TRUE
  OAUTH_CLIENT = TABLEAU_DESKTOP
;

--Tableau Server/Cloudの場合
CREATE OR REPLACE SECURITY INTEGRATION tableau_Server_oauth
  TYPE = OAUTH
  ENABLED = TRUE
  OAUTH_CLIENT = TABLEAU_SERVER
;

実行が確認出来たら、Tableauで認証をOAuthにしてサインイン

Webブラウザが起動してユーザー名とパスワードが求められるので、設定通り入力してください

入力できたら許可を選択して接続完了です。

ユーザー名とパスワード

設定したユーザー名とパスワードを入力したら接続完了です。

ユーザー名:tableau
パスワード:******** 

注意!実行のたびにユーザー名とパスワードの入力が求められるので、この方法はあまり推奨できません!

PAT

SnowsightのSQLワークシートで以下を実行

--tableau_net_policyというポリシーと、tableau_tokenというトークンを作成する

USE ROLE SECURITYADMIN;

--許可するIPアドレスを入力
CREATE NETWORK POLICY IF NOT EXISTS tableau_net_policy
    ALLOWED_IP_LIST = ('127.0.0.1','xx.xx.xx.xx');  
--ユーザーにネットワークポリシーを適用
ALTER USER tableau SET NETWORK_POLICY = tableau_net_policy;

--トークンの作成と有効期限の設定
ALTER USER tableau ADD PROGRAMMATIC ACCESS TOKEN  tableau_PAT_token
  days_to_expiry = 365 -- アクセストークンの有効期限:最大365日
  role_restriction = tableau_role; 

すべて実行すると最後の実行で下のような結果が出力されるので、赤枠内のトークンをコピー

認証でユーザー名とパスワードを選択してユーザー名と先ほどのトークンをパスワードに入力すると接続完了

ユーザー名:tableau
パスワード:eyJraWQi******** (PATで発行されたトークンの値)

キーペア

ターミナルから以下を実行

#秘密鍵の作成(パスワード作成を求められる)
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out snowflake_rsa_key.p8 

#公開鍵の作成
openssl rsa -in snowflake_rsa_key.p8 -pubout -out snowflake_rsa_key.pub

作成された秘密鍵、公開鍵は実行したディレクトリに作成されます。

続いてSnowsightのSQLワークシートで以下を実行

--tableauというシステムユーザーがすでにあると仮定

--Snowflakeユーザーに公開キーを割り当てる(公開鍵snowflake_rsa_key.pubの中身を入れる)
ALTER USER tableau SET RSA_PUBLIC_KEY='MIIBIjANBgkqh...';

--ユーザーの公開キーのフィンガープリントを検証する
DESC USER tableau;
SELECT SUBSTR((SELECT "value" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
  WHERE "property" = 'RSA_PUBLIC_KEY_FP'), LEN('SHA256:') + 1);

もう一度ターミナルに戻って下のコマンドを実行

openssl rsa -pubin -in snowflake_rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl enc -base64

検証で出力されたものと一致していれば成功です。

Tableauに戻って認証でキーペアを選択し、ファイルの選択と秘密鍵のパスワードを入力して完了

まとめ

今回はTableauとSnowflakeの接続方法について解説しました。

個人的にはサービスタイプのユーザーは基本的にPAT、こだわりがあればキーペアを使うのが良いのではないかと思いました!

Nakamura
Nakamura
Google Cloud, Snowflakeを中心に記事を書いています。

人気記事ランキング

タグ一覧