配置 Kerberos 以使用 Power BI 报表

了解如何将报表服务器配置为对在分布式环境的 Power BI 报表中使用的数据源进行 Kerberos 身份验证。

Power BI 报表服务器提供 Power BI 报表托管功能。 报表服务器可支持许多数据源。 尽管本文着重介绍 SQL Server Analysis Services,但你可以使用这些概念并将其应用于 SQL Server 等其他数据源。

可以在一台计算机上安装 Power BI 报表服务器、SQL Server 和 Analysis Services,所有内容都应正常运行,而无需其他配置。 这非常适合测试环境。 如果在称为分布式环境的单独计算机上安装了这些服务,则可能会遇到错误。 在此环境中,需要使用 Kerberos 身份验证。 实施此项目需要进行配置。

具体而言,需要配置约束委派。 你可能已在环境中配置 Kerberos,但可能未针对约束委派进行配置。

生成报表时出错

如果报表服务器未正确配置,可能会收到以下错误。

Something went wrong.

We couldn't run the report because we couldn't connect to its data source. The report or data source might not be configured correctly.

在技术详细信息中,会看到以下消息。

We couldn't connect to the Analysis Services server. The server forcibly closed the connection. To connect as the user viewing the report, your organization must have configured Kerberos constrained delegation.

Power B I 报表的屏幕截图,其中显示了与与 Analysis Services 服务器连接问题相关的错误消息。

配置 Kerberos 约束委派

必须先配置多个项,然后 Kerberos 约束委派才能生效。 这包括服务帐户上的服务主体名称 (SPN) 和委派设置。

注意

必须是域管理员,才能配置 SPN 和委派设置。

我们需要配置或验证以下内容:

  1. 报表服务器配置中的身份验证类型。
  2. 报表服务器服务帐户的 SPN。
  3. Analysis Services 服务的 SPN。
  4. Analysis Services 计算机上 SQL Browser 服务的 SPN。 这仅适用于命名实例。
  5. 报表服务器服务帐户上的委派设置。

报表服务器配置中的身份验证类型

我们需要将报表服务器的身份验证类型配置为允许 Kerberos 约束委派。 此操作在 rsreportserver.config 文件中完成。 此文件的默认位置是 C:\Program Files\Microsoft Power BI Report Server\PBIRS\ReportServer

rsreportserver.config 文件中,您需要查找 Authentication/AuthenticationTypes 部分。

我们需要确保 RSWindowsNegotiate 被列为身份验证类型列表中的第一个类型。 它应类似于下面这样。

<AuthenticationTypes>
    <RSWindowsNegotiate/>
    <RSWindowsNTLM/>
</AuthenticationTypes>

如果必须更改配置文件,需要停止并启动报表服务器,以确保更改生效。

有关详细信息,请参阅在报表服务器上配置 Windows 身份验证

报表服务器服务帐户的 SPN

接下来,我们需要确保报表服务器包含有效的 SPN。 具体操作视所配置的报表服务器服务帐户而定。

虚拟服务帐户或网络服务帐户

如果为虚拟服务帐户或网络服务帐户配置了报表服务器,则无需执行任何作。 这是在计算机帐户的上下文中。 默认情况下,计算机帐户具有主机 SPN。 这些内容涵盖 HTTP 服务,将由报表服务器使用。

如果使用虚拟服务器名称,则 HOST 条目不会涵盖你,并且需要手动添加虚拟服务器主机名的 SPN。

域用户帐户

如果报表服务器配置为使用域用户帐户,则必须在该帐户上手动创建 HTTP SPN。 为此,可以使用 Windows 随附的 setspn 工具完成。

注意

需要域管理员权限才能创建 SPN。

建议创建两个 SPN。 一个采用 NetBIOS 名称,另一个采用完全限定的域名 (FQDN)。 SPN 采用以下格式。

<Service>/<Host>:<port>

Power BI 报表服务器使用 HTTP 服务。 对于 HTTP SPN,不会列出端口。 我们感兴趣的服务是 HTTP。 SPN 的主机将是你在 URL 中使用的名称。 这通常是计算机名称。 如果位于负载均衡器后面,则可能是虚拟名称。

注意

可以通过查看在浏览器地址栏中输入的内容来验证 URL,也可以查看 Web 门户 URL 选项卡上的“报表服务器配置管理器”。

如果计算机名为 ContosoRS,SPN 将如下所示。

SPN 类型 SPN
完全限定的域名 (FQDN) HTTP/ContosoRS.contoso.com
NetBIOS HTTP/ContosoRS

SPN 位置

那么,要将 SPN 置于何处呢? SPN 放置在你所使用的任何工具或平台,作为服务帐户。 如果使用虚拟服务帐户或网络服务,则这是计算机帐户。 尽管我们之前提到过,但还是要提一下,只需为虚拟 URL 执行此操作。 如果对报表服务器服务帐户使用域用户,则将 SPN 置于该域用户帐户上。

例如,如果使用网络服务帐户,并且计算机名称为 ContosoRS,则会在 ContosoRS 上放置 SPN。

如果使用 RSService 的域用户帐户,我们会将 SPN 放在 RSService 上。

使用 SetSPN 添加 SPN

我们可以使用 SetSPN 工具来添加 SPN。 我们遵循与上述示例相同的示例,其中包含计算机帐户和域用户帐户。

如果使用 contosoreports 的虚拟 URL,那么将 SPN(包括 FQDN 和 NetBIOS SPN)置于计算机帐户上的命令如下所示。

Setspn -a HTTP/contosoreports.contoso.com ContosoRS
Setspn -a HTTP/contosoreports ContosoRS

如果对 SPN 主机使用计算机名称,那么将 SPN(包括 FQDN 和 NetBIOS SPN)置于域用户帐户上的命令如下所示。

Setspn -S HTTP/ContosoRS.contoso.com RSService
Setspn -S HTTP/ContosoRS RSService

Analysis Services 服务的 SPN

配置 Analysis Services 服务的 SPN 类似于配置 Power BI 报表服务器的 SPN。 如果有命名实例,那么 SPN 的格式就会略有不同。

对于 Analysis Services,我们使用 MSOLAPSvc.3 服务。 为 SPN 上的端口位置指定实例名称。 SPN 的主机部分为计算机名称或群集虚拟名称。

Analysis Services SPN 示例如下所示。

类型 格式
默认实例 MSOLAPSvc.3/ContosoAS.contoso.com
MSOLAPSvc.3/ContosoAS
命名实例 MSOLAPSvc.3/ContosoAS.contoso.com:INSTANCENAME
MSOLAPSvc.3/ContosoAS:INSTANCENAME

SPN 的放置也类似于 Power BI 报表服务器 SPN 的放置。 它基于服务帐户。 如果使用本地系统或网络服务,则位于计算机帐户的上下文中。 如果使用域用户帐户来运行 Analysis Services 实例,请将 SPN 注册到域用户帐户。

使用 SetSPN 添加 SPN

我们可以使用 SetSPN 工具来添加 SPN。 对于此示例,计算机名称为 ContosoAS。

将 SPN(包括 FQDN 和 NetBIOS SPN)置于计算机帐户上的命令如下所示。

Setspn -S MSOLAPSvc.3/ContosoAS.contoso.com ContosoAS
Setspn -S MSOLAPSvc.3/ContosoAS ContosoAS

将 SPN(包括 FQDN 和 NetBIOS SPN)置于域用户帐户上的命令如下所示。

Setspn -S MSOLAPSvc.3/ContosoAS.contoso.com OLAPService
Setspn -S MSOLAPSvc.3/ContosoAS OLAPService

SQL Browser 服务的 SPN

如果有 Analysis Services 命名实例,还需要确保有浏览器服务的 SPN。 这是 Analysis Services 的专属要求。

配置 SQL Browser 的 SPN 类似于配置 Power BI 报表服务器的 SPN。

对于 SQL Browser,我们使用 MSOLAPDisco.3 服务。 为 SPN 上的端口位置指定实例名称。 SPN 的主机部分为计算机名称或群集虚拟名称。 无需为实例名称或端口指定任何内容。

Analysis Services SPN 示例如下所示。

MSOLAPDisco.3/ContosoAS.contoso.com
MSOLAPDisco.3/ContosoAS

SPN 的放置也类似于 Power BI 报表服务器 SPN 的放置。 此处的区别在于 SQL 浏览器始终在本地系统帐户下运行。 也就是说,SPN 始终都会在计算机帐户上运行。

使用 SetSPN 添加 SPN

我们可以使用 SetSPN 工具来添加 SPN。 对于此示例,计算机名称为 ContosoAS。

将 SPN(包括 FQDN 和 NetBIOS SPN)置于计算机帐户上的命令如下所示。

Setspn -S MSOLAPDisco.3/ContosoAS.contoso.com ContosoAS
Setspn -S MSOLAPDisco.3/ContosoAS ContosoAS

有关详细信息,请参阅必须有 SQL Server Browser 服务的 SPN

报表服务器服务帐户上的委派设置

我们需要配置的最后一个部分是报表服务器服务帐户上的委派设置。 可以使用不同的工具来执行这些步骤。 出于本文档的目的,我们坚持使用 Active Directory 用户和计算机。

首先需要转到 Active Directory 用户和计算机中报表服务器服务帐户的属性。 如果使用了虚拟服务帐户或网络服务,则这将是计算机帐户,或者是域用户帐户。

我们需要通过协议传输来配置约束委派。 使用约束委派时,需要明确要委派哪些服务。 我们将 Analysis Services 服务 SPN 和 SQL 浏览器 SPN 添加到 Power BI 报表服务器可以委托到的列表。

  1. 右键单击报表服务器服务帐户,然后选择“ 属性”。

  2. 选择“委派”选项卡。

  3. 选中“仅信任此计算机来委派指定的服务”。

  4. 选中“使用任意身份验证协议”。

  5. 在“可以由此帐户提供委派凭据的服务:”下,选择“添加”。

  6. 在新对话框中,选择“用户或计算机”。

  7. 输入 Analysis Services 服务的服务帐户,然后选择“确定”。

  8. 选择已创建的 SPN。 它开始以 MSOLAPSvc.3。 如果同时添加了 FQDN 和 NetBIOS SPN,则选择这两者。 可能只看到一个。

  9. 选择“确定”。 现在,列表中应该会显示 SPN。

  10. 也可以选中“已扩展”,在列表中同时显示 FQDN 和 NetBIOS SPN。

  11. 再次选择“添加”。 我们现在添加 SQL 浏览器的 SPN。

  12. 在新对话框中,选择“用户或计算机”。

  13. 输入 SQL Browser 服务所在计算机的名称,然后选择“确定”。

  14. 选择已创建的 SPN。 它以 MSOLAPDisco.3开始。 如果 FQDN 和 NetBIOS SPN 都添加了,两个都会被选中。 你可能只会看到一个。

  15. 选择“确定”。 如果选中“已扩展”,对话框应如下所示。

    Power B I 报表的屏幕截图,其中显示了“属性”窗口的“委派”选项卡。

  16. 选择“确定”。

  17. 重启 Power BI 报表服务器。

运行 Power BI 报表

指定完上述所有配置后,应该就可以正确显示报表了。

Power B I 报表的屏幕截图,其中显示了示例仪表板视图。

虽然此配置在大多数情况下都适用于 Kerberos,但也可以指定不同的配置,具体视环境而定。 如果报表仍不会加载,则需要联系域管理员以进一步调查或联系支持人员。