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セッションをインスタンス化する認証フローをまとめたものです。
ユーザーは、Microsoft Azure Active Directory(Azure AD)を使用してPower BI サービスにログインします。
オプションとして、Azure AD は SAML 経由で IdP を通じてユーザーを確認できます。現在、MicrosoftはPower BI SSO の IdP としてAzure AD のみをサポートしています。
ユーザーがSnowflakeに接続すると、Power BI サービスはAzure AD にSnowflakeのトークンを要求します。
Power BI サービスは埋め込みSnowflakeドライバーを使用して、Azure AD トークンを接続文字列の一部としてSnowflakeに送信します。
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_name
、name
、またはSnowflake内におけるユーザーのemail
属性の入力では、Azureの ADupn
属性にマップする必要があります。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'
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'
重要
この 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_name
を email_address
に置き換えます。例:
create security integration powerbi
type = external_oauth
...
external_oauth_snowflake_user_mapping_attribute = 'email_address';
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';
詳細については、 B2B ユーザーを理解する をご参照ください。
外部 OAuth セキュリティ統合の変更¶
セキュリティ統合で ALTER ステートメントを実行することにより、外部 OAuth セキュリティ統合を更新できます。
詳細については、 ALTER SECURITY INTEGRATION (外部 OAuth) をご参照ください。
セカンダリロールとPower BI SSO のSnowflakeへの使用¶
プライマリロールに必要なスコープは、外部トークンで渡されます。このロールは、ユーザー(session:role:<ロール名>
)に付与された特定のロールです。
デフォルトでは、ユーザーのデフォルトの セカンダリロール (つまり、 DEFAULT_SECONDARY_ROLES ユーザープロパティ)はセッションでアクティブ化されません。
セッション内にあるユーザーのデフォルトのセカンダリロールをアクティブ化し、外部 OAuth の使用中に USE SECONDARY ROLES コマンドの実行を許可するには、次のステップを実行します。
接続のセキュリティ統合を構成します。セキュリティ統合の作成時(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、またはその両方でのトラブルシューティングが必要になる場合があります。
エラーメッセージ¶
次のテーブルは、ユーザーがPower BI で認証しているときにSnowflakeが返すエラーメッセージを示しています。
動作 |
エラーメッセージ |
トラブルシューティングアクション |
---|---|---|
無効なアクセストークンまたはオーディエンス値。 |
Failed to update data source credentials: ODBC:ERROR [28000] Invalid OAuth access token. [<number>]. |
|
Snowflakeアカウントに AAD ユーザーが見つかりません。 |
Failed to update data source credentials: ODBC:ERROR [28000] Incorrect username or password was specified. |
ユーザーがSnowflakeに存在することを確認します( |
Snowflakeユーザーは存在しますが、無効になっています。 |
Failed to update data source credentials: ODBC:ERROR [28000] User access disabled.ローカルシステム管理者に連絡してください。 |
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. |
|
既定のロールがユーザーに設定されていません。 |
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;
結果ごとに、 USER_NAME
列と FIRST_AUTHENTICATION_FACTOR
列を評価します。
USER_NAME
値は、 前提条件 セクションで説明されている属性マッピングと一致する必要があります。
FIRST_AUTHENTICATION_FACTOR
はOAUTH_ACCESS_TOKEN
に設定する必要があります。