web-dev-qa-db-ja.com

Docker Container ASP.NETアプリへのWindows認証の統合

Microsoft/aspnetリポジトリからコンテナを作成しました。 ASP.NET 4.x WebアプリをIISここで、サイトにアクセスしているログインユーザーを取得できる)にコンテナ化したいしたいこれは内部アプリケーションであるため、統合Windows認証を活用できます。

コンテナーホストへの透過的なネットワークを作成しました。

さらに、コンテナ内のIIS=でWindows認証をセットアップしました。コンテナホストでのグループ管理サービスアカウントの作成について読みましたが、これはまだ行っていません。これで十分か、それとも私はさらに手順を踏む必要があるかを確認します。

11
Charles Owen

グループ管理サービスアカウント(gMSA)の作成は、Windows認証をコンテナーで機能させるために実行する必要がある手順の1つにすぎません。また、作成した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)次に、各コンテナのホストで:

a。 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アカウントをアプリプールに直接割り当てないでください。ビルトインアカウントの1つを使用して、エンジンがコンテナー内のアカウントを交換できるようにします。つまり、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'}
10