Delen via


Problemen met gMSA's voor Windows-containers oplossen

Van toepassing op: Windows Server 2025, Windows Server 2022, Windows Server 2019

Bekende problemen

De hostnaam van de container moet overeenkomen met de gMSA-naam voor Windows Server 2016 en Windows 10, versies 1709 en 1803

Als u Windows Server 2016, versie 1709 of 1803 gebruikt, moet de hostnaam van uw container overeenkomen met uw gMSA SAM-accountnaam.

Wanneer de hostnaam niet overeenkomt met de gMSA-naam, mislukken binnenkomende NTLM-verificatieaanvragen en naam-/SID-vertaling (gebruikt door veel bibliotheken, zoals de ASP.NET lidmaatschapsrolprovider). Kerberos blijft normaal functioneren, zelfs als de hostnaam en gMSA-naam niet overeenkomen.

Deze beperking is opgelost in Windows Server 2019, waarbij de container nu altijd de gMSA-naam op het netwerk gebruikt, ongeacht de toegewezen hostnaam.

U kunt gMSA's niet gebruiken met Hyper-V geïsoleerde containers in Windows 10-versies 1703, 1709 en 1803

De initialisatie van containers loopt vast of mislukt wanneer u probeert een gMSA te gebruiken met een Hyper-V geïsoleerde container in Windows 10 en Windows Server-versies 1703, 1709 en 1803.

Deze fout is opgelost in Windows Server 2019 en Windows 10, versie 1809. U kunt ook Hyper-V geïsoleerde containers met gMSA's uitvoeren op Windows Server 2016 en Windows 10, versie 1607.

Algemene richtlijnen voor probleemoplossing

Als er fouten optreden bij het uitvoeren van een container met een gMSA, kunnen de volgende instructies u helpen de hoofdoorzaak te identificeren.

Hosts die lid zijn van een domein: zorg ervoor dat de host de gMSA kan gebruiken

  1. Controleer of de host lid is van een domein en of deze de domeincontroller kan bereiken.

  2. Installeer de AD PowerShell Tools van RSAT en voer Test-ADServiceAccount uit om te zien of de computer toegang heeft om de gMSA op te halen. Als de cmdlet Falseretourneert, heeft de computer geen toegang tot het gMSA-wachtwoord.

    # 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
    
  3. Als Test-ADServiceAccountFalseretourneert, controleert u of de host deel uitmaakt van een beveiligingsgroep die toegang heeft tot het gMSA-wachtwoord.

    # 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
    
  4. Als uw host behoort tot een beveiligingsgroep die is gemachtigd om het gMSA-wachtwoord op te halen, maar nog steeds mislukt Test-ADServiceAccount, moet u de computer mogelijk opnieuw opstarten om een nieuw ticket te verkrijgen dat overeenkomt met de huidige groepslidmaatschappen.

Niet-domein-gekoppelde hosts: zorg ervoor dat de host is geconfigureerd om het gMSA-account op te halen

Controleer of een invoegtoepassing voor het gebruik van gMSA met een niet-domein-gekoppelde containerhost juist is geïnstalleerd op de host. Windows bevat geen ingebouwde invoegtoepassing en vereist dat u een invoegtoepassing opgeeft waarmee de interface ICcgDomainAuthCredentialswordt geïmplementeerd. Installatiedetails zijn specifiek voor de invoegtoepassingen.

Controleer het Credential Spec-bestand

  1. Voer Get-CredentialSpec- uit vanuit de CredentialSpec PowerShell-module om alle referentiespecificaties op de computer te vinden. De referentiespecificaties moeten worden opgeslagen in de map CredentialSpecs onder de Docker-hoofdmap. U vindt de Docker-hoofdmap door docker-informatie uit te voeren -f {{. DockerRootDir}".

  2. Open het CredentialSpec-bestand en controleer of de volgende velden correct zijn ingevuld:

    1. Voor containerhosts die lid zijn van een domein:

      • Sid-: de SID van uw domein
      • MachineAccountName: de GMSA SAM-accountnaam (neem geen volledige domeinnaam of dollarteken op)
      • DnsTreeName: de FQDN van uw Active Directory-forest
      • DnsName-: de FQDN van het domein waartoe de gMSA behoort
      • NetBiosName: NETBIOS-naam voor het domein waartoe de gMSA behoort
      • GroupManagedServiceAccounts/Name: de sam-accountnaam van gMSA (neem geen volledige domeinnaam of dollarteken op)
      • GroupManagedServiceAccounts/Scope: één vermelding voor de FQDN van het domein en één voor de NETBIOS

      Uw invoer moet eruitzien als in het volgende voorbeeld van een volledige referentiespecificatie:

      {
          "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"
                  }
              ]
          }
      }
      
    2. Voor niet-domein-gekoppelde hosts: Naast de velden van niet-domein-gekoppelde container-hostvelden, moet u ervoor zorgen dat de sectie HostAccountConfig aanwezig is en dat de onderstaande velden correct zijn gedefinieerd.

      • PortableCcgVersion: dit moet worden ingesteld op '1'.
      • PluginGUID: de COM CLSID voor uw ccg.exe plug-in. Dit is uniek voor de gebruikte plug-in.
      • PluginInput: Specifieke invoer van de plugin voor het ophalen van de gebruikersaccountgegevens uit de geheime opslag.

      Uw invoer moet eruitzien als in het volgende voorbeeld van een volledige referentiespecificatie:

      {
          "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>"
              }
          }
      }
      
  3. Controleer of het pad naar het referentiespecificatiebestand correct is voor uw orkestratie-oplossing. Als u Docker gebruikt, moet u ervoor zorgen dat de opdracht voor het uitvoeren van de container --security-opt="credentialspec=file://NAME.json"bevat, waarbij 'NAME.json' wordt vervangen door de naamuitvoer door Get-CredentialSpec-. De naam is een platte bestandsnaam ten opzichte van de map CredentialSpecs onder de Docker-hoofdmap.

De netwerkconfiguratie controleren

De firewallconfiguratie controleren

Als u een strikt firewallbeleid op de container of het hostnetwerk gebruikt, kunnen vereiste verbindingen met de Active Directory-domeincontroller of DNS-server worden geblokkeerd.

Protocol en poort Doel
TCP en UDP 53 DNS
TCP en UDP 88 Kerberos
TCP 139 NetLogon
TCP en UDP 389 LDAP
TCP 636 LDAP SSL

Mogelijk moet u toegang tot extra poorten toestaan, afhankelijk van het type verkeer dat uw container naar een domeincontroller verzendt. Zie poortvereisten voor Active Directory en Active Directory Domain Services voor een volledige lijst met poorten die door Active Directory worden gebruikt.

De DNS-configuratie van de containerhost controleren

Als u gMSA gebruikt met een containerhost die lid is van een domein, moet DNS automatisch worden geconfigureerd op de host, zodat deze een juiste verbinding met het domein kan omzetten en tot stand kan brengen. Als u gMSA gebruikt met een host die niet lid is van een domein, wordt deze configuratie niet automatisch ingesteld. Controleer of het hostnetwerk zo is geconfigureerd dat het het domein kan oplossen. U kunt controleren of het domein kan worden opgelost door de host:

nltest /sc_verify:contoso.com

De container controleren

  1. Als u een versie van Windows uitvoert vóór Windows Server 2019 of Windows 10 versie 1809, moet uw containerhostnaam overeenkomen met de gMSA-naam. Zorg ervoor dat de parameter --hostname overeenkomt met de korte naam van gMSA (geen domeinonderdeel, bijvoorbeeld 'webapp01' in plaats van 'webapp01.contoso.com').

  2. Controleer de configuratie van het containernetwerk om te verifiëren of de container een domeincontroller voor het domein van de gMSA kan oplossen en benaderen. Onjuist geconfigureerde DNS-servers in de container zijn een veelvoorkomende oorzaak van identiteitsproblemen.

  3. Controleer of de container een geldige verbinding met het domein heeft door de volgende cmdlet uit te voeren in de container (met behulp van docker exec of een equivalent):

    nltest /sc_verify:contoso.com
    

    De vertrouwensverificatie moet NERR_SUCCESS retourneren als de gMSA beschikbaar is en de netwerkverbinding de container toestaat om met het domein te communiceren. Als dit mislukt, controleert u de netwerkconfiguratie van de host en container. Beide moeten kunnen communiceren met de domeincontroller.

  4. Controleer of de container een geldig Kerberos Ticket Granting Ticket (TGT) kan verkrijgen:

    klist get <myapp>
    

    Met deze opdracht wordt 'Een ticket naar krbtgt is opgehaald' geretourneerd en wordt de domeincontroller vermeld die wordt gebruikt om het ticket op te halen. Als u een TGT kunt verkrijgen, maar nltest uit de vorige stap mislukt, kan dit een indicatie zijn dat het gMSA-account onjuist is geconfigureerd. Zie en controleer het gMSA-account voor meer informatie.

    Als u geen TGT in de container kunt verkrijgen, kan dit duiden op problemen met DNS- of netwerkconnectiviteit. Zorg ervoor dat de container een domeincontroller kan omzetten met behulp van de DNS-naam van het domein en of de domeincontroller routeerbaar is vanuit de container.

  5. Zorg ervoor dat uw app is geconfigureerd om de gMSAte gebruiken. Het gebruikersaccount in de container wordt niet gewijzigd wanneer u een gMSA gebruikt. In plaats daarvan gebruikt het systeemaccount de gMSA wanneer het met andere netwerkbronnen praat. Dit betekent dat uw app moet worden uitgevoerd als netwerkservice of lokaal systeem om de gMSA-identiteit te kunnen gebruiken.

    Tip

    Als u whoami uitvoert of een ander hulpprogramma gebruikt om uw huidige gebruikerscontext in de container te identificeren, ziet u de gMSA-naam zelf niet. Dit komt doordat u zich altijd als lokale gebruiker aanmeldt bij de container in plaats van een domeinidentiteit. De gMSA wordt door het computeraccount gebruikt wanneer deze met netwerkbronnen praat. Daarom moet uw app worden uitgevoerd als netwerkservice of lokaal systeem.

Het gMSA-account controleren

  1. Als uw container correct lijkt te zijn geconfigureerd, maar gebruikers of andere services niet automatisch kunnen verifiëren bij uw container-app, controleert u de SPN's in uw gMSA-account. Clients vinden het gMSA-account op basis van de naam waarop ze uw toepassing bereiken. Dit kan betekenen dat u extra host SPN's voor uw gMSA nodig hebt als clients bijvoorbeeld verbinding maken met uw app via een load balancer of een andere DNS-naam.

  2. Voor het gebruik van gMSA met een containerhost die lid is van een domein, moet u ervoor zorgen dat de gMSA- en containerhost deel uitmaken van hetzelfde Active Directory-domein. De containerhost kan het gMSA-wachtwoord niet ophalen als de gMSA deel uitmaakt van een ander domein.

  3. Zorg ervoor dat er slechts één account in uw domein is met dezelfde naam als uw gMSA. gMSA-objecten hebben dollartekens ($) toegevoegd aan hun SAM-accountnamen, dus het is mogelijk dat een gMSA 'myaccount$' heet en dat een niet-gerelateerd gebruikersaccount 'myaccount' heet in hetzelfde domein. Dit kan problemen veroorzaken als de domeincontroller of toepassing de gMSA op naam moet opzoeken. U kunt ad zoeken naar vergelijkbare benoemde objecten met de volgende opdracht:

    # Replace "GMSANAMEHERE" with your gMSA account name (no trailing dollar sign)
    Get-ADObject -Filter 'sAMAccountName -like "GMSANAMEHERE*"'
    
  4. Als u onbeperkte delegatie hebt ingeschakeld voor het gMSA-account, zorg er dan voor dat het kenmerk UserAccountControl de vlag WORKSTATION_TRUST_ACCOUNT nog steeds ingeschakeld heeft. Deze vlag is vereist voor NETLOGON in de container om te communiceren met de domeincontroller, zoals het geval is wanneer een app een naam moet omzetten in een SID of omgekeerd. U kunt controleren of de vlag juist is geconfigureerd met de volgende opdrachten:

    $gMSA = Get-ADServiceAccount -Identity 'yourGmsaName' -Properties UserAccountControl
    ($gMSA.UserAccountControl -band 0x1000) -eq 0x1000
    

    Als de bovenstaande opdrachten Falseretourneren, gebruik dan het volgende om het WORKSTATION_TRUST_ACCOUNT-attribuut toe te voegen aan de eigenschap UserAccountControl van het gMSA-account. Met deze opdracht worden ook de NORMAL_ACCOUNT, INTERDOMAIN_TRUST_ACCOUNTen SERVER_TRUST_ACCOUNT vlaggen uit de eigenschap UserAccountControl gewist.

    Set-ADObject -Identity $gMSA -Replace @{ userAccountControl = ($gmsa.userAccountControl -band 0x7FFFC5FF) -bor 0x1000 }
    
    

Niet-domein-gekoppelde containerhosts: gebeurtenislogboeken gebruiken om configuratieproblemen te identificeren

Logboekregistratie van gebeurtenissen voor het gebruik van gMSA met niet-domein-gekoppelde containerhosts kan worden gebruikt om configuratieproblemen te identificeren. Gebeurtenissen worden vastgelegd in het logboekbestand Microsoft-Windows-Containers-CCG en zijn te vinden in de Logboeken van toepassingen en services onder Microsoft\Windows\Containers-CCG\Admin. Als u dit logboekbestand van de containerhost exporteert om het te kunnen lezen, moet de containerfunctie zijn ingeschakeld op het apparaat waarop u probeert het logboekbestand te lezen, en moet u een Windows-versie hebben die gMSA ondersteunt met niet-domein-gekoppelde containerhosts.

Gebeurtenissen en beschrijvingen

Gebeurtenisnummer Gebeurtenistekst Beschrijving
1 Container Credential Guard heeft de plug-in geïnstantieerd Deze gebeurtenis geeft aan dat de invoegtoepassing die in de referentiespecificatie is opgegeven, is geïnstalleerd en kon worden ingeladen. Geen actie nodig.
2 Container Credential Guard heeft gmsa-referenties opgehaald voor %1 met behulp van de invoegtoepassing: %2 Dit is een informatieve gebeurtenis die aangeeft dat gMSA-referenties succesvol zijn opgehaald uit Active Directory. Geen actie nodig.
3 Container Credential Guard kan de referentiespecificatie niet parseren. Fout: %1 Deze gebeurtenis geeft een probleem aan met de referentiespecificatie. Dit kan gebeuren als de GUID voor de invoegtoepassing onjuist is of als er andere onjuiste velden zijn. Raadpleeg richtlijnen voor probleemoplossing voor de referentiespecificatie om de opmaak en inhoud van de referentiespecificatie te controleren.
4 Container Credential Guard kan de invoegtoepassing niet instantiëren: %1. Fout: %2 Deze gebeurtenis geeft aan dat de invoegtoepassing niet kan worden geladen. Controleer of de invoegtoepassing correct is geïnstalleerd op de host
6 Container Credential Guard kan geen referenties ophalen uit de invoegtoepassing: %1. Fout: %2 Met deze gebeurtenis wordt aangegeven dat de invoegtoepassing is geladen, maar geen referenties kan ophalen die nodig zijn om het gMSA-wachtwoord van AD op te halen. Controleer of de invoer voor de invoegtoepassing correct is opgemaakt in de referentiespecificatie en of de containerhost over de benodigde machtigingen beschikt om toegang te krijgen tot het geheime archief dat door de invoegtoepassing wordt gebruikt.
7 Container Credential Guard haalt de referenties opnieuw op met behulp van de plug-in: %1 Dit is een informatieve gebeurtenis. Deze gebeurtenis wordt gegenereerd wanneer het gMSA-wachtwoord is verlopen en moet worden vernieuwd met behulp van de referenties die zijn opgehaald door de invoegtoepassing.
8 Container Credential Guard kan geen gmsa-referenties ophalen voor %1 met behulp van de invoegtoepassing %2. Foutreden: %3 Deze gebeurtenis geeft aan dat de referenties die zijn opgehaald met behulp van de invoegtoepassing, niet kunnen worden gebruikt om gMSA-referenties op te halen uit AD. Controleer of het account dat wordt opgehaald uit de invoegtoepassing machtigingen heeft in AD om de gMSA-referenties op te halen.