在 IIs 10 上设置 AppPool,keySet 不存在

setup AppPool on IIs 10, keySet does not exist

我正在 运行ning windows 2016 服务器,我们正在 运行ning 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 台服务器明显不需要时向构建代理授予管理权限那种力量实际上。我想限制他们的权力,只允许他们做他们需要做的事情。我无法相信将一切都交给管理员显然是一种常态。

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

我发现这个很棒 post InfoSecMike locking down azure devops pipelines

而且我们对这个话题的要求和看法完全一样


清楚 不需要管理员权限来更新 IIs 配置(因为那太疯狂了,对吧!?)。 IIs 配置API 不关心你有什么权限,你只需要访问某些文件。但这没有记录。微软自己,只是为了简单起见,告诉你你需要成为管理员,并在这应该是最佳实践的时候将所有细节真正深埋在文档中。令我惊讶的是,没有人质疑它。

您需要的是:

  • 完全访问 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 的这句话。

The goal was to lock down the permissions of the Azure Pipeline Agent {...}. I started Googling, pretty sure I would find a way to achieve this goal. I didn’t. It’s surprising to not find an answer about this. It seems like the principle of least privilege does not apply anymore in a devops world.

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