Vytvoření bezobslužného instalačního skriptu pro konektor privátní sítě Microsoft Entra

Tento článek vám pomůže vytvořit skript Windows PowerShellu, který umožňuje bezobslužnou instalaci a registraci pro váš privátní síťový konektor Microsoft Entra.

Bezobslužná instalace je užitečná v následujících případech:

  • Nainstalujte konektor na servery s Windows, které nemají povolené uživatelské rozhraní nebo ke kterým nemáte přístup přes Vzdálenou plochu.
  • Nainstalujte a zaregistrujte mnoho konektorů najednou.
  • Integrujte instalaci a registraci konektoru jako součást jiného postupu.
  • Vytvořte standardní image serveru, která obsahuje bity konektoru, ale není zaregistrovaná.

Aby konektor privátní sítě fungoval, musíte ho zaregistrovat v Microsoft Entra ID. Registrace se provádí v uživatelském rozhraní při instalaci konektoru, ale k automatizaci procesu můžete použít PowerShell.

Pro bezobslužnou instalaci existují dva kroky. Nejprve nainstalujte konektor. Za druhé zaregistrujte konektor pomocí Microsoft Entra ID.

Důležité

Pokud instalujete konektor pro cloud Microsoft Azure Government, projděte si požadavky a kroky instalace. Cloud Microsoft Azure Government vyžaduje povolení přístupu k jiné sadě adres URL a další parametr pro spuštění instalace.

Instalace konektoru

Pomocí následujících kroků nainstalujte konektor bez registrace:

  1. Otevřete příkazový řádek.

  2. Spusťte následující příkaz, příznak znamená tichou /q instalaci. Tichou instalaci se nezobrazí výzva k přijetí licenční smlouvy s koncovým uživatelem.

    MicrosoftEntraPrivateNetworkConnectorInstaller.exe REGISTERCONNECTOR="false" /q
    

Registrace konektoru pomocí Microsoft Entra ID

Zaregistrujte konektor pomocí tokenu vytvořeného offline.

Registrace konektoru pomocí tokenu vytvořeného offline

  1. Vytvořte offline token pomocí AuthenticationContext třídy pomocí hodnot v tomto fragmentu kódu nebo rutin PowerShellu:

    Pomocí jazyka 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;
       }
    }
    

    Pomocí PowerShellu:

    # 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."
    
    } 
    
  2. Jakmile token máte, vytvořte SecureString pomocí tokenu:

    $SecureToken = $Token | ConvertTo-SecureString -AsPlainText -Force
    
  3. Spusťte následující příkaz Windows PowerShellu a nahraďte <tenant GUID> ho ID adresáře:

    .\RegisterConnector.ps1 -modulePath "C:\Program Files\Microsoft Entra private network connector\Modules\" -moduleName "MicrosoftEntraPrivateNetworkConnectorPSModule" -Authenticationmode Token -Token $SecureToken -TenantId <tenant GUID> -Feature ApplicationProxy
    
  4. Uložte skript nebo kód do zabezpečeného umístění, protože obsahuje citlivé informace o přihlašovacích údajích.

Další kroky