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 questo scopo, è possibile configurare un contenitore Windows da eseguire con un account del servizio gestito di gruppo , ovvero 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. Windows contenitori non possono essere aggiunti al dominio, ma molte applicazioni Windows eseguite nei contenitori Windows richiedono ancora l'autenticazione di ACTIVE Directory. Per usare l'autenticazione di ACTIVE Directory, è possibile configurare un contenitore Windows da eseguire con un account del servizio gestito di gruppo (gMSA).

Quando gMSA per i contenitori di Windows è stato inizialmente introdotto, è necessario che l'host del contenitore sia aggiunto a un dominio, che ha creato un sovraccarico elevato per gli utenti per aggiungere manualmente i nodi di lavoro Windows a un dominio. Questa limitazione è stata risolta con gMSA per i contenitori di Windows supporto per gli host contenitori non aggiunti a un dominio. Continuerà a supportare la funzionalità gMSA originale per l'uso di un host contenitore aggiunto al dominio.

I miglioramenti apportati a gMSA quando si usa un host contenitore non aggiunto a un dominio includono:

  • Il requisito di aggiungere manualmente Windows nodi di lavoro a un dominio viene eliminato perché ha causato un sovraccarico elevato 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ù ricongiuntire 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 di gMSA con Kubernetes è un processo end-to-end meno complicato.

Nota

Per informazioni su come la community kubernetes supporta l'uso di gMSA con contenitori Windows, vedere configurazione di gMSA.

Architettura e miglioramenti di gMSA

Per risolvere le limitazioni dell'implementazione iniziale di gMSA per i contenitori di Windows, il nuovo supporto gMSA per gli host contenitori non aggiunti a un dominio usa un'identità utente portabile anziché un account computer host per recuperare le credenziali gMSA. Pertanto, l'aggiunta manuale Windows nodi di lavoro a un dominio non è più necessaria, anche se è ancora supportata. L'identità utente o 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à di creazione di contenitori con gMSA 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 gMSA da Active Directory. È possibile usare tale identità per avviare il contenitore. Per altre informazioni su questo meccanismo 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 gMSA. Per altre informazioni, vedere Configurare l'account del servizio gestito del gruppo con servizio Azure Stack HCI.

Visualizzare il diagramma seguente per seguire i passaggi del processo 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 recuperate per recuperare la password gMSA da AD.

  4. ccg.exe rende disponibile la password gMSA a un contenitore con credenziali richieste.

  5. Il contenitore esegue l'autenticazione al controller di dominio usando la password gMSA per ottenere un ticket di Ticket-Granting Kerberos (TGT).

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

    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, il gMSA avrà esito negativo dopo la rotazione della password gMSA.

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 loro 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 gMSA separati per gli ambienti di sviluppo, test e produzione.

Caso d'uso per la creazione di un account gMSA per gli host contenitore aggiunti al 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 gMSA per gli host di contenitori non aggiunti a un dominio

Quando si usa gMSA per i contenitori con host non aggiunti a un dominio, anziché aggiungere host contenitore al WebApp01Hosts 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 del 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 preparare l'host contenitore per un host contenitore non aggiunto a un dominio

Quando si usa gMSA per Windows contenitori in host contenitori 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 portatile 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, sono necessari plug-in diversi per archiviare le credenziali dell'account in Azure Key Vault rispetto a un archivio segreto Kubernetes.

Windows attualmente non offre un plug-in predefinito. Le istruzioni di installazione per i plug-in saranno specifiche dell'implementazione. Per altre informazioni sulla creazione e la registrazione dei 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 separata la configurazione dell'identità dall'immagine del contenitore, è possibile modificare quale gMSA usa semplicemente scambiando il file di specifiche delle credenziali, non sono necessarie modifiche al codice.

Il file di specifiche delle credenziali viene creato usando il modulo PowerShell CredentialSpec in un computer aggiunto al dominio. Dopo aver creato il file, è possibile copiarlo in altri host del 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 dispone dell'accesso a Internet nell'host del 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 altro percorso 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 delle credenziali usando il nome gMSA specificato 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
    

Questo è un esempio di una 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 delle credenziali per il caso d'uso dell'host contenitore non aggiunto a un dominio

Quando si usa gMSA con host contenitori non aggiunti a un dominio, è necessario aggiungere informazioni sul plug-in ccg.exe che verrà usato per la 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".
  • Plug-inGUID: CLSID COM per il plug-in ccg.exe. Questo è univoco per il plug-in usato.
  • PlugInput: input specifico del plug-in per recuperare le informazioni sull'account utente dall'archivio segreto.

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:

In caso di problemi durante la configurazione, consulta la guida alla risoluzione dei problemi per le possibili soluzioni.

Risorse aggiuntive