Power BI SSO からSnowflakeへ

このトピックでは、Microsoft Power BI を使用してSnowflakeセッションをインスタンス化し、シングルサインオン(SSO)を使用してSnowflakeにアクセスする方法について説明します。

このトピックの内容:

概要

Snowflakeにより、Microsoft Power BI ユーザーは、IDプロバイダー認証情報と OAuth 2.0実装を使用してSnowflakeに接続し、Snowflakeのデータにアクセスするための SSO エクスペリエンスを提供できるようになります。

Power BI サービスは埋め込みSnowflakeドライバーを使用してSnowflakeに接続するため、この機能により、オンプレミスのPower BI ゲートウェイの実装が不要になります。

一般的なワークフロー

次の図は、Power BI からSnowflakeセッションをインスタンス化する認証フローをまとめたものです。

pbi sso workflow overview
  1. ユーザーは、Microsoft Azure Active Directory(Azure AD)を使用してPower BI サービスにログインします。

  2. (オプション)IDプロバイダーがAzure AD ではない場合、Azure AD は、ユーザーをPower BI サービスにロギングする前に SAML 認証でユーザーを確認します。

  3. ユーザーがSnowflakeに接続すると、Power BI サービスはAzure AD にSnowflakeのトークンを要求します。

  4. Power BI サービスは埋め込みSnowflakeドライバーを使用して、Azure AD トークンを接続文字列の一部としてSnowflakeに送信します。

  5. Snowflakeは、トークンを検証し、トークンからユーザー名を抽出してSnowflakeユーザーにマップし、ユーザーの既定のロールを使用してPower BI サービスのSnowflakeセッションを作成します。

前提条件

Snowflakeアカウントのために、Power BI SSO 機能を使用する前に次を確認します。

  • Snowflakeで ネットワークポリシー を使用している場合は、SnowflakeアカウントがホストされているAzure地域と、必要に応じて追加のAzure地域を含む、 Microsoft Azure IP 範囲 を許可できます。

    重要

    AzureのSnowflakeアカウントが配置されているAzure 地域 のPower BI に固有のネットワークポリシーを作成するには、ご使用の地域用Microsoftからの JSON ダウンロードを検索します。

    たとえば、AzureのSnowflakeアカウントがカナダ中央地域にある場合は、 JSON ダウンロードで PowerBI.CanadaCentral を検索します。 addressPrefixes リストから IP アドレス範囲を選択します。これらの IP アドレス範囲を使用して、Snowflakeでネットワークポリシーを作成または更新します。

    addressPrefixes リストが空の場合は、Microsoftに連絡して更新をリクエストしてください。

    複数のMicrosoft Azureサービス(例:Power BI、 SCIM)を使用している場合は、Azure管理者に連絡して正しい IP アドレス範囲を確認し、ユーザーにSnowflakeへのアクセスを許可する正しい IP アドレス範囲が、Snowflakeネットワークポリシーに含まれていることを確認してください。

  • ユーザーにSnowflake ACCOUNTADMIN または SECURITYADMIN のいずれかのロールを使用する必要がある場合は、 Snowflakeサポート にお問い合わせください。

    注釈

    デフォルトでは、アカウント管理者(ACCOUNTADMIN)およびセキュリティ管理者(SECURITYADMIN)のロールは、Microsoft Power BI の使用によるSnowflakeセッションのインスタンス化がブロックされています。これらのロールを許可するビジネス上のニーズがあり、セキュリティチームがそれを許可している場合は、Snowflakeサポートに連絡して、アカウントでこれらのロールを許可するようリクエストしてください。

  • login_namename、またはSnowflake内におけるユーザーの email 属性の入力では、Azureの AD upn 属性にマップする必要があります。 login_name 属性が定義されていない場合、プロセスはデフォルトで name 属性になります。

制限事項

現在、Snowflake Power BI SSO 機能には次の制限があります。

  • AWS PrivateLink およびAzure Private Linkはサポートされていません。これら2つのサービスのいずれかを使用してSnowflakeに接続する必要がある場合は、オンプレミスゲートウェイを使用して接続します。このパスウェイでは、シングルサインオンは提供されません。

入門

このセクションでは、SnowflakeでPower BI セキュリティ統合を作成する方法と、Power BI を介してSnowflakeにアクセスする方法について説明します。

Power BI セキュリティ統合の作成

注釈

Power BI サービスにPower BI ゲートウェイを使用してSnowflakeに接続する場合、または認証にSnowflakeのユーザー名とパスワードを使用する場合、このステップは不要です。

Power BI を使用して SSO からSnowflakeデータにアクセスするには、以下に示すように CREATE SECURITY INTEGRATION を使用してPower BI のセキュリティ統合を作成する必要があります。

セキュリティ統合には、 external_oauth_issuer パラメーターの正しい値が必要です。この値の一部は、Azure AD テナントにマップされます。この値は、Power BI テナントの About セクションにあります。

組織にPower BI サービスの高度な展開がある場合は、Azure AD 管理者に問い合わせて、発行者 URL の構築に使用するAzure AD テナントの正しい値を取得してください。

たとえば、Azure AD テナント ID が a828b821-f44f-4698-85b2-3c6749302698 の場合、 https://sts.windows.net/a828b821-f44f-4698-85b2-3c6749302698/ と類似の AZURE_AD_ISSUER 値を構築します。値の最後にスラッシュ(つまり、 /)を含めることが重要です。

AZURE_AD_ISSUER の値を作成した後、 CREATE SECURITY INTEGRATION コマンドを実行します。SnowflakeアカウントがMicrosoft Azure Governmentのクラウド 地域 にあるかどうかに基づいて、 external_oauth_audience_list セキュリティ統合パラメーターの値を正しく設定してください。

Microsoft Power BI のセキュリティ統合

create security integration powerbi
    type = external_oauth
    enabled = true
    external_oauth_type = azure
    external_oauth_issuer = '<AZURE_AD_ISSUER>'
    external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys'
    external_oauth_audience_list = ('https://analysis.windows.net/powerbi/connector/Snowflake')
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name';

Microsoft Power BI のMicrosoft Azure Governmentセキュリティ統合

create security integration powerbi_mag
    type = external_oauth
    enabled = true
    external_oauth_type = azure
    external_oauth_issuer = '<AZURE_AD_ISSUER>'
    external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys'
    external_oauth_audience_list = ('https://analysis.usgovcloudapi.net/powerbi/connector/snowflake')
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name';

重要

この SQL コマンドを実行できるのは、アカウント管理者(つまり、 ACCOUNTADMIN ロールを持つユーザー)またはグローバル CREATE INTEGRATION 権限を持つロールのみです。

セキュリティ統合パラメータの値は大文字と小文字が区別され、セキュリティ統合に入力する値は環境内のこれらの値と一致する必要があります。大文字と小文字が一致しない場合、アクセストークンが検証されず、認証試行が失敗する可能性があります。

すべてのパラメーター値が完全に一致することを確認します。たとえば、 <AZURE_AD_ISSUER> URL 値がバックスラッシュで終了せず、セキュリティ統合が URL の最後にバックスラッシュ文字で作成された場合、エラーメッセージが表示されます。その場合は、セキュリティ統合オブジェクトをドロップし( DROP INTEGRATION を使用)、正しい URL の値でオブジェクトを再度作成する必要があります( CREATE SECURITY INTEGRATION を使用)。

ご使用の環境で、ユーザーの UPN 属性値 がSnowflakeの login_name ではなくユーザーのメールフィールドと一致する場合は、 login_nameemail_address に置き換えます。例:

create security integration powerbi
    type = external_oauth
    ...
    external_oauth_snowflake_user_mapping_attribute = 'email_address';

外部 OAuth セキュリティ統合の変更

セキュリティ統合で ALTER ステートメントを実行することにより、外部 OAuth セキュリティ統合を更新できます。

詳細については、 ALTER SECURITY INTEGRATION をご参照ください。

Power BI からSnowflakeへの接続

Power BI からSnowflakeに接続する方法の詳細については、Power BI のドキュメントをご参照ください。

外部 OAuth でのネットワークポリシーの使用

現在、ネットワークポリシーは外部 OAuth セキュリティ統合に追加できません。

ユースケースで OAuth とSnowflakeネットワークポリシーが必要な場合は、 Snowflake OAuth を使用してください。

詳細については、 OAuth およびネットワークポリシー をご参照ください。

トラブルシューティング

  • ウェアハウスの再開。特定のユーザーが一時停止しているウェアハウスを使用しようとすると、Microsoft Power BI は、 エラーメッセージ に説明されていないエラーメッセージを表示します。確認し、必要に応じて、エラーメッセージを解決するために自動的に再開するようにウェアハウスを構成します。詳細については、 ウェアハウスの開始/再開 をご参照ください。

  • Power BI をSnowflakeに接続しようとする時に、エラーが発生する場合があります。エラーメッセージによっては、Microsoft、Snowflake、またはその両方でのトラブルシューティングが必要になる場合があります。

    • エラーメッセージ では、SnowflakeがPower BI で表示を返すことができる一般的なエラーメッセージについて説明します。

    • ログイン履歴 では、Snowflakeを使用して、ユーザーが最後にSnowflakeにアクセスしたかどうか、またはいつアクセスしたかを確認する方法について説明します。

エラーメッセージ

次のテーブルは、ユーザーがPower BI で認証しているときにSnowflakeが返すエラーメッセージを示しています。

動作

エラーメッセージ

トラブルシューティングアクション

無効なアクセストークンまたはオーディエンス値。

データソースの認証情報を更新できませんでした。 ODBC:ERROR [28000] 無効な OAuth アクセストークン。 [<番号>]。

external_oauth_issuer パラメーターに正しい値が含まれていることを確認してください。 . Azure AD で、アクセストークンが最新であることを確認してください。

Snowflakeアカウントに AAD ユーザーが見つかりません。

データソースの認証情報を更新できませんでした。 ODBC:ERROR [28000] 誤ったユーザー名またはパスワードが指定されました。

ユーザーがSnowflakeに存在することを確認します(name または login_name 属性値がAzure AD のユーザーの UPN 値と一致すること)。

Snowflakeユーザーは存在しますが、無効になっています。

データソースの認証情報を更新できませんでした。 ODBC:ERROR [28000] ユーザーアクセスが無効になっています。ローカルシステム管理者に連絡してください。

Snowflakeで、 desc user <ユーザー名> を実行して、 disabled 属性が true に設定されているかどうかを確認します。このユーザーを許可する場合は、 alter user <ユーザー名> set disabled = true; を実行します。再度Power BI からSnowflakeにアクセスを試みてください。

Snowflakeは、期限切れの AAD トークンをPower BI から受け取ります。

データソースの認証情報を更新できませんでした。ODBC:ERROR [28000] OAuth アクセストークンが期限切れです。 [<番号>]。

Snowflakeサポートにお問い合わせください。

Snowflakeアカウントでセキュリティ統合が作成または無効化されていません。

データソース認証情報の更新に失敗しました。 ODBC:ERROR [28000] OAuth 認証サーバー統合が有効になっていません。

desc <セキュリティ統合名> を実行して、セキュリティ統合を確認または再作成します。

既定のロールがユーザーに設定されていません。

データソース認証情報の更新に失敗しました。 ODBC: ERROR [28000] ユーザーに既定のロールが割り当てられていません。ローカルシステム管理者に連絡して既定のロールを割り当ててもらい、再試行してください。

ユーザーの既定のロールを設定してください。

ユーザーの既定のロールがユーザーに付与されていません。

250001(08001)のためにテストが失敗しました。 DB: <ホスト>に接続できませんでした。ユーザー構成済みの既定のロール「<ROLE>」は、このユーザーに許可されていません。ローカルシステム管理者に問い合わせるか、 PUBLIC などの別のロールを選択する接続文字列で CLI クライアントを使用してログインを試みてください。

ユーザーの既定のロールを確認し、付与します。

ログイン履歴

ユーザーがPower BI にアクセスできてもSnowflakeセッションをインスタンス化できない場合、サポートされている コネクタ またはSnowflakeウェブインターフェイスを使用して次のコマンドを実行することにより、ユーザーが最後にSnowflakeにアクセスしたのはいつかを判断できます。成功した認証のみが記録されます。

use role accountadmin;
select *
from table(information_schema.login_history(dateadd('hours',-1,current_timestamp()),current_timestamp()))
order by event_timestamp;

結果ごとに、 USER_NAME 列と FIRST_AUTHENTICATION_FACTOR 列を評価します。

  • USER_NAME 値は、 前提条件 セクションで説明されている属性マッピングと一致する必要があります。

  • FIRST_AUTHENTICATION_FACTOROAUTH_ACCESS_TOKEN に設定する必要があります。