Windows容器内的活动目录帐户(服务器2016 TP5)

时间:2016-07-30 18:09:22

标签: docker windows-server-2016

所以我有Windows Server 2016 TP5,我正在玩容器。我能够做好基本的泊坞任务。我正在试图弄清楚如何容纳我们的一些IIS托管的Web应用程序。

事实上,我们通常对数据库使用集成身份验证,并为应用程序池使用域服务帐户。我目前没有测试VM(在域中),所以我无法测试它是否适用于容器内部。

如果主机加入AD域,其容器是否也是域的一部分?我还可以使用域帐户运行流程吗?

编辑: 另外,如果我在dockerfile中指定“USER”,这是否意味着我的应用程序池将使用它运行(而不是应用程序池标识)?

3 个答案:

答案 0 :(得分:6)

更新:此答案不再相关 - 适用于2016 TP5。在以后的版本中添加了AD支持

原始回答 快速回答 - 不,不支持容器作为AD的一部分,因此您无法使用AD帐户在容器中运行进程或使用它进行身份验证

以前在MS Containers网站上提到过,但original link现在重定向。

原始措辞(CTP 3或4?): "容器无法加入Active Directory域,也无法以域用户,服务帐户或计算机帐户的形式运行服务或应用程序。"

我不知道这是否会在以后的版本中发生变化。

有人试图hack around it但没有快乐。

答案 1 :(得分:6)

至少有一些场景中Docker容器中的AD集成实际上有效:

  1. 您需要使用AD凭据访问网络资源。
    1. 在需要此访问权限的本地身份下运行cmdkey / add:<network-resource-uri>[:port] / user:<ad-user> / pass:<pass>
    2. 要在不修改AppPoolIdentity的情况下将相同的技巧应用于IIS应用程序,您需要一个围绕cmdkey的最简单的.ashx包装器(注意:您必须在运行时调用此包装器,例如:在ENTRYPOINT期间,否则网络凭据将被映射到不同的本地身份)
  2. 您需要在AD用户下运行代码
    1. 使用带有 LOGON32_LOGON_NEW_CREDENTIALS LOGON32_PROVIDER_DEFAULT 的ADVAPI32函数 LogonUser 模拟suggested
  3. 您需要传输层网络安全性,例如在对基于AD的资源进行RPC调用(例如:MSDTC)时。
    1. 使用最适合您的guide设置gMSA。但请注意,gMSA 要求 Docker主机位于域中。

答案 2 :(得分:2)

您无法将容器加入域,但如果您的应用需要进行身份验证,则可以使用托管服务帐户。为您节省处理包装密码的麻烦。

https://msdn.microsoft.com/en-us/virtualization/windowscontainers/management/manage_serviceaccounts