こんにちは、SCSK松岡です。
本記事では、Power BIからSnowflakeにSSO(シングルサインオン)を使用して接続するための一連の手順と注意点をご紹介します。
Snowflakeに蓄積したデータをBIツールで可視化することは、データの価値を最大限引き出すために重要なポイントの一つです。
Microsoftのサービスと高い親和性を持つPower BIでは、SSOによりMicrosoft Entra IDの認証を利用して、データへのセキュアな接続が可能です。
SSOによりユーザーはシステム毎に別アカウントでログインする手間が省かれますが、そのためにはSnowflake側でのセキュリティ統合や、Power BI側での有効化設定、OAuth 2.0による接続設定などが必要となります。
前提
これからご紹介する手順には、Snowflakeのアカウント全体に影響する設定と、Microsoftの組織全体に影響する設定が含まれます。そのため、設定を行うには次のユーザーが必要です。
- ACCOUNTADMINロールを持つSnowflakeユーザー
- グローバル管理者権限を持つPower BIユーザー
また、手順は以下のマニュアルをベースに記載していますので、設定の際は合わせてご参考ください。
Microsoft Learn:Power BI サービスで Snowflake に接続する
Power BI で Snowflake に接続する - Power BIPower BI で Snowflake に接続し、SSO 認証またはゲートウェイ用に Microsoft Entra ID を使って構成する方法について説明します。
設定の流れ
(Snowflake設定) Power BIセキュリティ統合
まず初めに、Snowflake側でPower BIとのセキュリティ統合の設定を行います。設定にはACCOUNTADMINロールを持つユーザーが必要です。
設定にあたり、Microsoft Entra ID (旧称:Microsoft Azure Active Directory)のテナントIDが必要なので、事前に取得しておきましょう。テナントIDは、Entra IDのトップページ(概要)から取得できます。
テナントIDが取得できたら、その値を「external_oauth_issuer」に含める形で以下のようなコマンドを実行します。
create security integration powerbi type = external_oauth enabled = true external_oauth_type = azure external_oauth_issuer = 'https://sts.windows.net/[テナントID]/' external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys' external_oauth_audience_list = ('https://analysis.windows.net/powerbi/connector/Snowflake', 'https://analysis.windows.net/powerbi/connector/snowflake') external_oauth_token_user_mapping_claim = 'upn' external_oauth_snowflake_user_mapping_attribute = 'login_name'
例として、テナントIDがa828b821-f44f-4698-85b2-3c6749302698の場合、
external_oauth_issuerは、https://sts.windows.net/a828b821-f44f-4698-85b2-3c6749302698/ となります。
テナントIDの後にスラッシュ(/)を含める点に注意してください。
(Snowflake設定) ユーザー作成
セキュリティ統合が成功すれば、Entra IDユーザーのUPN属性値と、Snowflakeユーザーのlogin_name属性値が紐づきます。
逆に言うと、Entra IDのユーザーからSSOを使用してSnowflakeに接続するためには、対象のUPNと同じlogin_nameのSnowflakeユーザーを作成する必要があります。
各ユーザーのUPN(ユーザープリンシパル名)は、Entra IDのユーザー一覧から、対象のユーザーを選択した概要ページから確認できます。
取得したUPNをもとに、SQLの実行等でSnowflakeユーザーを作成しましょう。
CREATE USER [ユーザー名(任意)] PASSWORD = '[パスワード(任意)]' LOGIN_NAME = '[EntraIDのUPN]' DEFAULT_ROLE = [デフォルトロール]
注意点として、ユーザーを作成する際は、後にPower BIのレポートから参照しようとしているデータに応じた権限をデフォルトロールで設定する必要があります。また、Power BIから使用されるウェアハウスに対するUSAGE権限が付与されている必要があります。
付与された権限に不足がある場合、PowerBI側の認証時にエラーになってしまいます。
(Power BI設定)Snowflake SSOの有効化
続いて、Power BI側の管理設定です。
グローバル管理者権限を持つユーザーでPower BIにサインインし、
[設定]>[Power BI設定] > [管理ポータル] を選択します。
そこから、[テナント設定] > [統合の設定] > [Snowflake SSO] を選択して展開し、
設定を[有効]に切り替えた後、[適用]を選択します。
マニュアルだと、有効にしてから反映までに最大1時間かかるとの記載がありました。
(Power BI Desktop設定) データソースの追加
ここからは、Power BIでSnowflakeのレポート作成する際の考慮点になります。
まず、レポートを作成するためにはデータソースの用意が必要ですが、
データソースとしてSnowflakeに接続する場合、Power BI Desktopから行う必要があります。
Power BI Desktopと、ブラウザのPower BIサービス(クラウドベース)の違いや、
Power BI Desktopの取得方法は以下をご参考ください
大まかな違いとしては、 Power BI Desktopはレポート作成用途の機能が充実しており、
Power BIサービス(クラウドベース)は、レポートの共有用途の機能が充実しています。
Power BI Desktopは、PowerBIサービスと同じアカウントでサインインできます。
データソースとしてSnoflakeに接続する場合は、レポートのデータ追加画面から、「別のソースからデータを取得する」をクリックし、Snowflakeを選択します。
Snowflakeのサーバ情報、ウェアハウス情報を入力した後にユーザー情報が聞かれますが、Entra IDのユーザー情報を使用する場合はこのときに、「Microsoft Account」を選択します。
Snowflake側の設定が上手くいっていれば、Entra IDのユーザー情報による認証で、Snowflakeのデータが参照できるようになるはずです。
(Power BI設定) セマンティックモデル設定
Power BI Desktopで作成したレポートは「発行」ボタンからPower BI サービスに共有が可能です。
発行先のワークスペースを選択すると、レポートとセマンティックモデルがPower BIサービスにアップロードされます。
Power BIのセマンティックモデルには、データソースに接続する際の認証に必要な情報が含まれます。
アップロードされたセマンティックモデルの設定にアクセスし、[データソースの資格情報]に進んでから[資格情報を編集]を選択します。
認証方法が「OAuth2」に選択されている場合、SSOを利用した設定が引き継がれています。
最後に
上記の手順だと、利用ユーザーが増えるたびに手動でSnowflakeユーザーを作成する必要があります。追加でプロビジョニングの設定を行えば、その作業を自動化することも可能なようです。
これで、接続のための設定は完了です。
設定してみて詰まったポイントがいくつかあったので、少しでも参考になれば幸いです!