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. オプションとして、Azure AD は SAML 経由で IdP を通じてユーザーを確認できます。現在、MicrosoftはPower BI SSO の IdP としてAzure AD のみをサポートしています。

  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ネットワークポリシーに含まれていることを確認してください。

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

考慮事項

Power BI ゲートウェイあり

Snowflakeサービスへのプライベート接続はサポートされています。これら2つのサービスのいずれかを使用してSnowflakeに接続する必要がある場合は、オンプレミスゲートウェイを使用して接続します。

Power BI ゲートウェイなし

Snowflakeサービスへのプライベート接続はサポートされていません。Power BI サービスとPower BI デスクトップの場合は、Azure Active Directoryの公開 IP アドレス範囲を許可するネットワークポリシーを作成します。ネットワークポリシーには、許可される IP アドレスに対して100,000文字の制限があることに注意してください。

トークンおよびキー

Snowflakeは、 external_oauth_jws_keys_url プロパティ(以下に表示)の URL 値、またはネットワークポリシーが存在する場合に、ネットワークポリシーで許可されている IP アドレスを介してAzure Active Directoryを検証しようとします。Microsoftは、トークンとキーを24時間ごとに更新します。Microsoftの更新の詳細については、 Azure Active Directoryのトークンの概要 B2C をご参照ください。

許可されたロールの設定

デフォルトでは、 ACCOUNTADMIN、 ORGADMIN、および SECURITYADMIN のシステムロールは、Microsoft Power BI の使用によるSnowflakeセッションのインスタンス化がブロックされています。これらの高度な権限を持つロールを使用する必要がある場合は、 EXTERNAL_OAUTH_ALLOWED_ROLES セキュリティ統合パラメーターを更新してこれらのロールを指定します。 EXTERNAL_OAUTH_ALLOWED_ROLES セキュリティ統合パラメーターで ACCOUNTADMIN、 ORGADMIN、および SECURITYADMIN システムロールを指定する前に、注意を払ってください。

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

はじめるにあたり

このセクションでは、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 の値を作成した後に、 CREATESECURITY INTEGRATION コマンドを実行します。

SnowflakeアカウントまたはMicrosoft Power BI サービスがMicrosoft Azure Governmentクラウド リージョン にある場合は、 external_oauth_audience_list プロパティ値を https://analysis.usgovcloudapi.net/powerbi/connector/Snowflake に設定します。

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', 'https://analysis.windows.net/powerbi/connector/snowflake')
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name'
Copy

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', 'https://analysis.usgovcloudapi.net/powerbi/connector/snowflake')
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name'
Copy

重要

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

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

EXTERNAL_OAUTH_AUDIENCE_LIST プロパティに指定するリスト値は、大文字と小文字のSnowflake名が含まれる URLs です。このリストに両方の URLs を含めると、クライアントはMicrosoftが接続を形成するために必要とする値に基づいてSnowflakeに接続できます。

すべてのパラメーター値が完全に一致することを確認します。たとえば、 <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';
Copy

B2B ゲストユーザーでのPower BI SSO の使用

Azure AD 企業間(つまり B2B)ゲストユーザーが、Microsoft Power BI から SSO を使用してSnowflakeにアクセスできるようにするには、 EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM プロパティ値を 'unique_name' に設定します。例:

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', 'https://analysis.windows.net/powerbi/connector/snowflake')
  external_oauth_token_user_mapping_claim = 'unique_name'
  external_oauth_snowflake_user_mapping_attribute = 'login_name';
Copy

詳細については、 B2B ユーザーを理解する をご参照ください。

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

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

詳細については、 ALTER SECURITY INTEGRATION (外部 OAuth) をご参照ください。

セカンダリロールとPower BI SSO のSnowflakeへの使用

プライマリロールに必要なスコープは、外部トークンで渡されます。このロールは、ユーザー(session:role:<ロール名>)に付与された特定のロールです。

デフォルトでは、ユーザーのデフォルトの セカンダリロール (つまり、 DEFAULT_SECONDARY_ROLES ユーザープロパティ)はセッションでアクティブ化されません。

セッション内にあるユーザーのデフォルトのセカンダリロールをアクティブ化し、外部 OAuth の使用中に USE SECONDARY ROLES コマンドの実行を許可するには、次のステップを実行します。

  1. 接続のセキュリティ統合を構成します。セキュリティ統合の作成時(CREATE SECURITY INTEGRATION を使用)またはその後(ALTER SECURITY INTEGRATION を使用)に、EXTERNAL_OAUTH_ANY_ROLE_MODE パラメーター値を ENABLE または ENABLE_FOR_PRIVILEGE に設定します。

クライアントリダイレクトとPower BI SSO のSnowflakeへの使用

Snowflakeは、クライアントリダイレクトとPower BI SSO のSnowflakeへの使用をサポートしています。

詳細については、 クライアント接続のリダイレクト をご参照ください。

Power BI SSO での複製の使用

Snowflakeは、ソースアカウントからターゲットアカウントへの外部 OAuth セキュリティ統合の複製とフェールオーバー/フェールバックをサポートします。

詳細については、 複数のアカウントにわたるセキュリティ統合とネットワークポリシーの複製 をご参照ください。

Power BI からSnowflakeへの接続

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

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

現在、ネットワークポリシーを外部 OAuth セキュリティ統合に追加することはできません。つまり、Power BI 統合のみに適用されるネットワークポリシーを定義することはできません。ただし、Snowflakeアカウント全体に広く適用されるネットワークポリシーを実装することはできます。ネットワークポリシーに含める必要のあるMicrosoft IP の範囲については、 前提条件 セクション(このトピック内)をご参照ください。

トラブルシューティング

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

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

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

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

エラーメッセージ

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

動作

エラーメッセージ

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

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

Failed to update data source credentials: ODBC:ERROR [28000] Invalid OAuth access token. [<number>].

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

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

Failed to update data source credentials: ODBC:ERROR [28000] Incorrect username or password was specified.

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

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

Failed to update data source credentials: ODBC:ERROR [28000] User access disabled.ローカルシステム管理者に連絡してください。

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

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

Failed to update data source credentials: ODBC:ERROR [28000] OAuth access token expired. [<number>].

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

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

Failed to update data source credentials: ODBC:ERROR [28000] OAuth Authz Server Integration is not enabled.

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

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

Failed to update data source credentials: ODBC: ERROR [28000] No default role has been assigned to the user, contact a local system administrator to assign a default role and retry.

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

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

Test failed because of 250001 (08001): Failed to connect to DB: <host>.ユーザー構成済みの既定のロール「<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;
Copy

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

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

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