
Snowflake の Programmatic access tokens で Tableau Cloud へのワークブックのパブリッシュから抽出更新までを試してみた
はじめに
2025年4月のアップデートで、Snowflake のアクセストークン機能である「Programmatic access tokens」がリリースされました。
Snowflake アカウントへの将来的な単一パスワード認証廃止により、Tableau であれば抽出更新など定期実行用にパスワード以外の認証方法を使用する必要があります。
Tableau Desktop・Tableau Cloud の組み合わせでアクセストークンによる認証~ワークブックのパブリッシュ、抽出更新まで試してみましたので、本記事でまとめてみます。
追記
Tableau Server (2025.1.1)でも同様の検証(Tableau Desktop からの接続、パブリッシュ、Server 上での抽出更新)を行い、アクセストークンで動作することを確認できました。
こちらも問題なさそうです。
前提条件
- Tableau Desktop:2025.1.0
- Snowflake ODBC ドライバ:3.8.0
サンプルデータと Tableau からの接続用ユーザーを作成
事前に以下の手順と内容で参照用のデータを作成しておきました。
USE ROLE SYSADMIN;
CREATE OR REPLACE DATABASE sampledb;
USE SCHEMA sampledb.public;
CREATE OR REPLACE TABLE CUSTOMERS (
CUSTOMER_ID INT,
FIRST_NAME STRING,
LAST_NAME STRING,
EMAIL STRING,
SIGNUP_DATE DATE
);
INSERT INTO CUSTOMERS (CUSTOMER_ID, FIRST_NAME, LAST_NAME, EMAIL, SIGNUP_DATE) VALUES
(1, 'Taro', 'Yamada', 'taro.yamada@example.com', '2023-01-15'),
(2, 'Hanako', 'Suzuki', 'hanako.suzuki@example.com', '2023-02-20'),
(3, 'John', 'Smith', 'john.smith@example.com', '2023-03-10'),
(4, 'Emma', 'Tanaka', 'emma.tanaka@example.com', '2023-04-05'),
(5, 'Kenta', 'Kobayashi', 'kenta.kobayashi@example.com', '2023-05-01');
続けて Tableau からSnowflake に接続するユーザーとロールを作成します。
USE ROLE USERADMIN;
--ロールを作成
CREATE ROLE tableu_role;
--SYSADMINに紐づけ
USE ROLE SECURITYADMIN;
GRANT ROLE tableu_role TO ROLE SYSADMIN;
--仮想ウェアハウスの使用権限を与える
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE tableu_role;
--テーブルの参照権限を与える
GRANT USAGE ON DATABASE sampledb TO ROLE tableu_role;
GRANT USAGE ON SCHEMA sampledb.public TO ROLE tableu_role;
GRANT SELECT ON ALL TABLES IN SCHEMA sampledb.public TO ROLE tableu_role;
--ユーザー作成
USE ROLE USERADMIN;
CREATE USER tableau_user
DEFAULT_ROLE = PUBLIC
TYPE = SERVICE;
--ユーザーがTableau用ロールを使用できるようにする
USE ROLE SECURITYADMIN;
GRANT ROLE tableu_role TO USER tableau_user;
定期実行を想定しユーザーをTYPE = SERVICE
として作成しています。このユーザータイプについては、以下の記事が参考になりますので、あわせてご参照ください
アクセストークンを発行
デフォルトでは、アクセストークンを発行のために対象のユーザーに対するネットワークポリシーが設定されている必要があります。
ここでは簡単に自身のネットワークと Tableau Cloud の IP アドレスからのアクセスを許可するネットワーク ポリシーを作成し、ユーザーに適用します。
USE ROLE SECURITYADMIN;
CREATE NETWORK POLICY IF NOT EXISTS tableau_user_net_policy
ALLOWED_IP_LIST = ('141.163.208.0/23','xx.xx.xx.xx');
--ユーザーにネットワークポリシーを適用
ALTER USER tableau_user SET NETWORK_POLICY = tableau_user_net_policy;
続けてアクセストークンを発行します。アクセストークンはユーザーの所有権があれば発行可能です。発行されたトークンは安全な場所に控えておきます。
ALTER USER tableau_user ADD PROGRAMMATIC ACCESS TOKEN tableau_token
days_to_expiry = 365 -- アクセストークンの有効期限:最大365日
role_restriction = 'TABLEAU_ROLE';
また、アクセストークンの詳細については以下の記事もあわせてご参照ください。
Tableau Desktop から接続
アクセストークンはパスワードのように使用できます。Tableau Desktop から「ユーザー名とパスワード」で Snowflake に接続します。
問題なく接続できるので、簡単なシートを作成し、まずは認証資格情報を埋め込まずにワークブックをパブリッシュします。
認証資格情は埋め込まれていないので、パブリッシュ後のワークブックを Tableau Cloud で開くと下図の表示になります。
アクセストークンをパスワード欄に入力することで、Snowflake に接続しワークブックを表示できます。
抽出の作成と更新
続けて「埋め込みパスワード」としてワークブックをパブリッシュしてみます。
Tableau Cloud 側でデータソースを抽出に変更します。埋め込みなので問題なく抽出に変更できます。
Snowflake 側でレコードを追加します。
INSERT INTO CUSTOMERS (CUSTOMER_ID, FIRST_NAME, LAST_NAME, EMAIL, SIGNUP_DATE) VALUES
(6, 'Satoshi', 'Nakamoto', 'satoshi.nakamoto@example.com', '2023-06-12'),
(7, 'Aiko', 'Fujimoto', 'aiko.fujimoto@example.com', '2023-07-03'),
(8, 'David', 'Lee', 'david.lee@example.com', '2023-08-21'),
(9, 'Naoko', 'Inoue', 'naoko.inoue@example.com', '2023-09-15'),
(10, 'Carlos', 'Garcia', 'carlos.garcia@example.com', '2023-10-01');
スケジュールを指定し、抽出を更新します。
問題なく定期実行され、データも確認されていることを確認できました。
認証資格情報を埋め込まず抽出を作成しようとした場合
本記事の検証時は、ライブ接続の状態から「データソース > 接続の編集」接続を編集し、パスワードを埋め込もうとするとテスト接続も失敗、抽出作成更新時もエラーとなってしまいました。そのため、Desktop からパブリッシュする際は、上記のように予め認証資格情報を埋め込むことで対応しました。
キーペア認証を使用する場合
上記と同じ設定で、キーペア認証を試してみたのですが、本検証時の環境では Desktop から接続・ワークブックをパブリッシュできても Tableau Cloud 側でワークブックを開くことができませんでした。
※以下のドキュメントに記載があるように、ワークブックをパブリッシュする前に Tableau Cloud 側のマイアカウント設定から認証情報の保存は設定済み
こちらは既知の問題(17152178)として取り上げられているようでした。
さいごに
新しいアクセストークンで Tableau Desktop からの接続、パブリッシュ、Cloud 上での抽出更新を試してみました。SERVICE ユーザーに対してもこれまでのパスワードと同じような使用感で動作も問題なさそうです。
こちらの内容が何かの参考になれば幸いです。