Creare account del servizio gestito di gruppo per i contenitori Windows
Si applica a: Windows Server 2022, Windows Server 2019
Le reti basate su Windows usano comunemente Active Directory (AD) per facilitare l'autenticazione e l'autorizzazione tra utenti, computer e altre risorse di rete. Gli sviluppatori di applicazioni aziendali spesso progettano le app in modo che siano integrate con Active Directory ed eseguite su server aggiunti a un dominio per sfruttare l'autenticazione integrata di Windows, che consente agli utenti e ad altri servizi di accedere in modo automatico e trasparente all'applicazione con le proprie identità. Questo articolo illustra come iniziare a usare gli account del servizio gestito di gruppo Active Directory con i contenitori Windows.
Anche se non possono essere aggiunti a un dominio, i contenitori Windows possono usare le identità di dominio di Active Directory per supportare vari scenari di autenticazione. A tale scopo, è possibile configurare un contenitore di Windows per l'esecuzione con un account del servizio gestito di gruppo (gMSA), che è un tipo speciale di account del servizio introdotto in Windows Server 2012 e progettato per consentire a più computer di condividere un'identità senza dover conoscere la password. I contenitori di Windows non possono essere aggiunti a un dominio, ma molte applicazioni Windows eseguite nei contenitori di Windows richiedono ancora l'autenticazione di Active Directory. Per usare l'autenticazione di ACTIVE Directory, è possibile configurare un contenitore di Windows per l'esecuzione con un account del servizio gestito del gruppo.
Quando l'account del servizio gestito del gruppo per i contenitori windows è stato inizialmente introdotto, è necessario che l'host contenitore sia aggiunto a un dominio, che ha creato un sovraccarico elevato per consentire agli utenti di aggiungere manualmente i nodi di lavoro di Windows a un dominio. Questa limitazione è stata risolta con il supporto del servizio gestito del gruppo per i contenitori Windows per gli host contenitore non aggiunti a un dominio. Si continuerà a supportare la funzionalità gMSA originale per usare un host contenitore aggiunto a un dominio.
I miglioramenti apportati all'account del servizio gestito del gruppo quando si usa un host contenitore non aggiunto a un dominio includono:
- Il requisito di aggiungere manualmente i nodi di lavoro di Windows a un dominio viene eliminato perché ha causato un notevole sovraccarico per gli utenti. Per gli scenari di ridimensionamento, l'uso di un host contenitore non aggiunto a un dominio semplifica il processo.
- Negli scenari di aggiornamento in sequenza, gli utenti non devono più ricongiundere il nodo a un dominio.
- La gestione degli account del computer del nodo di lavoro per recuperare le password dell'account del servizio gMSA è un processo più semplice.
- La configurazione dell'account del servizio gestito del gruppo con Kubernetes è un processo end-to-end meno complesso.
Nota
Per informazioni su come la community di Kubernetes supporta l'uso dell'account del servizio gestito del gruppo con contenitori Windows, vedere Configurazione dell'account del servizio gestito del gruppo.
Architettura e miglioramenti del servizio gestito del gruppo
Per risolvere le limitazioni dell'implementazione iniziale dell'account del servizio gestito del gruppo per i contenitori Windows, il nuovo supporto del servizio gestito del gruppo per gli host contenitori non aggiunti a un dominio usa un'identità utente portabile anziché un account computer host per recuperare le credenziali dell'account del servizio gestito del gruppo. Di conseguenza, l'aggiunta manuale dei nodi di lavoro di Windows a un dominio non è più necessaria, anche se è ancora supportata. L'identità utente/le credenziali vengono archiviate in un archivio segreto accessibile all'host del contenitore , ad esempio come segreto Kubernetes, in cui gli utenti autenticati possono recuperarlo.
Il supporto gMSA per gli host contenitori non aggiunti a un dominio offre la flessibilità necessaria per la creazione di contenitori con account del servizio gestito del gruppo senza aggiungere il nodo host al dominio. A partire da Windows Server 2019, ccg.exe è supportato che consente a un meccanismo plug-in di recuperare le credenziali del servizio gestito del gruppo da Active Directory. È possibile usare tale identità per avviare il contenitore. Per altre informazioni su questo meccanismo di plug-in, vedere l'interfaccia ICcgDomainAuthCredentials.
Nota
In servizio Azure Kubernetes in Azure Stack HCI è possibile usare il plug-in per comunicare da ccg.exe ad AD e quindi recuperare le credenziali del servizio gestito del gruppo. Per altre informazioni, vedere Configurare l'account del servizio gestito del gruppo con il servizio Azure Kubernetes in Azure Stack HCI.
Visualizzare il diagramma seguente per seguire i passaggi del processo di Container Credential Guard:
Usando un file CredSpec come input, il processo di ccg.exe viene avviato nell'host del nodo.
ccg.exe usa le informazioni nel file CredSpec per avviare un plug-in e quindi recuperare le credenziali dell'account nell'archivio segreto associato al plug-in.
ccg.exe usa le credenziali dell'account recuperato per recuperare la password dell'account del servizio gestito del gruppo da AD.
ccg.exe rende disponibile la password del servizio gestito del gruppo per un contenitore con credenziali richieste.
Il contenitore esegue l'autenticazione al controller di dominio usando la password del servizio gestito del gruppo per ottenere un ticket di concessione ticket (TGT) Kerberos.
Le applicazioni in esecuzione come servizio di rete o sistema locale nel contenitore possono ora autenticare e accedere alle risorse di dominio, ad esempio l'account del servizio gestito del gruppo.
Prerequisiti
Per eseguire un contenitore Windows con un account del servizio gestito di gruppo, devi disporre di quanto segue:
- Un dominio di Active Directory con almeno un controller di dominio che esegue Windows Server 2012 o versione successiva. Per l'uso di account del servizio gestito di gruppo non sono previsti requisiti a livello funzionale di foresta o di dominio, ma le password di tali account possono essere distribuite solo da controller di dominio che eseguono Windows Server 2012 o versioni successive. Per altre informazioni, vedi Requisiti di Active Directory per gli account del servizio gestito di gruppo.
- Autorizzazione per la creazione di un account del servizio gestito di gruppo. Per creare un account del servizio gestito di gruppo, devi essere un amministratore di dominio oppure usare un account a cui è stata delegata l'autorizzazione per la creazione di oggetti msDS-GroupManagedServiceAccount.
- Accesso a Internet per scaricare il modulo CredentialSpec di PowerShell. Se stai lavorando in un ambiente disconnesso, puoi salvare il modulo in un computer con accesso a Internet e copiarlo nel computer di sviluppo o nell'host del contenitore.
Preparazione di Active Directory in un'unica operazione
Se non hai già creato un account del servizio gestito di gruppo nel dominio, dovrai generare la chiave radice del servizio di distribuzione delle chiavi (KDS). Il servizio KDS è responsabile della creazione, della rotazione e del rilascio della password dell'account del servizio gestito di gruppo negli host autorizzati. Quando un host di contenitore deve usare l'account del servizio gestito di gruppo per eseguire un contenitore, contatterà il servizio KDS per recuperare la password corrente.
Per verificare se la chiave radice del servizio KDS è già stata creata, esegui il cmdlet di PowerShell seguente come amministratore di dominio in un controller di dominio o in un membro del dominio con gli strumenti di PowerShell per AD installati:
Get-KdsRootKey
Se il comando restituisce un ID di chiave, è già tutto pronto e puoi passare alla sezione Creare un account del servizio gestito di gruppo. In caso contrario, prosegui con la creazione della chiave radice del servizio KDS.
Importante
È consigliabile creare una sola chiave radice KDS per ogni foresta. Se vengono create più chiavi radice KDS, l'account del servizio gestito del gruppo avrà esito negativo dopo la rotazione della password dell'account del servizio gestito del gruppo.
In un ambiente di produzione o di test con più controller di dominio, esegui il cmdlet seguente in PowerShell come amministratore di dominio per creare la chiave radice del servizio KDS.
# For production environments
Add-KdsRootKey -EffectiveImmediately
Anche se il comando implica che la chiave sarà immediatamente effettiva, dovrai attendere 10 ore prima che la chiave radice del servizio KDS venga replicata e sia disponibile per l'uso in tutti i controller di dominio.
Se nel dominio è presente un solo controller di dominio, puoi velocizzare il processo impostando la chiave in modo che sia efficace 10 ore prima.
Importante
Non usare questa tecnica in un ambiente di produzione.
# For single-DC test environments only
Add-KdsRootKey -EffectiveTime (Get-Date).AddHours(-10)
Creare un account del servizio gestito di gruppo
Ogni contenitore che usa l'autenticazione integrata di Windows richiede almeno un account del servizio gestito di gruppo. L'account del servizio gestito di gruppo primario viene usato ogni volta che le app in esecuzione come Sistema o Servizio di rete accedono alle risorse sulla rete. Il nome dell'account del servizio gestito di gruppo diventerà il nome del contenitore nella rete, indipendentemente dal nome host assegnato al contenitore. I contenitori possono anche essere configurati con altri account del servizio gestito di gruppo, nel caso in cui tu voglia eseguire un servizio o un'applicazione nel contenitore come identità diversa dall'account computer del contenitore.
Quando crei un account del servizio gestito di gruppo, crei anche un'identità condivisa che può essere usata contemporaneamente in più computer diversi. L'accesso alla password dell'account del servizio gestito di gruppo è protetto da un elenco di controllo di accesso di Active Directory. È consigliabile creare un gruppo di sicurezza per ogni account del servizio gestito di gruppo e aggiungere gli host di contenitore appropriati al gruppo di sicurezza per limitare l'accesso alla password.
Infine, poiché i contenitori non registrano automaticamente i nomi dell'entità servizio (SPN, Service Principal Name), sarà necessario creare manualmente almeno un SPN dell'host per l'account del servizio gestito di gruppo.
In genere, l'SPN dell'host o HTTP viene registrato con lo stesso nome dell'account del servizio gestito di gruppo, ma potrebbe essere necessario usare un nome di servizio diverso se i client accedono all'applicazione in contenitori dall'interno di un servizio di bilanciamento del carico oppure un nome DNS diverso dal nome dell'account del servizio gestito di gruppo.
Se, ad esempio, l'account del servizio gestito di gruppo è denominato "WebApp01", ma gli utenti accedono al sito in mysite.contoso.com
, devi registrare un SPN http/mysite.contoso.com
nell'account del servizio gestito di gruppo.
Alcune applicazioni possono richiedere spn aggiuntivi per i protocolli univoci. SQL Server, ad esempio, richiede l'SPN MSSQLSvc/hostname
.
La tabella seguente elenca gli attributi obbligatori per la creazione di un account del servizio gestito di gruppo.
Proprietà account del servizio gestito di gruppo | Valore obbligatorio | Esempio |
---|---|---|
Nome | Un qualsiasi nome di account valido. | WebApp01 |
DnsHostName | Il nome di dominio aggiunto al nome dell'account. | WebApp01.contoso.com |
ServicePrincipalNames | Imposta almeno l'SPN dell'host e aggiungi altri protocolli in base alle esigenze. | 'host/WebApp01', 'host/WebApp01.contoso.com' |
PrincipalsAllowedToRetrieveManagedPassword | Il gruppo di sicurezza che contiene gli host di contenitore. | WebApp01Hosts |
Dopo aver deciso il nome da assegnare all'account del servizio gestito di gruppo, esegui i cmdlet seguenti in PowerShell per creare il gruppo di sicurezza e l'account del servizio gestito di gruppo.
Suggerimento
Dovrai usare un account che appartiene al gruppo di sicurezza Domain Admins o a cui è stata delegata l'autorizzazione per la creazione di oggetti msDS-GroupManagedServiceAccount per eseguire i comandi seguenti. Il cmdlet New-ADServiceAccount fa parte degli strumenti PowerShell per AD in Strumenti di amministrazione remota del server.
È consigliabile creare account del servizio gestito del gruppo separati per gli ambienti di sviluppo, test e produzione.
Caso d'uso per la creazione di un account del servizio gestito del gruppo per gli host contenitore aggiunti a un dominio
# 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$"
Caso d'uso per la creazione di un account del servizio gestito del gruppo per host contenitore non aggiunti a un dominio
Quando si usa l'account del servizio gestito del WebApp01Hosts
gruppo per contenitori con host non aggiunti a un dominio, anziché aggiungere host contenitore al gruppo di sicurezza, creare e aggiungere un account utente standard.
# 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"
Preparare l'host del contenitore
Caso d'uso per preparare l'host contenitore per un host contenitore aggiunto a un dominio
Ogni host di contenitore che eseguirà un contenitore Windows con un account del servizio gestito di gruppo deve essere aggiunto a un dominio e avere accesso per recuperare la password di tale account.
Aggiungi il tuo computer al dominio di Active Directory.
Assicurati che l'host appartenga al gruppo di sicurezza che controlla l'accesso alla password dell'account del servizio gestito di gruppo.
Riavviare il computer per ottenere la nuova appartenenza al gruppo.
Configura Docker Desktop per Windows 10 o Docker per Windows Server.
(Consigliato) Verifica che l'host possa usare l'account del servizio gestito di gruppo eseguendo Test-ADServiceAccount. Se il comando restituisce False, segui le istruzioni per la risoluzione dei problemi.
# 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
Caso d'uso per la preparazione dell'host contenitore per un host contenitore non aggiunto a un dominio
Quando si usa gMSA per contenitori Windows in host contenitore non aggiunti a un dominio, ogni host contenitore deve avere un plug-in per ccg.exe installato che verrà usato per recuperare l'account utente portabile e le credenziali specificati nel passaggio precedente. I plug-in sono univoci per l'archivio segreto usato per proteggere le credenziali dell'account utente portabile. Ad esempio, sarebbero necessari plug-in diversi per archiviare le credenziali dell'account in Azure Key Vault rispetto a un archivio segreti Kubernetes.
Windows attualmente non offre un plug-in predefinito predefinito. Le istruzioni di installazione per i plug-in saranno specifiche dell'implementazione. Per altre informazioni sulla creazione e la registrazione di plug-in per ccg.exe, vedere Interfaccia ICcgDomainAuthCredentials.
Creare una specifica delle credenziali
Un file di specifiche delle credenziali è un documento JSON che contiene i metadati relativi a uno o più account del servizio gestito di gruppo che dovrà essere usato da un contenitore. Mantenendo la configurazione dell'identità separata dall'immagine del contenitore, è possibile modificare l'account del servizio gestito del gruppo usato dal contenitore semplicemente scambiando il file delle specifiche delle credenziali, non sono necessarie modifiche al codice.
Il file delle specifiche di credenziali viene creato usando il modulo PowerShell CredentialSpec in un computer aggiunto a un dominio. Dopo aver creato il file, è possibile copiarlo in altri host contenitore o nell'agente di orchestrazione del contenitore. Il file di specifiche delle credenziali non contiene segreti, ad esempio la password dell'account del servizio gestito di gruppo, poiché l'host del contenitore recupera tale account per conto del contenitore.
Docker si aspetta di trovare il file di specifiche delle credenziali nella directory CredentialSpecs all'interno della directory dei dati di Docker. In un'installazione predefinita questa cartella si trova in C:\ProgramData\Docker\CredentialSpecs
.
Per creare un file di specifiche delle credenziali nell'host del contenitore:
Installa gli strumenti di PowerShell per RSAT AD
- Per Windows Server, esegui Install-WindowsFeature RSAT-AD-PowerShell.
- Per Windows 10, versione 1809 o successiva, esegui Add-WindowsCapability -Online -Name 'Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0'.
- Per le versioni precedenti di Windows 10, vedi https://aka.ms/rsat.
Esegui il cmdlet seguente per installare la versione più recente del modulo CredentialSpec di PowerShell:
Install-Module CredentialSpec
Se non si ha accesso a Internet nell'host contenitore, eseguire
Save-Module CredentialSpec
in un computer connesso a Internet e copiare la cartellaC:\Program Files\WindowsPowerShell\Modules
del modulo in o in un'altra posizione nell'host$env:PSModulePath
del contenitore.Esegui il cmdlet seguente per creare il nuovo file di specifiche delle credenziali:
# Replace 'WebApp01' with your own gMSA New-CredentialSpec -AccountName WebApp01
Per impostazione predefinita, il cmdlet creerà una specifica di credenziali usando il nome dell'account del servizio gestito del gruppo fornito come account computer per il contenitore. Il file verrà salvato nella directory CredentialSpecs di Docker usando come nome file il dominio dell'account del servizio gestito di gruppo e il nome dell'account.
Se vuoi salvare il file in un'altra directory, usa il parametro
-Path
:New-CredentialSpec -AccountName WebApp01 -Path "C:\MyFolder\WebApp01_CredSpec.json"
Puoi anche creare una specifica delle credenziali che includa altri account del servizio gestito di gruppo se stai eseguendo un servizio o un processo come account del servizio gestito di gruppo secondario nel contenitore. A tale scopo, usa il parametro
-AdditionalAccounts
:New-CredentialSpec -AccountName WebApp01 -AdditionalAccounts LogAgentSvc, OtherSvc
Per un elenco completo dei parametri supportati, esegui
Get-Help New-CredentialSpec -Full
.Puoi visualizzare un elenco di tutte le specifiche delle credenziali e il relativo percorso completo con il cmdlet seguente:
Get-CredentialSpec
Di seguito è riportato un esempio di specifica delle credenziali:
{
"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"
}
]
}
}
Configurazione aggiuntiva delle specifiche di credenziali per il caso d'uso dell'host contenitore non aggiunto a un dominio
Quando si usa l'account del servizio gestito del gruppo con host contenitore non aggiunti a un dominio, è necessario aggiungere informazioni sul plug-in ccg.exe che verrà usato alla specifica delle credenziali. Verrà aggiunto a una sezione della specifica delle credenziali denominata HostAccountConfig. La sezione HostAccountConfig include tre campi che devono essere popolati:
- PortableCcgVersion: deve essere impostato su "1".
- PluginGUID: CLSID COM per il plug-in ccg.exe. Questo è univoco per il plug-in utilizzato.
- PluginInput: input specifico del plug-in per recuperare le informazioni sull'account utente dall'archivio segreti.
Questo è un esempio di specifica delle credenziali con la sezione HostAccountConfig aggiunta:
{
"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>"
}
}
}
Passaggi successivi
Ora che hai configurato l'account del servizio gestito di gruppo, puoi usarlo per:
Per le soluzioni possibili, in caso di problemi durante l'installazione, consulta la guida alla risoluzione dei problemi.
Risorse aggiuntive
- Per altre informazioni sugli account del servizio gestito di gruppo, vedi la pagina relativa alla panoramica degli account del servizio gestito di gruppo.