通过带有 MFA 的 AAD SSO 将 BI 提供给 Snowflake

Power BI to Snowflake via AAD SSO with MFA

我们正在尝试使用 Azure Active Directory (AAD) 单点登录 (SSO) 将 Power BI Desktop 连接到我们的 Snowflake 实例,但 运行 遇到了麻烦。我们目前最好的猜测是,这是因为我们在 AAD 中使用了多因素身份验证 (MFA)。

序言

  1. 我们在 link 中遵循了 Microsoft 的说明:https://docs.microsoft.com/en-us/power-bi/connect-data/desktop-connect-snowflake
  2. 并从此 link 在 Snowflake 中执行了准备工作:https://docs.snowflake.com/en/user-guide/oauth-powerbi.html
  3. 我们指定了雪花服务器contoso_dw.canada-central.azure.snowflakecomputing.com和仓库DEV_WH
  4. 我们指定了直接查询,因为不支持导入(根据 https://docs.microsoft.com/en-us/power-bi/connect-data/desktop-connect-snowflake
  5. 我们验证了用户可以直接使用 SSO
  6. 登录雪花 UI
  7. 我们使用的是 Power BI 桌面版本 2.88.1385.0 64 位(2020 年 12 月)<-- 撰写本文时的最新版本。

问题

我们验证了用户能够使用带有 MFA 的 AAD SSO 直接连接到雪花。我们验证指定的服务器和仓库在雪花 UI 和 Power BI Desktop 中是相同的。我们在 Power BI 中提示输入凭据时指定 Microsoft 帐户,它确实提示通过 Microsoft 登录,这似乎是成功的。 尽管如此,我们还是收到以下错误:

ODBC: ERROR [28000] Incorrect username or password was specified.

我们注意到此处列出了此特定错误 https://docs.snowflake.com/en/user-guide/oauth-powerbi.html#error-messages,但我们已将其视为转移注意力的问题,因为用户可以使用相同的 AAD SSO 凭据直接登录 Snowflake 网络 UI.

我们怀疑这是因为我们的 AAD 有 MFA 要求。有没有其他人经历过同样的行为?谁能验证这是否是 MFA 的副作用?

Snowflake 门户的 SSO 登录与 PowerBI 中的 SSO 不同。

您需要在 Azure 门户中配置两个 OAuth 应用程序注册,如 https://docs.snowflake.com/en/user-guide/oauth-azure.html 中所述。仔细阅读说明,您确实需要按照该文章所述创建两个应用程序注册。

当您完成“第 4 步:在 Snowflake 中创建 OAuth 授权服务器”时,使用下面的命令创建与 Snowflake 的安全集成。它来自 https://docs.snowflake.com/en/user-guide/oauth-powerbi.html 。如果您阅读了上一篇文章,则需要 信息。

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'
    external_oauth_any_role_mode = 'ENABLE';

PowerBI 用户无法更改他们的角色,因此请确保他们在 Snowflake 中的默认角色与您在第 1 步中配置的相同,以显示或配置您的 OAuth AppRole 允许这样的任何角色:

{
            "allowedMemberTypes": [
                "Application"
            ],
            "description": "PowerBI users",
            "displayName": "PowerBI Users",
            "id": "<your unique id here>",
            "isEnabled": true,
            "lang": null,
            "origin": "Application",
            "value": "session:ROLE:ANY"
        }

我的最后一条错误消息是用户没有被授予角色(他们确实这样做了),但是当我在 Snowflake 上重新向用户授予角色时它终于起作用了。

让 PowerBI + Snowflake + Azure AD SSO 一起工作很痛苦,但这是可能的。 MFA 也适用。

您可能需要将您的 AAD 用户添加到您在 Azure 门户企业应用中的步骤 2 中创建的应用。不过我还没有测试过,我自己的帐户可以使用,因为我是我刚刚创建的应用程序的所有者。