Creación de un script de instalación desatendido para el conector de red privada de Microsoft Entra
Este artículo le ayuda a crear un script de Windows PowerShell que habilita la instalación desatendida y el registro del conector de red privada de Microsoft Entra.
La instalación desatendida es útil cuando se desea:
- Instale el conector en los servidores de Windows que no tienen interfaz de usuario habilitada o a los que no puede acceder con Escritorio remoto.
- Instalar y registrar muchos conectores a la vez.
- Integrar la instalación del conector y el registro como parte de otro procedimiento.
- Crear una imagen de servidor estándar que contenga los bits de conector, pero que no esté registrada.
Para que el conector de red privada funcione, debe registrarlo con Microsoft Entra ID. El registro se realiza en la interfaz de usuario al instalar el conector, pero se puede usar PowerShell para automatizar el proceso.
Hay dos pasos para una instalación desatendida. Primero, instale el conector. En segundo lugar, registre el conector con Microsoft Entra ID.
Importante
Si va a instalar el conector para la nube de Azure Government, consulte los requisitos previos y los pasos de la instalación. Para que se ejecute la instalación, la nube de Azure Government requiere que se habilite el acceso a un conjunto diferente de direcciones URL y un parámetro adicional.
Instalación del conector
Siga estos pasos para instalar el conector sin registrarlo:
Abra un símbolo del sistema.
Ejecute el siguiente comando, en el que la marca
/q
significa que la instalación es desatendida. Una instalación desatendida no le pide que acepte el contrato de licencia para el usuario final.MicrosoftEntraPrivateNetworkConnectorInstaller.exe REGISTERCONNECTOR="false" /q
Registro del conector con Microsoft Entra ID
Registrar el conector mediante un token creado sin conexión.
Registro del conector mediante un token creado sin conexión
Cree un token sin conexión mediante la clase
AuthenticationContext
con los valores de este fragmento de código o los cmdlets de PowerShell:Con 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; } }
Con 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." }
Una vez que tenga el token, utilice el token para crear una clase
SecureString
:$SecureToken = $Token | ConvertTo-SecureString -AsPlainText -Force
Ejecute el siguiente comando de Windows PowerShell, reemplazando
<tenant GUID>
por su identificador de directorio:.\RegisterConnector.ps1 -modulePath "C:\Program Files\Microsoft Entra private network connector\Modules\" -moduleName "MicrosoftEntraPrivateNetworkConnectorPSModule" -Authenticationmode Token -Token $SecureToken -TenantId <tenant GUID> -Feature ApplicationProxy
Almacene el script o el código en una ubicación segura, ya que contiene información confidencial de credenciales.