web-dev-qa-db-ja.com

Windowsコンテナー内のActiveDirectoryアカウント(サーバー2016 TP5)

だから私はWindowsServer 2016 TP5を持っていて、コンテナで遊んでいます。基本的なDockerタスクを正常に実行できます。 IISでホストされているWebアプリケーションのいくつかをコンテナ化する方法を理解しようとしています。

つまり、通常、DBには統合認証を使用し、アプリプールにはドメインサービスアカウントを使用します。現在、テストVM(ドメイン内)がないため、これがコンテナー内で機能するかどうかをテストできません。

ホストがADドメインに参加している場合、そのコンテナーもドメインの一部ですか?ドメインアカウントを使用してプロセスを実行できますか?

編集:また、dockerfileで「USER」を指定した場合、これは、アプリプールが(アプリプールIDの代わりに)それを使用して実行されることを意味しますか?

9
Mel

更新:この回答はもう関係ありません-2016TP5用でした。 ADサポートは今後のリリースで追加されました

元の回答クイック回答-いいえ、コンテナはADの一部としてサポートされていないため、ADアカウントを使用してコンテナ内でプロセスを実行したり、で認証したりすることはできませんそれ

これは以前はMSContainersサイトで言及されていましたが、 元のリンク がリダイレクトされるようになりました。

元の文言(CTP 3または4?):「コンテナーはActive Directoryドメインに参加できず、ドメインユーザー、サービスアカウント、またはマシンアカウントとしてサービスまたはアプリケーションを実行できません。」

それが後のリリースで変更されるかどうかはわかりません。

誰かが それをハックする を試みましたが、喜びはありませんでした。

6
Will

DockerコンテナへのAD統合が実際に機能するシナリオが少なくともいくつかあります。

  1. AD資格情報を使用してネットワークリソースにアクセスする必要があります。
    1. このアクセスが必要なローカルIDでcmdkey/add:<network-resource-uri>[:port]/user:<ad-user>/pass:<pass>を実行します
    2. AppPoolIdentityを変更せずにIISアプリに同じトリックを適用するには、cmdkeyの周りに最も単純な.ashxラッパーが必要です(注:実行時にこのラッパーを呼び出す必要があります。例: ENTRYPOINT、それ以外の場合、ネットワーク資格情報は異なるローカルIDにマップされます)
  2. ADユーザーでコードを実行する必要があります
    1. ADVAPI32関数LogonUserLOGON32_LOGON_NEW_CREDENTIALSおよびLOGON32_PROVIDER_DEFAULTで使用して偽装する)as 推奨
  3. ADベースのリソースにRPC呼び出し(例:MSDTC)を行う場合のように、トランスポート層のネットワークセキュリティが必要です。
    1. 最適な ガイド を使用してgMSAを設定します。ただし、gMSAではDockerホストがドメイン内にある必要があることに注意してください。
7
Taras Strypko

コンテナをドメインに参加させることはできませんが、アプリを認証する必要がある場合は、マネージドサービスアカウントを使用できます。パッケージ化パスワードを処理する手間を省きます。

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

2
QuickNull