【问题标题】:setup AppPool on IIs 10, keySet does not exist在 IIs 10 上设置 AppPool,keySet 不存在
【发布时间】:2021-01-18 05:49:48
【问题描述】:

我正在运行 Windows 2016 服务器,我们在其上运行 IIs 10,我需要能够在部署网站之前断言是否有 AppPool 设置。如果它不存在,我需要使用特定用户和密码设置 AppPool。

所有这些都是通过 Azure Devops 使用发布代理完成的。

代理以非管理员身份运行,并且所有涉及的帐户都以非管理员身份运行。我根本无意运行任何管理员帐户,出于安全原因,我想为所有相关帐户提供最少的特权。

当我尝试使用 appcmd.exe 设置 AppPool 时,我收到错误消息:

KeySet does not exist.

当以管理员身份运行所有内容时,它可以工作(我绝对无意以管理员身份运行任何内容)。

我尝试过的: 我已将非管理员帐户添加到IIS_IUSRS 组。

确保用户对文件具有读取权限:76944fb33636aeddb9590521c2e8815a_GUID 位于 %ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeys 文件夹中。

我在这里尝试了所有方法:Error when you change the identity of an application pool by using IIS Manager from a remote computer

有谁知道这个问题的原因?

更新:

Microsoft clearly recommends 代理应该使用服务帐户运行,我正在这样做,并且我没有兴趣为构建代理授予 1000 台服务器的管理权限,而他们显然实际上并不需要这种权力。我想限制他们的权力,只允许他们做他们需要做的事情。我不敢相信将一切都交给管理员显然是常态。

【问题讨论】:

  • 这里的经验法则是所有 IIS 配置 API 都假定您使用管理员帐户。你无法对抗你无法控制的事情。
  • 从安全角度来看太可怕了。我完全没有兴趣赋予构建代理管理权。甚至微软自己也建议不要运行具有管理员权限的部署代理。那么微软怎么能明确推荐一个当时不可能坚持的行为呢?如果微软建议不要使用我完全同意的管理帐户,应该如何自动化整个过程。

标签: windows powershell iis iis-10 appcmd


【解决方案1】:

经过大量谷歌搜索,我的意思是很多。我设法解决了这个问题。让我说,“最小特权帐户”在 Microsoft 和 Windows 世界中并不常见,这让我感到困惑。

我发现 InfoSecMike locking down azure devops pipelines 的这篇出色的帖子。

我们在这个话题上有着完全相同的要求和观点。


显然不需要管理员权限来更新 IIs 配置(因为那太疯狂了,对吧!?)。 IIs 配置 API 不关心你有什么权限,你需要的是访问某些文件。但这没有记录。为简单起见,Microsoft 自己告诉您,您需要成为管理员,并在最好的做法时将所有详细信息埋入文档中。另外让我吃惊的是没有人质疑它。

你需要的是:

  • 对 C:\Windows\System32\inetsrv\Config 的完全访问权限
  • 完全访问 C:\inetpub
  • 对 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\ 中三个密钥的读取权限
6de9cb26d2b98c01ec4e9e8b34824aa2_GUID (iisConfigurationKey)
d6d986f09a1ee04e24c949879fdb506c_GUID (NetFrameworkConfigurationKey)
76944fb33636aeddb9590521c2e8815a_GUID (iisWasKey)

如果您确保您的服务帐户是IIS_IUSRS 组的成员,则可以获得前 2 个要点。

此组不会让您访问密钥。您需要手动将这 3 个密钥的读取权限授予代理用户。

如果您不授予对这些密钥的访问权限,您将收到晦涩的错误消息

Keyset does not exist ( exception from HRESULT : 0x8009000D)

如果您问我这是一个不正确的错误,因为它应该是 IllegalAccessException 并有正当理由告诉您您无权读取密钥,因为密钥在那里,它们确实存在(微软代码很好,也许你应该开源这个,以便我们修复)。


我将带着来自 infosecmike 的这句话离开。

目标是锁定 Azure Pipeline Agent {...} 的权限。我开始用谷歌搜索,很确定我会找到实现这个目标的方法。我没有。没有找到关于这个的答案是令人惊讶的。似乎最小特权原则不再适用于 devops 世界。

这就是为什么我更喜欢 Linux 而不是 Windows。这是一个简单的任务。

【讨论】:

    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2013-01-30
    • 2021-10-18
    • 2021-02-23
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多