こんにちは、中村です。
SnowflakeとTableauの接続に戸惑ったので今回、記事にすることにしました。
同じように躓いている方、何を選ぼうか迷っている方はぜひ参考にしていただけると幸いです。
目次
-- 1. ユーザー作成
CREATE USER tableau
Type = SERVISE
PASSWORD = '************'
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
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の接続方法について解説しました。
個人的には特定のIPだけで接続するならPAT、そうでなければOAuthを使うのが良いのではないかと思いました!