如何使用 AD 和服务帐户在 Web 应用程序、API、数据服务器、SQL Server 和链接服务器之间正确设置 Kerberos?

问题描述 投票:0回答:0

总结:我发现了很多关于 Kerberos 的信息,但不是针对这么复杂的东西 + 我们可能已经过度使用它而被遗忘了。我希望对 Kerberos 了如指掌的人可以使这变得简单。我缺乏认真的网络/托管经验,所以如果我尝试解释的任何内容听起来完全错误/天真,请纠正我。

This image represents what we have/are trying to do

账户

根据图片,我们使用 2 个帐户:

  1. WorkDomain/UserName,代表我们的普通 Active Directory (AD) 用户。

  2. WorkDomain/ServiceAccount,代表我们用来访问我们不希望用户直接访问的资源的帐户。

服务器

我们也有很多机器:

  1. UserMachine$ 代表普通用户 PC。

  2. WebMachine$ 使用 ApplicationPoolIdentity 在 IIS 中运行我们的 Web 应用程序,我们将称之为 AppPoolAccount。

  3. SQLMachine$ 运行我们的 SQL Server 实例,服务由我们称为 SQLServicesAccount 的帐户运行。

  4. LinkedMachine$ 是我们不拥有的服务器,它还托管一个 SQL Server 实例,在我们的 SQL 实例中用作链接服务器。我将此 SQL 实例运行帐户称为 LinkedSQLAccount,但是,同样,我们对该服务器没有所有权,而且我知道运行它的帐户无关紧要。

  5. DataMachine$ 保存公司文件,这些文件对各种 AD 组具有不同的权限级别。

  6. APIMachine$ 正在 IIS 上运行一个 Web API,其身份我称为 APIPoolAccount。

期待

我们的电话应该如何在我们的脑海中发挥作用...

  1. UserName 在 WebMachine$ 上访问我们的 Web 应用程序,IIS 根据 AD 对它们进行身份验证,以确保它们被允许访问该站点。这是通过在 IIS 中启用 WindowsAuthentication 来完成的。

  2. 如果 WebMachine$ 或 APIMachine$ 需要点击 SQLMachine$ 或 DataMachine$,他们使用 ServiceAccount,它已经拥有对所有需要的东西的权限。这是通过在我们的连接字符串中将 AppPoolAccount 和 APIPoolAccount 设置为 ServiceAccount 和“integrated security=sspi”来完成的。

  3. 如果 Web 应用程序需要访问 API,我们需要委托凭据,因为我们限制 AD 组对 API 部分的访问。这是通过 Kerberos 黑魔法完成的(见下文)。

  4. 如果 SQLMachine$ 需要使用 LinkedMachine$,它应该将 AD 凭据委托给它,不是因为我们关心,而是因为服务器所有者关心并且不希望我们连接到 ServiceAccount(不能责怪他们)。这也是使用 Kerberos 黑魔法完成的(见下文)。

Kerberos 黑魔法

除了前面步骤中列出的内容之外,这是我所知道的我们为使它正常工作所做的最低限度,因此您知道我不只是出于懒惰而问:

  1. 禁用 IIS 匿名身份验证。

  2. 启用 IIS ASP.NET 模拟。

  3. 为 WebMachine$ 标记为“仅信任此计算机以委派指定服务/仅使用 Kerberos”。

  4. 链接服务器标记为“使用登录的当前安全上下文创建”。

  5. 运行并遵循 Microsoft Kerberos Configuration Manager for SQL Server 的说明。

  6. 运行并遵循 IIS Kerberos 配置管理器的说明

  7. 注册了那么多SPN我不知道我们添加了哪些已经存在了,包括...

    1. 对于服务帐户

      1. [www/http]/WebMachine.domainSuffix

      2. MSSQLSvc/SQLMachine.domainSuffix[:instanceName/:port]

      3. http/WebApplicationSiteName.domainSuffix

    2. 对于网络机器$

      1. [wsman/termsrv/RestrictedKrbHost/HOST]/WebMachine.domainSuffix

      2. [wsman/termsrv/RestrictedKrbHost/HOST]/WebMachine

    3. 对于 SQLMachine$

      1. [MSSQLSvc/wsman/termsrv/RestrictedKrbHost/HOST]/SQLMachine.domainSuffix[:port]

      2. [wsman/termsrv/RestrictedKrbHost/HOST]/SQLMachine

具体问题

尽量做到客观,以下是我想知道的:

  1. 给定网络地图/目标,我应该拥有哪些 SPN?

  2. 是否有可能在使用 AD 访问链接机器的同时使用服务帐户访问我们的 SQL 服务器,或者是否会委托链接机器也委托给我们的主要 SQL Server 登录名?

sql-server iis kerberos self-hosting kerberos-delegation
© www.soinside.com 2019 - 2024. All rights reserved.