Vytváření gMSA pro kontejnery Windows
Platí pro: Windows Server 2025, Windows Server 2022, Windows Server 2019
Sítě založené na Windows běžně používají službu Active Directory (AD) k usnadnění ověřování a autorizace mezi uživateli, počítači a dalšími síťovými prostředky. Vývojáři podnikových aplikací často navrhují své aplikace tak, aby byly integrované a spouštěné na serverech připojených k doméně, aby mohli využívat integrované ověřování systému Windows, což usnadňuje uživatelům a dalším službám automatické a transparentní přihlášení k aplikaci pomocí jejich identit. Tento článek vysvětluje, jak začít používat účty spravované služby skupiny Active Directory s kontejnery Windows.
I když kontejnery Windows nemůžou být připojené k doméně, můžou stále používat identity domény služby Active Directory k podpoře různých scénářů ověřování. Abyste toho dosáhli, můžete nakonfigurovat kontejner Windows tak, aby běžel s skupinovým účtem spravované služby (gMSA), což je speciální typ účtu služby představeného ve Windows Serveru 2012 a navržený tak, aby více počítačům umožňovalo sdílet identitu bez nutnosti znát heslo. Kontejnery Windows nemůžou být připojené k doméně, ale mnoho aplikací windows, které běží v kontejnerech Windows, stále potřebuje ověřování AD. Pokud chcete použít ověřování AD, můžete nakonfigurovat kontejner Windows tak, aby běžel se skupinou účtu spravované služby (gMSA).
Při počátečním zavedení gMSA pro kontejnery Windows vyžadoval, aby byl hostitel kontejneru připojený k doméně, který uživatelům vytvořil spoustu režijních nákladů na ruční připojení pracovních uzlů Windows k doméně. Toto omezení bylo vyřešeno s podporou gMSA pro kontejnery Windows pro hostitele kontejnerů, kteří nejsou připojeni k doméně. Budeme dál podporovat původní funkcionalitu gMSA pro použití kontejnerového hostitele připojeného k doméně.
Mezi vylepšení gMSA při použití hostitele kontejneru, který není připojený k doméně, patří:
- Požadavek na ruční připojení pracovních uzlů Windows k doméně je eliminován, protože způsobil spoustu režijních nákladů pro uživatele. V případě scénářů škálování použití hostitele kontejneru, který není připojený k doméně, proces zjednodušuje.
- Ve scénářích postupné aktualizace už uživatelé nemusí znovu připojovat uzel k doméně.
- Správa účtů počítačů pracovních uzlů za účelem načtení hesel účtu služby gMSA je jednodušší proces.
- Konfigurace gMSA s Kubernetes je méně složitým procesem od začátku do konce.
Poznámka
Informace o tom, jak komunita Kubernetes podporuje použití gMSA s kontejnery Windows, najdete v tématu konfigurace gMSA.
Architektura a vylepšení gMSA
Aby bylo možné řešit omezení počáteční implementace gMSA pro kontejnery Windows, nová podpora GMSA pro hostitele kontejnerů, kteří nejsou připojeni k doméně, používá k načtení přihlašovacích údajů gMSA přenosnou identitu uživatele místo účtu hostitelského počítače. Proto už není nutné ručně připojovat pracovní uzly Windows k doméně, i když se stále podporuje. Identita nebo přihlašovací údaje uživatele se ukládají do úložiště tajných kódů, které je přístupné hostiteli kontejneru (například jako tajný klíč Kubernetes), kde ho můžou ověření uživatelé načíst.
Podpora gMSA pro hostitele kontejnerů, kteří nejsou připojeni k doméně, poskytuje flexibilitu při vytváření kontejnerů s gMSA bez připojení hostitelského uzlu k doméně. Od Windows Server 2019 je podporován ccg.exe, který umožňuje získat přihlašovací údaje gMSA z Active Directory pomocí mechanismu plug-inu. Tuto identitu můžete použít ke spuštění kontejneru. Další informace o tomto mechanismu zásuvného modulu naleznete v rozhraní ICcgDomainAuthCredentials.
Poznámka
V Azure Kubernetes Service ve službě Azure Stack HCI můžete pomocí modulu plug-in komunikovat z ccg.exe do AD a pak načíst přihlašovací údaje gMSA. Další informace najdete v tématu konfigurace skupinového účtu spravované služby pomocí AKS ve službě Azure Stack HCI.
Pokud chcete postupovat podle kroků procesu Container Credential Guard, prohlédněte si následující diagram:
Při použití souboru CredSpec jako vstup se spustí proces ccg.exe na hostiteli uzlu.
ccg.exe používá informace v souboru CredSpec ke spuštění modulu plug-in a následnému načtení přihlašovacích údajů účtu v úložišti tajných kódů přidružených k modulu plug-in.
ccg.exe využívá načtené přihlašovací údaje k načtení hesla gMSA z AD.
ccg.exe zpřístupní heslo gMSA kontejneru s požadovanými přihlašovacími údaji.
Kontejner se autentizuje v řadiči domény pomocí hesla gMSA, aby získal Kerberos Ticket-Granting Ticket (TGT).
Aplikace spuštěné jako síťová služba nebo místní systém v kontejneru teď můžou ověřovat a přistupovat k prostředkům domény, jako je například gMSA.
Požadavky
Pokud chcete spustit kontejner Windows s účtem spravované služby skupiny, budete potřebovat následující:
- Doména služby Active Directory s alespoň jedním řadičem domény se systémem Windows Server 2012 nebo novějším. Neexistují žádné požadavky na úroveň funkčnosti doménové struktury nebo domény pro použití gMSA, ale hesla gMSA je možné distribuovat pouze řadiči domény se systémem Windows Server 2012 nebo novějším. Další informace naleznete v části požadavky služby Active Directory pro gMSAs.
- Oprávnění k vytvoření účtu gMSA Pokud chcete vytvořit účet gMSA, musíte být správcem domény nebo použít účet, který má delegováno oprávnění Vytvořit objekty msDS-GroupManagedServiceAccount.
- Přístup k internetu ke stažení modulu PowerShell CredentialSpec Pokud pracujete v odpojeném prostředí, můžete uložit modul na počítači s přístupem k internetu a zkopírovat ho do vývojového počítače nebo hostitele kontejneru.
Jednorázová příprava služby Active Directory
Pokud jste ještě ve vaší doméně nevytvořili gMSA, budete muset vygenerovat kořenový klíč služby pro distribuci klíčů (KDS). KDS zodpovídá za vytváření, obměňování a vydávání hesla gMSA autorizovaným hostitelům. Pokud hostitel kontejneru potřebuje ke spuštění kontejneru použít gMSA, kontaktuje KDS a načte aktuální heslo.
Pokud chcete zkontrolovat, jestli už je kořenový klíč KDS vytvořený, spusťte následující rutinu PowerShellu jako správce domény na řadiči domény nebo členu domény s nainstalovanými nástroji AD PowerShellu:
Get-KdsRootKey
Pokud příkaz vrátí identifikátor klíče, je vše připraveno a můžete přejít na oddíl vytvoření skupinového účtu spravované služby. Jinak pokračujte a vytvořte kořenový klíč KDS.
Důležitý
Pro každou doménovou strukturu byste měli vytvořit pouze jeden kořenový klíč KDS. Pokud se vytvoří více kořenových klíčů KDS, způsobí to, že gMSA po obměně hesla gMSA začne selhát.
V produkčním prostředí nebo testovacím prostředí s více řadiči domény spusťte následující rutinu v PowerShellu jako správce domény a vytvořte kořenový klíč KDS.
# For production environments
Add-KdsRootKey -EffectiveImmediately
I když příkaz znamená, že klíč bude efektivní okamžitě, budete muset počkat 10 hodin, než se kořenový klíč KDS replikuje a bude dostupný pro použití na všech řadičích domény.
Pokud máte ve své doméně jen jeden řadič domény, můžete proces urychlit tím, že nastavíte klíč tak, aby byl účinný od doby před deseti hodinami.
Důležitý
Tuto techniku nepoužívejte v produkčním prostředí.
# For single-DC test environments only
Add-KdsRootKey -EffectiveTime (Get-Date).AddHours(-10)
Vytvořte skupinový spravovaný účet služby
Každý kontejner, který používá integrované ověřování systému Windows, potřebuje alespoň jeden gMSA. Primární gMSA se používá vždy, když aplikace spuštěné jako systém nebo síťová služba přistupují k prostředkům v síti. Název gMSA se stane názvem kontejneru v síti bez ohledu na název hostitele přiřazený kontejneru. Kontejnery lze také nakonfigurovat s dalšími účty gMSA pro případ, že chcete spustit službu nebo aplikaci v kontejneru jako jinou identitu než účet počítače kontejneru.
Když vytvoříte gMSA, vytvoříte také sdílenou identitu, kterou lze použít současně na mnoha různých počítačích. Přístup k heslu gMSA je chráněný seznamem řízení přístupu služby Active Directory. Doporučujeme vytvořit skupinu zabezpečení pro každý účet gMSA a přidat příslušné hostitele kontejnerů do skupiny zabezpečení, abyste omezili přístup k heslu.
A konečně, protože kontejnery nezaregistrují automaticky žádné hlavní názvy služby (SPN), budete muset pro svůj účet gMSA ručně vytvořit alespoň hlavní název služby hostitele.
Hostitel nebo http SPN se obvykle registruje pomocí stejného názvu jako účet gMSA, ale pokud klienti přistupují ke kontejnerizované aplikaci zpoza vyrovnávače zatížení nebo název DNS odlišný od názvu gMSA, bude pravděpodobně potřeba použít jiný název služby.
Například pokud má účet gMSA název "WebApp01", ale vaši uživatelé přistupují k webu na mysite.contoso.com
, měli byste zaregistrovat http/mysite.contoso.com
jako SPN na účtu gMSA.
Některé aplikace mohou pro své jedinečné protokoly vyžadovat další SPN (hlavní názvy služeb). Sql Server například vyžaduje hlavní název služby (SPN) MSSQLSvc/hostname
.
Následující tabulka obsahuje seznam požadovaných atributů pro vytvoření gMSA.
gMSA vlastnosti | Požadovaná hodnota | Příklad |
---|---|---|
Jméno | Libovolný platný název účtu. | WebApp01 |
DnsHostName | Název domény připojený k názvu účtu. | WebApp01.contoso.com |
Názvy hlavních služeb | Nastavte alespoň hostitelský SPN a podle potřeby přidejte další protokoly. | 'host/WebApp01', 'host/WebApp01.contoso.com' |
UživateléPoužívajícíKRetrakciSpravovanéhoHesla | Skupina zabezpečení obsahující hostitele kontejnerů. | WebApp01Hosts |
Jakmile se rozhodnete pro název gMSA, spuštěním následujících rutin v PowerShellu vytvořte skupinu zabezpečení a gMSA.
Spropitné
Budete muset použít účet, který patří do skupiny zabezpečení Domain Admins, nebo má delegováno oprávnění Vytvořit objekty msDS-GroupManagedServiceAccount ke spuštění následujících příkazů. Rutina New-ADServiceAccount je součástí nástrojů AD PowerShellu z nástrojů pro vzdálenou správu serveru.
Doporučujeme vytvořit samostatné účty gMSA pro vaše vývojové, testovací a produkční prostředí.
Případ použití pro vytvoření účtu gMSA pro hostitele kontejnerů připojených k doméně
# Replace 'WebApp01' and 'contoso.com' with your own gMSA and domain names, respectively.
# 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
# Create the security group
New-ADGroup -Name "WebApp01 Authorized Hosts" -SamAccountName "WebApp01Hosts" -GroupScope DomainLocal
# Create the gMSA
New-ADServiceAccount -Name "WebApp01" -DnsHostName "WebApp01.contoso.com" -ServicePrincipalNames "host/WebApp01", "host/WebApp01.contoso.com" -PrincipalsAllowedToRetrieveManagedPassword "WebApp01Hosts"
# Add your container hosts to the security group
Add-ADGroupMember -Identity "WebApp01Hosts" -Members "ContainerHost01$", "ContainerHost02$", "ContainerHost03$"
Případ použití pro vytvoření účtu gMSA pro hostitele kontejnerů, kteří nejsou připojeni k doméně
Při použití gMSA pro kontejnery s hostiteli, kteří nejsou připojení k doméně, místo přidávání hostitelů kontejnerů do skupiny zabezpečení WebApp01Hosts
vytvořte a přidejte standardní uživatelský účet.
# Replace 'WebApp01' and 'contoso.com' with your own gMSA and domain names, respectively.
# 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
# Create the security group
New-ADGroup -Name "WebApp01 Authorized Accounts" -SamAccountName "WebApp01Accounts" -GroupScope DomainLocal
# Create the gMSA
New-ADServiceAccount -Name "WebApp01" -DnsHostName "WebApp01.contoso.com" -ServicePrincipalNames "host/WebApp01", "host/WebApp01.contoso.com" -PrincipalsAllowedToRetrieveManagedPassword "WebApp01Accounts"
# Create the standard user account. This account information needs to be stored in a secret store and will be retrieved by the ccg.exe hosted plug-in to retrieve the gMSA password. Replace 'StandardUser01' and 'p@ssw0rd' with a unique username and password. We recommend using a random, long, machine-generated password.
New-ADUser -Name "StandardUser01" -AccountPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled 1
# Add your container hosts to the security group
Add-ADGroupMember -Identity "WebApp01Accounts" -Members "StandardUser01"
Příprava hostitele kontejneru
Případ použití pro přípravu kontejnerového hostitele připojeného k doméně
Každý hostitel kontejneru, který bude spouštět kontejner Windows s gMSA, musí být připojený k doméně a mít přístup k načtení hesla gMSA.
Připojte počítač k doméně služby Active Directory.
Ujistěte se, že váš hostitel patří do skupiny zabezpečení, která řídí přístup k heslu gMSA.
Restartujte počítač, aby se získalo nové členství ve skupině.
Nastavte Docker Desktop pro Windows 10 nebo Docker pro Windows Server.
(Doporučeno) Ověřte, že hostitel může použít účet gMSA spuštěním Test-ADServiceAccount. Pokud příkaz vrátí false, postupujte podle pokynů k řešení potíží .
# 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
Použití pro přípravu kontejnerového hostitele, který není připojený k doméně
Při použití gMSA pro kontejnery Windows na hostitelích kontejnerů, které nejsou připojené k doméně, musí mít každý hostitel kontejneru nainstalovaný modul plug-in pro ccg.exe, který se použije k načtení přenosného uživatelského účtu a přihlašovacích údajů zadaných v předchozím kroku. Moduly plug-in jsou jedinečné pro úložiště tajných kódů, které slouží k ochraně přenosných přihlašovacích údajů uživatelského účtu. K ukládání přihlašovacích údajů účtu ve službě Azure Key Vault a v úložišti tajných kódů Kubernetes by se například vyžadovaly různé moduly plug-in.
Systém Windows v současné době nenabízí integrovaný výchozí modul plug-in. Pokyny k instalaci modulů plug-in budou specifické pro implementaci. Další informace o vytváření a registraci modulů plug-in pro ccg.exenaleznete v tématu rozhraní ICcgDomainAuthCredentials.
Vytvořte specifikaci přihlašovacích údajů
Soubor specifikace přihlašovacích údajů je dokument JSON obsahující metadata o účtech gMSA, které chcete použít v kontejneru. Když necháte konfiguraci identity oddělenou od image kontejneru, můžete změnit, kterou gMSA kontejner používá, jednoduše prohozením souboru specifikace přihlašovacích údajů. Nejsou potřeba žádné změny kódu.
Soubor specifikace přihlašovacích údajů se vytvoří pomocí modulu powershellu credentialSpec na počítači připojeném k doméně. Jakmile soubor vytvoříte, můžete ho zkopírovat do jiných hostitelů kontejnerů nebo do orchestrátoru kontejneru. Soubor specifikace přihlašovacích údajů neobsahuje žádné tajné kódy, například heslo gMSA, protože hostitel kontejneru načte gMSA jménem kontejneru.
Docker očekává, že v adresáři dat Dockeru najde soubor specifikace přihlašovacích údajů v adresáři CredentialSpecs. Ve výchozí instalaci najdete tuto složku na C:\ProgramData\Docker\CredentialSpecs
.
Vytvoření souboru specifikace přihlašovacích údajů na hostiteli kontejneru:
Instalace nástrojů POWERShellu služby RSAT AD
- Pro Windows Server spusťte Install-WindowsFeature RSAT-AD-PowerShell .
- Pro Windows 10 verze 1809 nebo novější spusťte Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0.
- Starší verze Windows 10 viz https://aka.ms/rsat.
Spuštěním následující rutiny nainstalujte nejnovější verzi modulu PowerShellu CredentialSpec:
Install-Module CredentialSpec
Pokud na hostiteli kontejneru nemáte přístup k internetu, spusťte
Save-Module CredentialSpec
na počítači připojeném k internetu a zkopírujte složku modulu doC:\Program Files\WindowsPowerShell\Modules
nebo do jiného umístění v$env:PSModulePath
na hostiteli kontejneru.Spuštěním následující rutiny vytvořte nový soubor specifikace přihlašovacích údajů:
# Replace 'WebApp01' with your own gMSA New-CredentialSpec -AccountName WebApp01
Ve výchozím nastavení rutina vytvoří specifikaci přihlašovacích údajů pomocí zadaného názvu gMSA jako účtu počítače pro kontejner. Soubor se uloží do adresáře Docker CredentialSpecs pomocí domény gMSA a názvu účtu pro název souboru.
Pokud chcete soubor uložit do jiného adresáře, použijte parametr
-Path
:New-CredentialSpec -AccountName WebApp01 -Path "C:\MyFolder\WebApp01_CredSpec.json"
Můžete také vytvořit specifikaci přihlašovacích údajů, která zahrnuje další účty gMSA, pokud v kontejneru spouštíte službu nebo proces jako sekundární gMSA. K tomu použijte parametr
-AdditionalAccounts
:New-CredentialSpec -AccountName WebApp01 -AdditionalAccounts LogAgentSvc, OtherSvc
Úplný seznam podporovaných parametrů zobrazíte spuštěním
Get-Help New-CredentialSpec -Full
.Zobrazit seznam všech specifikací přihlašovacích údajů a jejich úplné cesty můžete pomocí následujícího cmdletu:
Get-CredentialSpec
Toto je příklad 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"
}
]
}
}
Další konfigurace přihlašovacích údajů pro případ použití serveru kontejneru, který není připojený k doméně
Při použití gMSA s hostiteli kontejnerů, kteří nejsou připojeni k doméně, je potřeba přidat informace o modulu plug-in ccg.exe, který budete používat, do specifikace přihlašovacích údajů. To se přidá do části specifikace přihlašovacích údajů s názvem HostAccountConfig. Oddíl HostAccountConfig obsahuje tři pole, která je potřeba naplnit:
- PortableCcgVersion: Mělo by být nastaveno na hodnotu 1.
- PluginGUID: COM CLSID pro modul plug-in ccg.exe. To je jedinečné pro použitý zásuvný modul.
- PluginInput: Vstup specifický pro plug-in pro načtení informací o uživatelském účtu z tajného úložiště.
Toto je příklad specifikace přihlašovacích údajů s přidanou částí HostAccountConfig:
{
"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>"
}
}
}
Další kroky
Teď, když jste nastavili účet gMSA, můžete ho použít k:
Pokud během instalace narazíte na nějaké problémy, zkontrolujte náš průvodce odstraňováním potíží pro možné řešení.
Další zdroje informací
- Další informace o gMSA najdete v přehledu skupinových účtů spravovaných služeb.