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 del 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 che 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 il cloud di Microsoft Azure per enti pubblici, rivedere i prerequisiti e i passaggi di installazione. Il cloud di Microsoft Azure per enti pubblici 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:
Apri un prompt dei comandi.
Eseguire il comando seguente, il contrassegno
/q
indica un'installazione senza intervento dell'utente. 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
Registrare il connettore utilizzando un token creato offline.
Registrare il connettore con un token creato offline
Creare un token offline usando la classe
AuthenticationContext
e 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:
# Loading DLLs Find-PackageProvider -Name NuGet| Install-PackageProvider -Force Register-PackageSource -Name nuget.org -Location https://www.nuget.org/api/v2 -ProviderName NuGet Install-Package Microsoft.IdentityModel.Abstractions -ProviderName Nuget -RequiredVersion 6.22.0.0 Install-Module Microsoft.Identity.Client add-type -path "C:\Program Files\PackageManagement\NuGet\Packages\Microsoft.IdentityModel.Abstractions.6.22.0\lib\net461\Microsoft.IdentityModel.Abstractions.dll" add-type -path "C:\Program Files\WindowsPowerShell\Modules\Microsoft.Identity.Client\4.53.0\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." }
Dopo aver ottenuto il token, creare
SecureString
usando il token:$SecureToken = $Token | ConvertTo-SecureString -AsPlainText -Force
Eseguire il comando 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
Archiviare lo script o il codice in un luogo sicuro perché contiene informazioni riservate sulle credenziali.