Řešení potíží s gMSA pro kontejnery Windows
Platí pro: Windows Server 2025, Windows Server 2022, Windows Server 2019
Známé problémy
Název hostitele kontejneru se musí shodovat s názvem gMSA pro Windows Server 2016 a Windows 10 verze 1709 a 1803.
Pokud používáte Windows Server 2016 verze 1709 nebo 1803, název hostitele kontejneru musí odpovídat názvu účtu SAM gMSA.
Pokud se název hostitele neshoduje s názvem gMSA, příchozí požadavky na ověření NTLM a překlad názvů a identifikátorů SID (používané mnoha knihovnami, jako je ASP.NET zprostředkovatel role členství), selžou. Protokol Kerberos bude dál normálně fungovat, i když se název hostitele a název gMSA neshodují.
Toto omezení bylo opraveno ve Windows Serveru 2019, kdy kontejner bude v síti vždy používat název gMSA bez ohledu na přiřazený název hostitele.
Použití gMSA s více než jedním kontejnerem současně vede k občasným selháním ve Windows Serveru 2016 a Windows 10 verze 1709 a 1803.
Vzhledem k tomu, že všechny kontejnery musí používat stejný název hostitele, druhý problém se týká verzí Windows před Windows Serverem 2019 a Windows 10 verze 1809. Pokud je stejné identitě a názvu hostitele přiřazeno více kontejnerů, může dojít k podmínce závodu, když dva kontejnery komunikují se stejným řadičem domény současně. Když jiný kontejner komunikuje se stejným řadičem domény, zruší komunikaci se všemi předchozími kontejnery pomocí stejné identity. To může vést k přerušovaným selháním ověřování a může být někdy pozorováno jako selhání důvěryhodnosti, když spustíte nltest /sc_verify:contoso.com
uvnitř kontejneru.
Změnili jsme chování ve Windows Serveru 2019 tak, aby oddělil identitu kontejneru od názvu počítače, což umožňuje více kontejnerům používat stejné gMSA současně. Proto ve Windows Serveru 2019 můžete spouštět více kontejnerů se stejnou identitou, ať už na stejných hostitelích nebo na více hostitelích.
Na verzích Windows 10 1703, 1709 a 1803 nemůžete používat gMSAs s izolovanými kontejnery Hyper-V.
Inicializace kontejneru se zasekne nebo selže, pokud se pokusíte použít gMSA s Hyper-V izolovaným kontejnerem ve Windows 10 a Windows Serveru verzí 1703, 1709 a 1803.
Tato chyba byla opravena ve Windows Serveru 2019 a Windows 10 verze 1809. Můžete také spouštět izolované kontejnery Hyper-V s gMSA na Windows Server 2016 a Windows 10, verze 1607.
Obecné pokyny k řešení potíží
Pokud při spouštění kontejneru s gMSA dochází k chybám, můžou vám s identifikací původní příčiny pomoct následující pokyny.
Ujistěte se, že hostitelé připojení k doméně mohou použít gMSA.
Ověřte, že je hostitel připojený k doméně a může se připojit k řadiči domény.
Nainstalujte nástroje AD PowerShell z RSAT a spusťte Test-ADServiceAccount, abychom zjistili, zda má počítač přístup k načtení gMSA. Pokud rutina vrátí false, počítač nemá přístup k heslu gMSA.
# To install the AD module on Windows Server, run Install-WindowsFeature RSAT-AD-PowerShell # To install the AD module on Windows 10 version 1809 or later, run Add-WindowsCapability -Online -Name 'Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0' # To install the AD module on older versions of Windows 10, see https://aka.ms/rsat Test-ADServiceAccount WebApp01
Pokud Test-ADServiceAccount vrátí false, ověřte, že hostitel patří do skupiny zabezpečení, která má přístup k heslu gMSA.
# Get the current computer's group membership Get-ADComputer $env:computername | Get-ADPrincipalGroupMembership | Select-Object DistinguishedName # Get the groups allowed to retrieve the gMSA password # Change "WebApp01" for your own gMSA name (Get-ADServiceAccount WebApp01 -Properties PrincipalsAllowedToRetrieveManagedPassword).PrincipalsAllowedToRetrieveManagedPassword
Pokud váš hostitel patří do skupiny zabezpečení autorizované k načtení hesla gMSA, ale stále selhává Test-ADServiceAccount, možná budete muset restartovat počítač, abyste získali nový token odrážející jeho aktuální členství ve skupinách.
Hostitelé, kteří nejsou připojení k doméně: Zkontrolujte, že je hostitel nakonfigurovaný tak, aby načetl účet gMSA.
Ověřte, že je na hostiteli správně nainstalovaný modul plug-in pro použití gMSA s hostitelem kontejneru, který není připojený k doméně. Systém Windows neobsahuje integrovaný modul plug-in a vyžaduje, abyste zadali modul plug-in, který implementuje rozhraní ICcgDomainAuthCredentials. Podrobnosti o instalaci budou specifické pro modul plug-in.
Zkontrolujte soubor přihlašovacích údajů
Spuštěním Get-CredentialSpec z modulu PowerShellu CredentialSpec vyhledejte všechny specifikace přihlašovacích údajů na počítači. Specifikace přihlašovacích údajů musí být uloženy v adresáři CredentialSpecs v kořenovém adresáři Dockeru. Kořenový adresář Dockeru najdete spuštěním příkazu docker info -f "{{.DockerRootDir}}".
Otevřete soubor CredentialSpec a ujistěte se, že jsou správně vyplněná následující pole:
pro hostitele kontejnerů připojených k doméně:
- sid: IDENTIFIKÁTOR SID vaší domény
- MachineAccountName: název účtu SAM gMSA (nezahrnujte úplný název domény ani znak dolaru)
- DnsTreeName: plně kvalifikovaný název domény doménové struktury služby Active Directory
- DnsName: plně kvalifikovaný název domény, ke kterému gMSA náleží
- NetBiosName: název NETBIOS pro doménu, do které patří gMSA
- GroupManagedServiceAccounts/Name: název účtu SAM gMSA (nezahrnujte úplný název domény ani znak dolaru).
- GroupManagedServiceAccounts/Scope: jedna položka pro plně kvalifikovaný název domény a jedna položka pro rozhraní NETBIOS
Váš vstup by měl vypadat jako v následujícím příkladu kompletní specifikace přihlašovacích údajů:
{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-702590844-1001920913-2680819671", "MachineAccountName": "webapp01", "Guid": "56d9b66c-d746-4f87-bd26-26760cfdca2e", "DnsTreeName": "contoso.com", "DnsName": "contoso.com", "NetBiosName": "CONTOSO" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "webapp01", "Scope": "contoso.com" }, { "Name": "webapp01", "Scope": "CONTOSO" } ] } }
Pro hostitele, kteří nejsou připojení k doméně: Kromě všech polí hostitelů kontejnerů, která nejsou připojená k doméně, ujistěte se, že je oddíl HostAccountConfig přítomen a že níže uvedená pole jsou definována správně.
- PortableCcgVersion: Mělo by být nastaveno na hodnotu 1.
- PluginGUID: COM CLSID pro váš modul plug-in ccg.exe. To je jedinečné pro použitý plugin.
- PluginInput: Vstup specifický pro modul plug-in pro načtení informací o uživatelském účtu z úložiště tajných kódů.
Váš vstup by měl vypadat jako v následujícím příkladu kompletní specifikace přihlašovacích údajů:
{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-702590844-1001920913-2680819671", "MachineAccountName": "webapp01", "Guid": "56d9b66c-d746-4f87-bd26-26760cfdca2e", "DnsTreeName": "contoso.com", "DnsName": "contoso.com", "NetBiosName": "CONTOSO" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "webapp01", "Scope": "contoso.com" }, { "Name": "webapp01", "Scope": "CONTOSO" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{GDMA0342-266A-4D1P-831J-20990E82944F}", "PluginInput": "contoso.com:gmsaccg:<password>" } } }
Ověřte, zda je cesta k souboru s přihlašovacími údaji správná pro vaše řešení orchestrace. Pokud používáte Docker, ujistěte se, že příkaz pro spuštění kontejneru obsahuje
--security-opt="credentialspec=file://NAME.json"
, kdeNAME.jsonje nahrazen výstupem názvu Get-CredentialSpec. Název je plochý název souboru vzhledem ke složce CredentialSpecs v kořenovém adresáři Dockeru.
Kontrola konfigurace sítě
Kontrola konfigurace brány firewall
Pokud v kontejneru nebo hostitelské síti používáte přísné zásady brány firewall, může blokovat nezbytná připojení k řadiči domény služby Active Directory nebo serveru DNS.
Protokol a port | Účel |
---|---|
TCP a UDP 53 | DNS |
TCP a UDP 88 | Kerberos |
TCP 139 | NetLogon |
TCP a UDP 389 | LDAP |
TCP 636 | LDAP SSL |
Možná budete muset povolit přístup k dalším portům v závislosti na typu provozu, který kontejner odesílá do řadiče domény. Úplný seznam portů používaných službou Active Directory a Active Directory Domain Services najdete v tématu požadavky na porty služby Active Directory.
Konfigurace DNS hostitele kontejneru kontrolujte
Pokud používáte gMSA s hostitelem kontejneru připojeným k doméně, DNS by měl být na hostiteli automaticky nakonfigurován, aby mohl správně rozpoznat a navázat připojení k doméně. Pokud používáte gMSA s hostitelem, který není připojený k doméně, tato konfigurace se nenastaví automaticky. Měli byste ověřit, že je hostitelská síť nakonfigurovaná tak, aby mohla vyřešit doménu. Pomocí následujícího postupu můžete zkontrolovat, zda lze doménu vyřešit z hostitele:
nltest /sc_verify:contoso.com
Kontrola kontejneru
Pokud používáte verzi Windows před Windows Serverem 2019 nebo Windows 10 verze 1809, musí název hostitele kontejneru odpovídat názvu gMSA. Ujistěte se, že parametr
--hostname
odpovídá krátkému názvu gMSA (žádná komponenta domény, například "webapp01" místo "webapp01.contoso.com").Zkontrolujte konfiguraci sítě kontejnerů a zajistěte, že kontejner může najít a získat přístup k řadiči domény pro doménu gMSA. Chybně nakonfigurované servery DNS v kontejneru jsou běžným viníkem problémů s identitou.
Spuštěním následující rutiny v kontejneru (pomocí
docker exec
nebo ekvivalentu) zkontrolujte, jestli má kontejner platné připojení k doméně:nltest /sc_verify:contoso.com
Ověření důvěryhodnosti by mělo vrátit
NERR_SUCCESS
, pokud je gMSA k dispozici a síťové připojení umožňuje kontejneru komunikovat s doménou. Pokud selže, ověřte konfiguraci sítě hostitele a kontejneru. Obě musí být schopné komunikovat s řadičem domény.Zkontrolujte, jestli kontejner dokáže získat platný lístek TGT (Kerberos Ticket Grant Ticket):
klist get <myapp>
Tento příkaz by měl vrátit zprávu "Lístek pro krbtgt byl úspěšně načten" a zobrazit řadič domény použitý k načtení lístku. Pokud můžete získat TGT, ale
nltest
z předchozího kroku selže, může to značit, že je účet gMSA chybně nakonfigurovaný. Viz zkontrolujte účet gMSA pro více informací.Pokud v kontejneru nemůžete získat TGT, může to značit problémy s připojením k DNS nebo síti. Ujistěte se, že kontejner dokáže najít řadič domény pomocí názvu DNS domény a že řadič domény je směrovatelný z kontejneru.
Ujistěte se, že je aplikace nakonfigurovaná k použití gMSA. Uživatelský účet v kontejneru se při použití gMSA nezmění. Systémový účet používá gMSA, když komunikuje s dalšími síťovými prostředky. To znamená, že vaše aplikace bude muset běžet jako síťová služba nebo místní systém, aby využila identitu gMSA.
Spropitné
Pokud spustíte
whoami
nebo použijete jiný nástroj k identifikaci aktuálního kontextu uživatele v kontejneru, nezobrazí se samotný název gMSA. Důvodem je to, že se vždy přihlásíte ke kontejneru jako místní uživatel místo identity domény. Účet gMSA je používán účtem počítače pokaždé, když komunikuje se síťovými prostředky; proto vaše aplikace musí běžet jako Síťová služba nebo jako Místní systém.
Kontrola účtu gMSA
Pokud se zdá, že je váš kontejner správně nakonfigurovaný, ale uživatelé nebo jiné služby se nemůžou automaticky ověřit ve vaší kontejnerizované aplikaci, zkontrolujte SPN u svého účtu gMSA. Klienti vyhledají účet gMSA podle názvu, jak se připojí k vaší aplikaci. To může znamenat, že budete potřebovat další hlavní názvy služeb (SPN)
host
pro gMSA, pokud se například klienti připojují k vaší aplikaci přes nástroj pro vyrovnávání zatížení nebo jiným názvem DNS.Pokud chcete použít gMSA s hostitelem kontejneru připojeným k doméně, ujistěte se, že gMSA a hostitel kontejnerů patří do stejné domény Active Directory. Hostitel kontejneru nebude moct načíst heslo gMSA, pokud gMSA patří do jiné domény.
Ujistěte se, že ve vaší doméně je jenom jeden účet se stejným názvem jako váš gMSA. Objekty gMSA mají k názvům účtů SAM připojené znaky dolaru ($), takže je možné, že se gMSA pojmenuje "myaccount$" a nesouvisející uživatelský účet s názvem "myaccount" ve stejné doméně. To může způsobit problémy, pokud řadič domény nebo aplikace musí vyhledat gMSA podle názvu. V AD můžete hledat podobně pojmenované objekty pomocí následujícího příkazu:
# Replace "GMSANAMEHERE" with your gMSA account name (no trailing dollar sign) Get-ADObject -Filter 'sAMAccountName -like "GMSANAMEHERE*"'
Pokud jste pro účet gMSA povolili neomezené delegování, ujistěte se, že atribut UserAccountControl má stále povolený příznak
WORKSTATION_TRUST_ACCOUNT
. Tento příznak je vyžadován pro netLOGON v kontejneru ke komunikaci s řadičem domény, stejně jako v případě, že aplikace musí přeložit název na identifikátor SID nebo naopak. Pomocí následujících příkazů můžete zkontrolovat, jestli je příznak správně nakonfigurovaný:$gMSA = Get-ADServiceAccount -Identity 'yourGmsaName' -Properties UserAccountControl ($gMSA.UserAccountControl -band 0x1000) -eq 0x1000
Pokud výše uvedené příkazy vrátí
False
, pomocí následujícího příkazu přidejte příznakWORKSTATION_TRUST_ACCOUNT
do vlastnosti UserAccountControl účtu gMSA. Tento příkaz také vymaže příznakyNORMAL_ACCOUNT
,INTERDOMAIN_TRUST_ACCOUNT
aSERVER_TRUST_ACCOUNT
z vlastnosti UserAccountControl.Set-ADObject -Identity $gMSA -Replace @{ userAccountControl = ($gmsa.userAccountControl -band 0x7FFFC5FF) -bor 0x1000 }
Hostitelé kontejnerů nepřipojení k doméně: K identifikaci problémů s konfigurací použijte protokoly událostí.
Protokolování událostí pro použití gMSA s hostiteli kontejnerů, kteří nejsou připojeni k doméně, je možné použít k identifikaci problémů s konfigurací. Události jsou protokolovány v souboru protokolu microsoft-Windows-Containers-CCG a lze je najít v Prohlížeči událostí v části Protokoly aplikací a služeb\Microsoft\Windows\Containers-CCG\Admin. Pokud exportujete tento soubor protokolu z hostitele kontejneru, abyste ho mohli přečíst, musíte mít na zařízení, na kterém se pokoušíte číst soubor protokolu, povolená funkce kontejnerů, která podporuje použití gMSA s hostiteli kontejnerů, kteří nejsou připojeni k doméně.
Události a popisy
Číslo události | Text události | Popis |
---|---|---|
1 | Vytvoření instance modulu plug-in container Credential Guard | Tato událost udává, že modul plug-in zadaný v specifikaci credential Spec byl nainstalován a lze ho načíst. Není potřeba žádná akce. |
2 | Container Credential Guard načítal přihlašovací údaje gmsa pro %1 pomocí modulu plug-in: %2 | Jedná se o informační událost označující, že přihlašovací údaje gMSA byly úspěšně načteny z AD. Není potřeba žádná akce. |
3 | Službě Container Credential Guard se nepodařilo analyzovat specifikaci přihlašovacích údajů. Chyba: %1 | Tato událost označuje problém se specifikací přihlašovacích údajů. K tomu může dojít v případě, že identifikátor GUID modulu plug-in je nesprávný nebo pokud existují jiná poškozená pole. Projděte si pokyny k řešení potíží se specifikací přihlašovacích údajů a ověřte formátování a obsah specifikace přihlašovacích údajů. |
4 | Službě Container Credential Guard se nepodařilo vytvořit instanci modulu plug-in: %1. Chyba: %2 | Tato událost označuje, že modul plug-in nelze načíst. Měli byste zkontrolovat, jestli byl modul plug-in správně nainstalovaný na hostiteli. |
6 | Službě Container Credential Guard se nepodařilo načíst přihlašovací údaje z modulu plug-in: %1. Chyba: %2 | Tato událost označuje, že modul plug-in se načetl, ale nemohl načíst přihlašovací údaje potřebné k načtení hesla gMSA z AD. Měli byste ověřit, jestli je vstup modulu plug-in správně naformátovaný ve specifikaci přihlašovacích údajů a že hostitel kontejneru má potřebná oprávnění pro přístup k úložišti tajných kódů používaných modulem plug-in. |
7 | Container Credential Guard znovu načítá přihlašovací údaje pomocí modulu plug-in: %1 | Toto je informační událost. Tato událost se vygeneruje, když vypršela platnost hesla gMSA a je potřeba ji aktualizovat pomocí přihlašovacích údajů načtených modulem plug-in. |
8 | Container Credential Guard se nepodařilo načíst přihlašovací údaje gmsa pro %1 pomocí modulu plug-in %2. Důvod chyby: %3 | Tato událost označuje, že přihlašovací údaje načtené pomocí modulu plug-in nelze použít k načtení přihlašovacích údajů gMSA z AD. Měli byste ověřit, že účet, který se načítá z modulu plug-in, má v AD oprávnění k načtení přihlašovacích údajů gMSA. |