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
Hay dos métodos posibles para registrar el conector:
- Registrar el conector mediante un objeto credencial de Windows PowerShell.
- Registrar el conector mediante un token creado sin conexión.
Registro del conector mediante un objeto de credenciales de Windows PowerShell
Cree un objeto de credenciales de Windows PowerShell
$cred
que contiene un nombre de usuario y una contraseña administrativos para el directorio. Ejecute el comando siguiente, pero reemplace<username>
,<password>
y<tenantid>
:$User = "<username>" $PlainPassword = '<password>' $TenantId = '<tenantid>' $SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force $cred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User, $SecurePassword
Vaya a
C:\Program Files\Microsoft Entra private network connector
y ejecute el siguiente script mediante el objeto$cred
que creó:.\RegisterConnector.ps1 -modulePath "C:\Program Files\Microsoft Entra private network connector\Modules\" -moduleName "MicrosoftEntraPrivateNetworkConnectorPSModule" -Authenticationmode Credentials -Usercredentials $cred -Feature ApplicationProxy -TenantId $TenantId
El script contiene información confidencial de credenciales. Almacene el script en una ubicación segura.
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:
# 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." }
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.