我已经从microsoft/aspnet资源库创建了一个容器。 我想在IIS中将ASP.NET 4.x Web应用容器化,在其中我可以获取访问该站点的登录用户。 我希望能够利用集成的Windows身份验证,因为这是一个内部应用程序。
我已经为容器主机创建了透明网络。
此外,我还在容器内的IIS上设置了Windows身份验证。我已经读过有关在容器主机上创建组托管服务帐户的信息,但是我还没有做到这一点,并且不确定是否足够,否则我将不得不采取进一步的措施。
最佳答案
创建组托管服务帐户(gMSA)仅是为了使Windows身份验证可与容器一起使用而需要执行的步骤之一。您还需要一个凭据规范,其中包含有关您创建的gMSA的信息,并且容器将使用该凭据将gMSA帐户交换为应用程序的应用程序池所使用的内置帐户(LocalSystem,NetworkService,ApplicationPoolIdentity)。
实际上,最少的一组步骤是:
1)创建一个AD组,可用于添加将用于承载容器的计算机。
PS> New-ADGroup "Container Hosts" -GroupScope Global
PS> $group = Get-ADGroup "Container Hosts"
PS> $host = Get-ADComputer "mydockerhostmachine"
PS> Add-ADGroupMember $group -Members $host
2)创建要用于您的应用程序的gMSA帐户:
PS> New-ADServiceAccount -name myapp -DNSHostName myapp.mydomain.local -ServicePrincipalNames http/myapp.mydomain.local -PrincipalsAllowedToRetrieveManagedPassword "Container Hosts"
PrincipalsAllowedToRetrieveManagePassword
的值应该是您在步骤1中创建的AD组的名称。3)然后,在每个容器主机上:
一种。安装Powershell Active Directory模块并进行测试,以查看是否可以从主机使用gMSA:
PS> Add-WindowsFeature RSAT-AD-PowerShell
PS> Import-Module ActiveDirectory
PS> Install-AdServiceAccount myapp
PS> Test-AdServiceAccount myapp
b。安装凭证规范Powershell模块并创建凭证规范:
PS> Invoke-WebRequest https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/live/windows-server-container-tools/ServiceAccounts/CredentialSpec.psm1 -OutFile CredentialSpec.psm1
PS> Import-Module .\CredentialSpec.psm1
PS> New-CredentialSpec -Name myapp -AccountName myapp
C。现在,如果一切配置正确,则可以使用以下凭据规范运行容器:
docker run --security-opt "credentialspec=file://myapp.json" -d -p
80:80 -h myapp.mydomain.local [my-image-name:tag]
上面要记住的一件事-确保创建gMSA时使用的服务主体名称与容器的主机名(-h参数)匹配。否则,如果您的应用程序使用Windows身份验证来访问其他域资源或服务(例如SQL Server),则会遇到问题。另外,如果您要访问其他资源(例如SQL Server),请确保还为gMSA帐户提供适当的权限给那些服务。
最后,在创建Dockerfile时,请勿尝试将gMSA帐户直接分配给您的应用程序池。使用内置帐户之一,然后让引擎为您换出容器中的帐户。换句话说,在Dockerfile中创建的应用程序池应该看起来像这样:
RUN Import-Module WebAdministration; `
New-Item -Path IIS:\AppPools\MyAppPool; `
Set-ItemProperty -Path IIS:\AppPools\MyAppPool -Name managedRuntimeVersion -Value 'v4.0'; `
Set-ItemProperty -Path IIS:\AppPools\MyAppPool -Name processModel -value @{identitytype='ApplicationPoolIdentity'}
关于asp.net - 在Docker Container ASP.NET App中集成Windows身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47337969/