Azure Functions 및 App Service 하이브리드 연결을 사용하여 PowerShell에서 하이브리드 환경 관리

Azure App Service 하이브리드 연결 기능을 사용하여 다른 네트워크의 리소스에 액세스할 수 있습니다. 하이브리드 연결 설명서에서 이 기능에 대한 자세한 내용을 알아볼 수 있습니다. 이 문서에서는 이 기능을 사용하여 온-프레미스 서버를 대상으로 PowerShell 함수를 실행하는 방법을 설명합니다. 그러면 이 서버를 사용하여 Azure PowerShell 함수를 통해 온-프레미스 환경의 모든 리소스를 관리할 수 있습니다.

PowerShell 원격 기능을 위한 온-프레미스 서버 구성

다음 스크립트는 PowerShell 원격 기능을 사용하도록 설정하고 새 방화벽 규칙과 WinRM https 수신기를 만듭니다. 테스트를 위해 자체 서명된 인증서가 사용됩니다. 프로덕션 환경에서는 서명된 인증서를 사용하는 것이 좋습니다.

# For configuration of WinRM, see
# https://learn.microsoft.com/windows/win32/winrm/installation-and-configuration-for-windows-remote-management.

# Enable PowerShell remoting.
Enable-PSRemoting -Force

# Create firewall rule for WinRM. The default HTTPS port is 5986.
New-NetFirewallRule -Name "WinRM HTTPS" `
                    -DisplayName "WinRM HTTPS" `
                    -Enabled True `
                    -Profile "Any" `
                    -Action "Allow" `
                    -Direction "Inbound" `
                    -LocalPort 5986 `
                    -Protocol "TCP"

# Create new self-signed-certificate to be used by WinRM.
$Thumbprint = (New-SelfSignedCertificate -DnsName $env:COMPUTERNAME  -CertStoreLocation Cert:\LocalMachine\My).Thumbprint

# Create WinRM HTTPS listener.
$Cmd = "winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=""$env:COMPUTERNAME ""; CertificateThumbprint=""$Thumbprint""}"
cmd.exe /C $Cmd

Portal에서 PowerShell 함수 앱 만들기

App Service 하이브리드 연결 기능은 기본, 표준, 별도 가격 책정 플랜에서만 사용할 수 있습니다. PowerShell을 사용하여 함수 앱을 만들 때 해당 플랜 중 하나를 만들거나 선택합니다.

  1. Azure Portal 메뉴 또는 페이지에서 리소스 만들기를 선택합니다.

  2. 새로 만들기 페이지에서 컴퓨팅>함수 앱을 선택합니다.

  3. 기본 사항 페이지에서 함수 앱 설정을 다음 표에서 지정한 대로 사용합니다.

    설정 제안 값 설명
    구독 구독 이 새 함수 앱이 만들어질 구독입니다.
    리소스 그룹 myResourceGroup 함수 앱을 만들 새 리소스 그룹의 이름입니다.
    함수 앱 이름 전역적으로 고유한 이름 새 함수 앱을 식별하는 이름입니다. 유효한 문자는 a-z(대/소문자 구분 안 함), 0-9-입니다.
    게시 코드 코드 파일 또는 Docker 컨테이너를 게시하는 옵션입니다.
    런타임 스택 기본 언어 PowerShell Core를 선택합니다.
    버전 버전 번호 설치된 런타임의 버전을 선택합니다.
    지역 기본 지역 여러분과 가까운 또는 함수가 액세스하는 다른 서비스와 가까운 지역을 선택합니다.

    Create a function app - Basics.

  4. 다음: 호스팅을 선택합니다. 호스팅 페이지에서 다음 설정을 입력합니다.

    설정 제안 값 설명
    스토리지 계정 전역적으로 고유한 이름 함수 앱에서 사용하는 스토리지 계정을 만듭니다. 스토리지 계정 이름은 3자에서 24자 사이여야 하고 숫자와 소문자만 포함할 수 있습니다. 기존 계정을 사용할 수도 있습니다. 여기서는 스토리지 계정 요구 사항을 충족해야 합니다.
    운영 체제 기본 설정 운영 체제 운영 체제는 런타임 스택 선택에 따라 미리 선택되지만 필요한 경우 설정을 변경할 수 있습니다.
    플랜 유형 App Service 요금제: App Service 요금제를 선택합니다. App Service 계획에서 실행하는 경우 함수 앱의 크기 조정을 관리해야 합니다.

    Create a function app - Hosting.

  5. 다음: 모니터링을 선택합니다. 모니터링 페이지에서 다음 설정을 입력합니다.

    설정 제안 값 설명
    Application Insights 기본값 가장 가까운 지원 영역에 동일한 앱 이름의 Application Insight 리소스를 만듭니다. 이 설정을 확장하거나 새로 만들기를 선택하면 Application Insights 이름을 변경하거나 데이터를 저장하려는 Azure 지리적 위치에서 다른 지역을 선택할 수 있습니다.

    Create a function app - Monitoring.

  6. 검토 + 만들기를 선택하여 앱 구성 선택을 검토합니다.

  7. 검토 + 만들기 페이지에서 설정을 검토한 다음, 만들기를 선택하여 함수 앱을 프로비저닝하고 배포합니다.

  8. 포털의 오른쪽 위 모서리에 있는 알림 아이콘을 선택하고 배포 성공 메시지를 확인합니다.

  9. 리소스로 이동을 선택하여 함수 앱을 봅니다. 대시보드에 고정을 선택할 수도 있습니다. 고정하면 대시보드에서 이 함수 앱 리소스로 쉽게 돌아올 수 있습니다.

함수 앱에 대한 하이브리드 연결 만들기

하이브리드 연결은 함수 앱의 네트워킹 섹션에서 구성됩니다.

  1. 방금 만든 함수 앱의 설정에서 네트워킹을 선택합니다.

  2. 하이브리드 연결 엔드포인트 구성을 선택합니다.

    Configure the hybrid connection endpoints.

  3. 하이브리드 연결 추가를 선택합니다.

    Add a hybrid connection.

  4. 다음 스크린샷이 나오면 하이브리드 연결에 대한 정보를 입력합니다. 엔드포인트 호스트의 경우 자체 서명된 인증서를 만든 온-프레미스 서버의 호스트 이름을 사용합니다. 온-프레미스 서버의 인증서 이름과 호스트 이름이 일치하지 않으면 연결 문제가 발생합니다. 포트는 이전에 서버에 정의된 기본 Windows 원격 관리 서비스 포트와 일치합니다.

    Add hybrid connection.

    설정 제안 값
    하이브리드 연결 이름 ContosoHybridOnPremisesServer
    엔드포인트 호스트 finance1
    엔드포인트 포트 5986
    Servicebus 네임스페이스 새로 만들기
    위치 사용 가능한 위치 선택
    이름 contosopowershellhybrid
  5. 확인을 선택하여 하이브리드 연결을 만듭니다.

하이브리드 연결 다운로드 및 설치

  1. 연결 관리자 다운로드를 선택하여 .msi 파일을 컴퓨터에 로컬로 저장합니다.

    Download the installer.

  2. 로컬 컴퓨터의 .msi 파일을 온-프레미스 서버에 복사합니다.

  3. 하이브리드 연결 관리자 설치 프로그램을 실행하여 온-프레미스 서버에 서비스를 설치합니다.

    Install the hybrid connection.

  4. 포털에서 하이브리드 연결을 연 다음, 게이트웨이 연결 문자열을 클립보드에 복사합니다.

    Copy the hybrid connection string.

  5. 온-프레미스 서버에서 하이브리드 연결 관리자 UI를 엽니다.

    Open the Hybrid Connection UI.

  6. 수동으로 입력을 선택하고 연결 문자열을 클립보드에 붙여넣습니다.

    Paste the hybrid connection.

  7. 연결된 것으로 표시되지 않는 경우 PowerShell에서 하이브리드 연결 관리자를 다시 시작합니다.

    Restart-Service HybridConnectionManager
    

관리자 계정 암호를 위한 앱 설정 만들기

  1. 함수 앱의 설정에서 구성을 선택합니다.

  2. + 새 애플리케이션 설정을 선택합니다.

    Configure a password for the administrator account.

  3. 설정 이름을 ContosoUserPassword로 지정하고 암호를 입력합니다. 확인을 선택합니다.

  4. 저장을 선택하여 함수 애플리케이션에 암호를 저장합니다.

    Save the password for the administrator account.

함수 HTTP 트리거 만들기

  1. 함수 앱에서 함수를 선택한 다음, + 추가를 선택합니다.

    Create new HTTP trigger.

  2. HTTP 트리거 템플릿을 선택합니다.

    Select the HTTP trigger template.

  3. 새 함수의 이름을 지정하고 함수 만들기를 선택합니다.

    Name and create the new HTTP trigger function.

함수 테스트

  1. 새 함수에서 코드 + 테스트를 선택합니다. 템플릿의 PowerShell 코드를 다음 코드로 대체합니다.

    # Input bindings are passed in via param block.
    param($Request, $TriggerMetadata)
    
    # Write to the Azure Functions log stream.
    Write-Output "PowerShell HTTP trigger function processed a request."
    
    # Note that ContosoUserPassword is a function app setting, so I can access it as $env:ContosoUserPassword.
    $UserName = "ContosoUser"
    $securedPassword = ConvertTo-SecureString  $Env:ContosoUserPassword -AsPlainText -Force
    $Credential = [System.management.automation.pscredential]::new($UserName, $SecuredPassword)
    
    # This is the name of the hybrid connection Endpoint.
    $HybridEndpoint = "finance1"
    
    $Script = {
        Param(
            [Parameter(Mandatory=$True)]
            [String] $Service
        )
        Get-Service $Service
    }
    
    Write-Output "Scenario 1: Running command via Invoke-Command"
    Invoke-Command -ComputerName $HybridEndpoint `
                   -Credential $Credential `
                   -Port 5986 `
                   -UseSSL `
                   -ScriptBlock $Script `
                   -ArgumentList "*" `
                   -SessionOption (New-PSSessionOption -SkipCACheck)
    
  2. 저장을 선택합니다.

    Change the PowerShell code and save the HTTP trigger function.

  3. 테스트를 선택한 다음, 실행을 선택하여 함수를 테스트합니다. 로그를 검토하여 테스트가 성공했는지 확인합니다.

    Test HTTP trigger function.

온-프레미스에서 다른 시스템 관리

연결된 온-프레미스 서버를 사용하여 로컬 환경의 다른 서버와 관리 시스템에 연결할 수 있습니다. 이렇게 하면 PowerShell 함수를 사용하여 Azure에서 데이터 센터 작업을 관리할 수 있습니다. 다음 스크립트는 제공된 자격 증명으로 실행되는 PowerShell 구성 세션을 등록합니다. 이러한 자격 증명은 원격 서버의 관리자에 대한 자격 증명이어야 합니다. 그러면 이 구성을 사용하여 로컬 서버 또는 데이터 센터의 다른 엔드포인트에 액세스할 수 있습니다.

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Note that ContosoUserPassword is a function app setting, so I can access it as $env:ContosoUserPassword.
$UserName = "ContosoUser"
$SecuredPassword = ConvertTo-SecureString  $Env:ContosoUserPassword -AsPlainText -Force
$Credential = [System.management.automation.pscredential]::new($UserName, $SecuredPassword)

# This is the name of the hybrid connection Endpoint.
$HybridEndpoint = "finance1"

# The remote server that will be connected to run remote PowerShell commands on
$RemoteServer = "finance2".

Write-Output "Use hybrid connection server as a jump box to connect to a remote machine"

# We are registering an endpoint that runs under credentials ($Credential) that has access to the remote server.
$SessionName = "HybridSession"
$ScriptCommand = {
    param (
        [Parameter(Mandatory=$True)]
        $SessionName)

    if (-not (Get-PSSessionConfiguration -Name $SessionName -ErrorAction SilentlyContinue))
    {
        Register-PSSessionConfiguration -Name $SessionName -RunAsCredential $Using:Credential
    }
}

Write-Output "Registering session on hybrid connection jumpbox"
Invoke-Command -ComputerName $HybridEndpoint `
               -Credential $Credential `
               -Port 5986 `
               -UseSSL `
               -ScriptBlock $ScriptCommand `
               -ArgumentList $SessionName `
               -SessionOption (New-PSSessionOption -SkipCACheck)

# Script to run on the jump box to run against the second machine.
$RemoteScriptCommand = {
    param (
        [Parameter(Mandatory=$True)]
        $ComputerName)
        # Write out the hostname of the hybrid connection server.
        hostname
        # Write out the hostname of the remote server.
        Invoke-Command -ComputerName $ComputerName -Credential $Using:Credential -ScriptBlock {hostname} `
                        -UseSSL -Port 5986 -SessionOption (New-PSSessionOption -SkipCACheck)
}

Write-Output "Running command against remote machine via jumpbox by connecting to the PowerShell configuration session"
Invoke-Command -ComputerName $HybridEndpoint `
               -Credential $Credential `
               -Port 5986 `
               -UseSSL `
               -ScriptBlock $RemoteScriptCommand `
               -ArgumentList $RemoteServer `
               -SessionOption (New-PSSessionOption -SkipCACheck) `
               -ConfigurationName $SessionName

이 스크립트의 다음 변수를 사용자 환경에서 적용 가능한 값으로 대체합니다.

  • $HybridEndpoint
  • $RemoteServer

위의 두 시나리오에서는 Azure Functions 및 하이브리드 연결을 통해 PowerShell을 사용하여 온-프레미스 환경을 연결하고 관리할 수 있습니다. 하이브리드 연결PowerShell 함수 사용에 대해 자세히 알아보는 것이 좋습니다.

Azure Functions를 통해 Azure 가상 네트워크를 사용하여 온-프레미스 환경에 연결할 수도 있습니다.

다음 단계