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.

Diagram of group Managed Service Accounts version two

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:

  1. Usando un file CredSpec come input, il processo di ccg.exe viene avviato nell'host del nodo.

  2. 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.

  3. ccg.exe usa le credenziali dell'account recuperato per recuperare la password dell'account del servizio gestito del gruppo da AD.

  4. ccg.exe rende disponibile la password del servizio gestito del gruppo per un contenitore con credenziali richieste.

  5. 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.

  6. 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.

    Diagram of the ccg.exe process

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.

  1. Aggiungi il tuo computer al dominio di Active Directory.

  2. Assicurati che l'host appartenga al gruppo di sicurezza che controlla l'accesso alla password dell'account del servizio gestito di gruppo.

  3. Riavviare il computer per ottenere la nuova appartenenza al gruppo.

  4. Configura Docker Desktop per Windows 10 o Docker per Windows Server.

  5. (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:

  1. 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.
  2. 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 cartella C:\Program Files\WindowsPowerShell\Modules del modulo in o in un'altra posizione nell'host $env:PSModulePath del contenitore.

  3. 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.

  4. 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