Creare uno script di installazione automatica per il connettore di rete privata Microsoft Entra

Questo articolo illustra come creare uno script di Windows PowerShell che consente l'installazione automatica e la registrazione per il connettore di rete privata Microsoft Entra.

L'installazione automatica è utile quando si vuole:

  • Installare il connettore in istanze di Windows Server che non hanno un'interfaccia utente abilitata o che non sono accessibili con Desktop remoto.
  • Installare e registrare più connettori in una sola volta.
  • Integrare l'installazione e la registrazione del connettore come parte di un'altra procedura.
  • Creare un'immagine server standard che contiene i bit del connettore, ma non è registrata.

Affinché il connettore di rete privata funzioni, è necessario registrarlo con Microsoft Entra ID. La registrazione viene eseguita nell'interfaccia utente quando si installa il connettore, ma è possibile usare PowerShell per automatizzare il processo.

Per l'installazione automatica sono previsti due passaggi. In primo luogo, installare il connettore. In secondo luogo, registrare il connettore con Microsoft Entra ID.

Importante

Se si installa il connettore per microsoft Azure per enti pubblici cloud, esaminare i prerequisiti e i passaggi di installazione. Microsoft Azure per enti pubblici cloud richiede l'abilitazione dell'accesso a un set diverso di URL e un parametro aggiuntivo per eseguire l'installazione.

Installare il connettore

Per installare il connettore senza registrazione, seguire questa procedura:

  1. Apri un prompt dei comandi.

  2. Eseguire il comando seguente, il flag indica l'installazione /q non interattiva. Durante un'installazione di questo tipo non viene chiesto di accettare il contratto di licenza con l'utente finale.

    MicrosoftEntraPrivateNetworkConnectorInstaller.exe REGISTERCONNECTOR="false" /q
    

Registrare il connettore con Microsoft Entra ID

Esistono due metodi da usare per registrare il connettore:

  • Registrare il connettore usando un oggetto credenziali di Windows PowerShell.
  • Registrare il connettore usando un token creato offline.

Registrare il connettore con un oggetto credenziali di Windows PowerShell

  1. Creare un oggetto credenziali di Windows PowerShell $cred che contiene un nome utente e una password di amministratore per la directory. Eseguire il comando seguente, sostituendo <username>, <password>e <tenantid>:

    $User = "<username>"
    $PlainPassword = '<password>'
    $TenantId = '<tenantid>'
    $SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force
    $cred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User, $SecurePassword
    
  2. Passare a C:\Program Files\Microsoft Entra private network connector ed eseguire lo script seguente usando l'oggetto $cred creato:

    .\RegisterConnector.ps1 -modulePath "C:\Program Files\Microsoft Entra private network connector\Modules\" -moduleName "MicrosoftEntraPrivateNetworkConnectorPSModule" -Authenticationmode Credentials -Usercredentials $cred -Feature ApplicationProxy -TenantId $TenantId
    
  3. Lo script contiene informazioni riservate sulle credenziali. Archiviare lo script in una posizione sicura.

Registrare il connettore con un token creato offline

  1. Creare un token offline usando la AuthenticationContext classe usando i valori in questo frammento di codice o cmdlet di PowerShell:

    Tramite C#:

    using System;
    using System.Linq;
    using System.Collections.Generic;
    using Microsoft.Identity.Client;
    
    class Program
    {
       #region constants
       /// <summary>
       /// The AAD authentication endpoint uri
       /// </summary>
       static readonly string AadAuthenticationEndpoint = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
    
       /// <summary>
       /// The application ID of the connector in AAD
       /// </summary>
       static readonly string ConnectorAppId = "55747057-9b5d-4bd4-b387-abf52a8bd489";
    
       /// <summary>
       /// The AppIdUri of the registration service in AAD
       /// </summary>
       static readonly string RegistrationServiceAppIdUri = "https://proxy.cloudwebappproxy.net/registerapp/user_impersonation";
    
       #endregion
    
       #region private members
       private string token;
       private string tenantID;
       #endregion
    
       public void GetAuthenticationToken()
       {
          IPublicClientApplication clientApp = PublicClientApplicationBuilder
             .Create(ConnectorAppId)
             .WithDefaultRedirectUri() // will automatically use the default Uri for native app
             .WithAuthority(AadAuthenticationEndpoint)
             .Build();
    
          AuthenticationResult authResult = null;
    
          IAccount account = null;
    
          IEnumerable<string> scopes = new string[] { RegistrationServiceAppIdUri };
    
          try
          {
          authResult = await clientApp.AcquireTokenSilent(scopes, account).ExecuteAsync();
          }
          catch (MsalUiRequiredException ex)
          {
          authResult = await clientApp.AcquireTokenInteractive(scopes).ExecuteAsync();
          }
    
          if (authResult == null || string.IsNullOrEmpty(authResult.AccessToken) || string.IsNullOrEmpty(authResult.TenantId))
          {
          Trace.TraceError("Authentication result, token or tenant id returned are null");
          throw new InvalidOperationException("Authentication result, token or tenant id returned are null");
          }
    
          token = authResult.AccessToken;
          tenantID = authResult.TenantId;
       }
    }
    

    Tramite PowerShell:

    # Load MSAL (Tested with version 4.7.1) 
    
    Add-Type -Path "..\MSAL\Microsoft.Identity.Client.dll"
    
    # The AAD authentication endpoint uri
    
    $authority = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize"
    
    #The application ID of the connector in AAD
    
    $connectorAppId = "55747057-9b5d-4bd4-b387-abf52a8bd489";
    
    #The AppIdUri of the registration service in AAD
    $registrationServiceAppIdUri = "https://proxy.cloudwebappproxy.net/registerapp/user_impersonation"
    
    # Define the resources and scopes you want to call
    
    $scopes = New-Object System.Collections.ObjectModel.Collection["string"] 
    
    $scopes.Add($registrationServiceAppIdUri)
    
    $app = [Microsoft.Identity.Client.PublicClientApplicationBuilder]::Create($connectorAppId).WithAuthority($authority).WithDefaultRedirectUri().Build()
    
    [Microsoft.Identity.Client.IAccount] $account = $null
    
    # Acquiring the token
    
    $authResult = $null
    
    $authResult = $app.AcquireTokenInteractive($scopes).WithAccount($account).ExecuteAsync().ConfigureAwait($false).GetAwaiter().GetResult()
    
    # Check AuthN result
    If (($authResult) -and ($authResult.AccessToken) -and ($authResult.TenantId)) {
    
       $token = $authResult.AccessToken
       $tenantId = $authResult.TenantId
    
       Write-Output "Success: Authentication result returned."
    }
    Else {
    
       Write-Output "Error: Authentication result, token or tenant id returned with null."
    
    } 
    
  2. Dopo aver ottenuto il token, creare un SecureString usando il token :

    $SecureToken = $Token | ConvertTo-SecureString -AsPlainText -Force
    
  3. Eseguire il comando di Windows PowerShell seguente, sostituendo <tenant GUID> con l'ID directory:

    .\RegisterConnector.ps1 -modulePath "C:\Program Files\Microsoft Entra private network connector\Modules\" -moduleName "MicrosoftEntraPrivateNetworkConnectorPSModule" -Authenticationmode Token -Token $SecureToken -TenantId <tenant GUID> -Feature ApplicationProxy
    
  4. Archiviare lo script o il codice in una posizione sicura perché contiene informazioni riservate sulle credenziali.

Passaggi successivi