[新機能]TableauやPower BIのパスワード欄にも使えるSnowflakeのアクセストークン機能「Programmatic access tokens」がリリースされました
さがらです。
TableauやPower BIのパスワード欄にも使えるSnowflakeのアクセストークン機能「Programmatic access tokens」がリリースされました。
この機能を試してみたので、早速内容をまとめてみます。
Programmatic access tokensとは
Programmatic access tokensですが、他のサービスにもよくあるアクセストークンを発行して、そのアクセストークンで外部ツールから認証が出来る機能となります。
ただ、今回リリースされたSnowflakeのアクセストークンの売りは、以下2点にあります。
TYPE=SERVICEのユーザーでも発行できる- これまで
TYPE=SERVICEのユーザーはキーペア認証など、正直少し手間のかかる方法でしか認証できなかった 
- これまで
 - パスワード欄にアクセストークンの値を入れることで、既存のBIツールなどから認証ができる
- 最近のMFA強制で既存ユーザーのBIツールからの認証方法に悩まれていた方にとって、助けになると思います!
 - 公式Docsでも、
You can also use a programmatic access token as a replacement for a password in the following:- Snowflake drivers.- Third-party applications that connect to Snowflake (such as Tableau and PowerBI).と言及があります 
 
試してみた
TYPE=SERVICEのユーザーを作成
まず、以下のクエリを実行してTYPE=SERVICEのユーザーを作成します。
use role accountadmin;
create user sagara_service
    type = service
    default_role = public;
grant role sysadmin to user sagara_service;
grant role public to user sagara_service;
TYPE=SERVICEのユーザーについては、以下のブログが参考になると思います。
ネットワークポリシーの設定(デフォルト設定の場合は必須)
デフォルトの設定では、アクセストークン発行のユーザーに対してネットワークポリシーが何かしら適用されていないと、アクセストークンの発行ができないようになっております。
今回は、特定のIPアドレスからしかアクセスできないようにすることを想定し、以下のクエリを実行してみます。
use role accountadmin;
create network policy if not exists sagara_service_ip_policy
  allowed_ip_list = ('xxx.xxx.xxx.xxx', 'yyy.yyy.yyy.yyy');
alter user sagara_service set network_policy = sagara_service_ip_policy;
TYPE=SERVICEのユーザーに対して、アクセストークンを発行
次に、以下のクエリを実行してアクセストークンを発行します。
use role accountadmin;
alter user if exists sagara_service add programmatic access token tableau_token
  days_to_expiry = 365 -- アクセストークンの有効期限を設定、最大365日。
  role_restriction = 'PUBLIC'; -- 指定したロールで、クエリが実行される。ロール名は大文字にすることに注意。セカンダリロールは使用されない。
すると、下図のようにアクセストークンが結果欄に表示されます。このタイミングでしか表示されないため、ご注意ください。

Tableauからの認証に使用してみる
発行したアクセストークンがTableauからの認証に使用できるか確かめてみます。
パスワード欄に、先程発行したトークンの値を入れます。

すると、無事に認証できました!TYPE=SERVICEのユーザーでも、アクセストークンを発行して無事に認証が出来ましたね。

ちなみに、アクセストークンの作成時にrole_restrictionではPUBLICと指定していたので、SYSADMINで認証しようとするとエラーになります。

おまけ:アクセストークンのローテーション
あとはおまけですが、以下のドキュメントに沿ってアクセストークンのローテーションもやってみます。
use role accountadmin;
alter user if exists sagara_service
  rotate programmatic access token tableau_token
  expire_rotated_token_after_hours = 0; -- 既存のトークンを何時間経過後に無効化するかの設定。デフォルトは「24」時間
すると、下図のように新しいトークンが発行されますので、これを用いて再度認証を行えばOKです。

ちなみに、expire_rotated_token_after_hours = 0としていたので、ローテーション前のアクセストークンを利用していたTableauではエラーが表示されるようになりました。

最後に
TableauやPower BIのパスワード欄にも使えるSnowflakeのアクセストークン機能「Programmatic access tokens」がリリースされたので、早速試してみました。
TYPE=SERVICEのユーザーや、MFA強制による既存ユーザーのBIツールからの認証方法に悩まれていた方にとって、助けになると思います!
ぜひ、ご活用ください。







