Tableau Desktop/Tableau CloudからSnowflake OAuthを用いてSnowflakeへ接続してみた

Tableau Desktop/Tableau CloudからSnowflake OAuthを用いてSnowflakeへ接続してみた

Clock Icon2025.03.31

さがらです。

Tableau Desktop/Tableau CloudからSnowflake OAuthを用いてSnowflakeへ接続してみたので、その内容を本記事でまとめてみます。

使用する製品のバージョン

  • Tableau Desktop:2025.1
  • Tableau Cloud:2025.1.0
  • Snowflake:9.7.3

Security Integrationの作成

最初に、Snowflake OAuthを使うために、Tableau Desktop用とTableau Cloud用、それぞれに対してSecurity Integrationを作成します。

Tableau Desktop用のSecurity Integration

まず、Tableau Desktop用にSecurity Integrationを作成します。以下のドキュメントを参考に作成します。

https://docs.snowflake.com/en/sql-reference/sql/create-security-integration-oauth-snowflake#tableau-desktop-example

create security integration sagara_tableaudesktop_oauth_int
  type = oauth
  enabled = true
  oauth_client = tableau_desktop
  oauth_refresh_token_validity = 7776000 -- tokenの有効期限。最大値の「7776000(90日間)」に設定
  oauth_use_secondary_roles = none -- secondary roleの有効化について、noneにすると無効化される
  blocked_roles_list = ('sysadmin'); -- ここで指定したロールは、Snowflake OAuth接続の際に利用できない

Tableau Cloud用のSecurity Integration

次に、Tableau Cloud用にSecurity Integrationを作成します。以下のドキュメントを参考に作成します。

https://docs.snowflake.com/en/sql-reference/sql/create-security-integration-oauth-snowflake#tableau-cloud-example

create security integration sagara_tableaucloud_oauth_int
  type = oauth
  enabled = true
  oauth_client = tableau_server
  oauth_refresh_token_validity = 7776000 -- tokenの有効期限。最大値の「7776000(90日間)」に設定
  oauth_use_secondary_roles = none -- secondary roleの有効化について、noneにすると無効化される
  blocked_roles_list = ('sysadmin'); -- ここで指定したロールは、Snowflake OAuth接続の際に利用できない

参考:accountadminなどをOAuth認証で除外したい場合

上述のクエリではblocked_roles_listsysadminだけを入れていましたが、accountadminorgadminsecurityadminはデフォルトでブロックされるようにOAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LISTというパラメータで設定がされています。

https://docs.snowflake.com/en/sql-reference/parameters#label-oauth-add-privileged-roles-to-blocked-list

これらのロールをSecurity Integration作成時にblocked_roles_listで指定しようとすると、下図のようにエラーが起きます。(既にアカウントレベルでブロック済のところに更にブロックしようとしているだけなのですが、エラーになるようです。)

2025-03-31_11h26_51

事前準備:ドライバーのインストール

以下のURLから、Snowflake用の最新のODBCドライバーをダウンロードして、インストールしておきます。

https://www.snowflake.com/en/developers/downloads/odbc/

Tableau Desktopからパブリッシュして確認~デフォルトロール・ウェアハウスがあるユーザー編~

下図のようにdefault_warehousedefault_roleが定義されておりMFAも設定されているユーザーで、Snowflakeに接続してワークブックを作成してパブリッシュしてみます。

2025-03-31_13h47_36

Tableau Desktopからの接続&パブリッシュ

接続からSnowflakeを押します。

2025-03-31_14h06_44

サーバー欄にだけ、対象のSnowflakeアカウントのURLを入れて、認証OAuthでのサインインにして、サインインを押します。

※ここで役割(ロール)ウェアハウスを入力しない理由は、ここで固定してしまうとパブリッシュしたときにそのロールとウェアハウスの権限を持っていないとクエリできなくなってしまうためです。(弊社の別のブログより)

2025-03-31_14h15_39

すると、ブラウザが立ち上がるため、SnowflakeアカウントのユーザーとPWを入力します。

2025-03-31_14h16_50

MFAを設定している場合は、MFAの認証画面も表示されます。

2025-03-31_14h18_03

MFAの認証後、下図のように表示されるため、許可を押します。使用するユーザーに設定したデフォルトロールが使われることがわかります。

2025-03-31_14h19_28

この後、Tableau Desktopに戻ると、Snowflakeへの接続が完了していることがわかります。

これでダッシュボードをつくってパブリッシュするのですが、ウェアハウスを指定してしまうとパブリッシュした後にそのウェアハウスのUSAGE権限を持つ場合のみTableau Cloudで対象のワークブックのコンテンツを閲覧できるようになるため、注意しましょう。(弊社の別のブログより)

2025-03-31_15h09_15

今回は適当にシートでグラフを作成して、パブリッシュします。

2025-03-31_14h36_20

パブリッシュする際のポイントとしては、認証ユーザーにメッセージを表示にすることです。これを指定しないとTableau CloudにSnowflakeの認証情報が埋め込まれてしまい、Tableau Cloudで閲覧する際に各ユーザーに対してSnowflakeへのOAuth認証が効かなくなってしまいます。

2025-03-31_14h35_35

Tableau Cloudからの閲覧

パブリッシュした後に対象のワークシートを閲覧しようとすると、下図の画面が表示されますので、サインインを押します。

2025-03-31_14h37_48

あとはTableau Desktopで認証した際と同じ手順で、OAuthによる認証を行います。

2025-03-31_14h38_41

2025-03-31_14h39_22

2025-03-31_14h39_37

これで、Tableau Cloud上でもパブリッシュしたワークシートが確認できました!

2025-03-31_14h41_00

おまけ:Tableau DesktopからSnowflakeへOAuthで接続~デフォルトロール・ウェアハウスがないユーザー編~

下図のようにdefault_warehousedefault_roleが定義されてないユーザーで、Snowflakeに接続してワークブックを作成してみようとしてみます。

2025-03-31_14h47_56

Tableau Desktopからの接続

Tableau DesktopからSnowflakeへOAuthで接続しようとすると、全ユーザーに必ず付与されているpublicロールが使われるように動作します。

2025-03-31_14h49_15

また、接続後にウェアハウスも選択せずに可視化しようとすると、デフォルトのウェアハウスも指定されていないため下図のようにエラーが起きます。このため、基本的にTableauからSnowflakeへ接続する際は、デフォルトロールとデフォルトウェアハウスを各ユーザーに定義しておくことが非常に重要になります。

2025-03-31_14h53_05

2025-03-31_14h53_29

おまけ:使用できないロールでOAuth認証を行おうとした場合

更におまけなのですが、使用できないロールでOAuth認証を行おうとした場合にどうなるかを確認してみます。

Security Integration作成時にblocked_roles_listで指定したロール

Security Integration作成時にblocked_roles_listで指定したロールであるsysadminで認証しようとすると、MFAの認証後に下図のようにエラーが出ました。

2025-03-31_15h01_49

2025-03-31_15h02_51

OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LISTが有効化されている場合のaccountadmin等のロール

OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LISTで指定されているaccountadminのロールを指定して認証しようとすると、先ほどのblocked_roles_listのときと同様に、MFAの認証後に下図のようにエラーが出ました。

2025-03-31_15h04_13

2025-03-31_15h02_51

参考記事

今回の検証内容については既に以下の記事でも投稿されており、今回の私の検証においても参考にしております。ぜひこちらも併せてご覧ください。

https://zenn.dev/shinoki/articles/50a238813e1aa1

https://dev.classmethod.jp/articles/snowflake-oauth-tableau-cloud-desktop/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.