다음을 통해 공유


실행 명령을 사용하여 서버를 원격으로 안전하게 구성(미리 보기)

Azure Arc 지원 서버의 실행 명령(공개 미리 보기)은 연결된 컴퓨터 에이전트를 사용하여 서버 내에서 원격으로 안전하게 스크립트를 실행할 수 있도록 해줍니다. 이는 문제 해결, 복구, 진단 및 유지 관리 전반에 걸쳐 수많은 시나리오에 유용할 수 있습니다.

지원되는 환경 및 구성

  • 환경: 실행 명령은 현재 Azure CLI 및 PowerShell을 통해 지원됩니다.

  • 운영 체제: 실행 명령은 Windows 및 Linux 운영 체제를 모두 지원합니다.

  • 환경: 실행 명령은 온-프레미스, VMware, SCVMM, AWS, GCP 및 OCI를 비롯한 비 Azure 환경을 지원합니다.

  • 비용: 실행 명령은 무료이지만 Azure의 스크립트 스토리지에는 요금이 부과될 수 있습니다.

  • 구성: 실행 명령에는 추가 구성이나 확장 배포가 필요하지 않습니다. Connected Machine 에이전트 버전은 1.33 이상이어야 합니다.

RBAC를 사용하여 실행 명령에 대한 액세스 제한

실행 명령을 나열하거나 명령의 세부 정보를 표시하려면 Microsoft.HybridCompute/machines/runCommands/read 권한이 필요합니다. 기본 제공 Reader 역할 및 상위 수준에 이 권한이 있습니다.

명령을 실행하려면 Microsoft.HybridCompute/machines/runCommands/write 권한이 필요합니다. Azure Connected Machine 리소스 관리자 역할 및 상위 수준에는 이 권한이 있습니다.

기본 제공 역할 중 하나를 사용하거나 사용자 지정 역할을 생성하여 실행 명령을 사용할 수 있습니다.

로컬로 실행 명령 차단

Connected Machine 에이전트는 허용 목록 또는 차단 목록을 설정할 수 있는 로컬 구성을 지원합니다. 자세한 내용은 확장 허용 목록 및 차단 목록을 참조하세요.

Windows의 경우:

azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"

Linux의 경우:

azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"

Azure CLI

다음 예제에서는 az connectedmachine run-command를 사용하여 Azure Windows 컴퓨터에서 셸 스크립트를 실행합니다.

컴퓨터를 사용하여 스크립트 실행

이 명령은 스크립트를 컴퓨터에 전달하고, 실행하고, 캡처된 출력을 반환합니다.

az connectedmachine run-command create --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG" --script "Write-Host Hello World!"

컴퓨터에 배포된 모든 RunCommand 리소스 나열

이 명령은 속성과 함께 이전에 배포된 실행 명령의 전체 목록을 반환합니다.

az connectedmachine run-command list --machine-name "myMachine" --resource-group "myRG"

실행 상태 및 결과 가져오기

이 명령은 실행의 최신 출력, 시작/종료 시간, 종료 코드 및 터미널 상태를 포함하여 현재 실행 진행률을 검색합니다.

az connectedmachine run-command show --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"

참고 항목

instanceView의 출력 및 오류 필드는 마지막 4KB로 제한됩니다. 전체 출력 및 오류에 액세스하려면 실행 명령을 실행하는 동안 -outputBlobUri-errorBlobUri 매개 변수를 사용하여 출력 및 오류 데이터를 스토리지 추가 Blob에 전달할 수 있습니다.

컴퓨터에서 RunCommand 리소스 삭제

이전에 컴퓨터에 배포된 RunCommand 리소스를 제거합니다. 스크립트 실행이 아직 진행 중인 경우 실행이 종료됩니다.

az connectedmachine run-command delete --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"

PowerShell

컴퓨터를 사용하여 스크립트 실행

New-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"

SourceScriptUri 매개 변수를 사용하여 컴퓨터에서 스크립트 실행

OutputBlobUriErrorBlobUri는 선택적 매개 변수입니다.

New-AzConnectedMachineRunCommand -ResourceGroupName -MachineName -RunCommandName -SourceScriptUri “< SAS URI of a storage blob with read access or public URI>” -OutputBlobUri “< SAS URI of a storage append blob with read, add, create, write access>” -ErrorBlobUri “< SAS URI of a storage append blob with read, add, create, write access>”

컴퓨터에 배포된 모든 RunCommand 리소스 나열

이 명령은 속성과 함께 이전에 배포된 실행 명령의 전체 목록을 반환합니다.

Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine"

실행 상태 및 결과 가져오기

이 명령은 실행의 최신 출력, 시작/종료 시간, 종료 코드 및 터미널 상태를 포함하여 현재 실행 진행률을 검색합니다.

Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" - MachineName "myMachine" -RunCommandName "RunCommandName"

SourceScriptUri(스토리지 Blob SAS URL)를 사용하여 컴퓨터에서 실행 명령 만들기 또는 업데이트

PowerShell 스크립트가 포함된 스토리지 Blob의 SAS URL을 사용하여 Windows 컴퓨터에서 실행 명령을 만들거나 업데이트합니다. SourceScriptUri는 스토리지 BLOB의 전체 SAS URL 또는 공용 URL일 수 있습니다.

New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

참고 항목

SAS URL은 Blob에 대한 읽기 액세스를 제공해야 합니다. SAS URL에 대해 만료 시간은 24시간이 좋습니다. Blob 옵션을 사용하여 Azure Portal에 또는 New-AzStorageBlobSASToken을 사용하여 SAS 토큰에 SAS URL을 생성할 수 있습니다. New-AzStorageBlobSASToken을 사용하여 SAS 토큰을 생성하는 경우 SAS URL은 “기본 Blob URL” + “?” + “New-AzStorageBlobSASToken의 SAS 토큰”입니다.

실행 명령을 만들거나 업데이트한 후 컴퓨터의 실행 명령 인스턴스 보기 가져오기

인스턴스 보기를 사용하여 컴퓨터에 대한 실행 명령을 가져옵니다. 인스턴스 보기에는 실행 명령을 통해 스크립트를 실행하여 생성된 실행 명령의 실행 상태(성공, 실패 등), 종료 코드, 표준 출력, 표준 오류가 포함됩니다. 0이 아닌 ExitCode는 실패한 실행을 나타냅니다.

Get-AzConnectedMachineRunCommand -ResourceGroupName MyRG -MachineName MyMachine -RunCommandName MyRunCommand

InstanceViewExecutionState: 사용자의 실행 명령 스크립트 상태입니다. 스크립트가 성공했는지 여부를 확인하려면 이 상태를 참조하세요.

ProvisioningState: 일반 확장 프로비전 엔드투엔드 상태(확장 플랫폼이 실행 명령 스크립트를 트리거할 수 있는지 여부)입니다.

SourceScript를 사용하여 컴퓨터에서 실행 명령 만들기 또는 업데이트(스크립트 텍스트)

스크립트 콘텐츠를 -SourceScript 매개 변수에 직접 전달하는 컴퓨터에서 실행 명령을 만들거나 업데이트합니다. ;를 사용하여 여러 명령 구분합니다.

New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"

OutputBlobUri, ErrorBlobUri를 사용하여 컴퓨터에서 실행 명령을 만들거나 업데이트하여 표준 출력 및 표준 오류 메시지를 출력 및 오류 추가 Blob으로 스트리밍합니다.

컴퓨터에서 실행 명령을 만들거나 업데이트하고 표준 출력 및 표준 오류 메시지를 출력 및 오류 추가 Blob으로 스트리밍합니다.

New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 - MachineName MyMachine -RunCommandName MyRunCommand3 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"-OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri <ErrorBlobUri>

참고 항목

출력 및 오류 Blob은 AppendBlob 형식이어야 하고 해당 SAS URL은 Blob에 대한 읽기, 추가, 만들기, 쓰기 액세스를 제공해야 합니다. SAS URL에 대해 만료 시간은 24시간이 좋습니다. 출력 또는 오류 Blob이 없는 경우 AppendBlob 형식의 Blob이 만들어집니다. Blob의 옵션을 사용하여 Azure Portal에 또는 New-AzStorageBlobSASToken을 사용하여 SAS 토큰에 SAS URL을 생성할 수 있습니다.

RunAsUser 및 RunAsPassword 매개 변수를 사용하여 다른 사용자로 컴퓨터에서 실행 명령 만들기 또는 업데이트

RunAsUserRunAsPassword 매개 변수를 사용하여 다른 사용자로 컴퓨터에서 실행 명령을 만들거나 업데이트합니다. RunAs가 제대로 작동하려면 컴퓨터의 관리자에게 문의하여 사용자가 컴퓨터에 추가되었는지, 사용자가 실행 명령(디렉터리, 파일, 네트워크 등)으로 액세스하는 리소스에 액세스할 수 있는지, Windows 컴퓨터의 경우 컴퓨터에서 ‘보조 로그온’ 서비스가 실행되고 있는지 확인합니다.

New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScript "id; echo HelloWorld" -RunAsUser myusername -RunAsPassword mypassword

SourceScriptUri(스토리지 Blob SAS URL)를 사용하여 컴퓨터 리소스에서 실행 명령 만들기 또는 업데이트

PowerShell 스크립트가 포함된 스토리지 Blob의 SAS URL을 사용하여 Windows 컴퓨터 리소스에서 실행 명령을 만들거나 업데이트합니다.

New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

참고 항목

SAS URL은 Blob에 대한 읽기 액세스를 제공해야 합니다. SAS URL에 대해 만료 시간은 24시간이 좋습니다. Blob 옵션을 사용하여 Azure Portal에 또는 New-AzStorageBlobSASToken을 사용하여 SAS 토큰에 SAS URL을 생성할 수 있습니다. New-AzStorageBlobSASToken을 사용하여 SAS 토큰을 생성하는 경우 SAS URL 형식은 기본 Blob URL + “?” + New-AzStorageBlobSASToken의 SAS 토큰입니다.

ScriptLocalPath를 사용하여 컴퓨터에서 실행 명령 만들기 또는 업데이트(로컬 스크립트 파일)

cmdlet이 실행되는 클라이언트 컴퓨터에 있는 로컬 스크립트 파일을 사용하여 컴퓨터에서 실행 명령을 만들거나 업데이트합니다.

New-AzMachineRunCommand -ResourceGroupName MyRG0 -VMName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"

Parameter 및 ProtectedParameter 매개 변수를 사용하여 컴퓨터 인스턴스에서 실행 명령 만들기 또는 업데이트(스크립트에 대한 퍼블릭 및 보호된 매개 변수)

ProtectedParameter를 사용하여 암호, 키 등과 같은 스크립트에 중요한 입력을 전달합니다.

  • Windows: 인수가 스크립트에 전달되고 myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value와 같이 실행될 때 Parameters 및 ProtectedParameters가 스크립트에 전달됩니다.

  • Linux: Named Parameters와 해당 값은 .sh 스크립트 내에서 액세스할 수 있어야 하는 환경 구성으로 설정됩니다. Nameless 인수의 경우 빈 문자열을 이름 입력으로 전달합니다. 이름 없는 인수는 스크립트로 전달되고 myscript.sh publicParam1value publicParam2value secret1value secret2value와 같이 실행됩니다.

컴퓨터에서 RunCommand 리소스 삭제

이전에 컴퓨터에 배포된 RunCommand 리소스를 제거합니다. 스크립트 실행이 아직 진행 중인 경우 실행이 종료됩니다.

Remove-AzConnetedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -RunCommandName "RunCommandName"

실행 명령 작업

Azure Arc 지원 서버의 실행 명령은 다음 작업을 지원합니다.

연산 설명
만들기 실행 명령을 만드는 작업입니다. 실행 명령을 실행합니다.
삭제 실행 명령을 삭제하는 작업입니다. 실행 중인 경우 삭제는 실행 명령도 중지합니다.
Get 실행 명령을 가져오는 작업입니다.
List Azure Arc 지원 서버의 모든 실행 명령을 가져오는 작업입니다.
엽데이트 실행 명령을 업데이트하는 작업입니다. 이전 실행 명령이 중지됩니다.

참고 항목

실행 명령 스크립트를 실행할 때마다 출력 및 오류 Blob을 덮어씁니다.

예제 시나리오

구독 ID “aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa”를 사용하는 리소스 그룹 “ContosoRG”에 “2012DatacenterServer1”이라는 Azure Arc 지원 서버가 있다고 가정합니다. Windows Server 2012/R2 서버용 엔드포인트에 대한 원격 액세스를 제공해야 하는 시나리오를 고려합니다. Azure Arc에서 사용하도록 설정된 확장 보안 업데이트에 액세스하려면 엔드포인트 www.microsoft.com/pkiops/certs에 액세스해야 합니다. 이 엔드포인트에 대한 액세스를 허용하는 방화벽 규칙을 원격으로 구성해야 합니다. 이 엔드포인트에 대한 연결을 허용하려면 실행 명령을 사용합니다.

예제 1: 실행 명령을 통한 엔드포인트 액세스

PUT 작업을 사용하여 대상 Arc 지원 서버의 www.microsoft.com/pkiops/certs 엔드포인트에 대한 엔드포인트 액세스를 제공하는 실행 명령 스크립트를 만들어 시작합니다.

스크립트를 줄에 직접 제공하려면 다음 작업을 사용합니다.

PUT https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
{
  "location": "eastus2",
  "properties": {
    "source": {
      "script": "New-NetFirewallRule -DisplayName $ruleName -Direction Outbound -Action Allow -RemoteAddress $endpoint -RemotePort $port -Protocol $protocol"
    },
    "parameters": [
      {
        "name": "ruleName",
        "value": "Allow access to www.microsoft.com/pkiops/certs"
      },
      {
        "name": "endpoint",
        "value": "www.microsoft.com/pkiops/certs"
      },
      {
        "name": "port",
        "value": 433
      },
      {
        "name": "protocol",
        "value": "TCP"
      }

    ],
    "asyncExecution": false,
    "runAsUser": "contoso-user1",
    "runAsPassword": "Contoso123!"
    "timeoutInSeconds": 3600,
    "outputBlobUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/MyScriptoutput.txt",
    "errorBlobUri": "https://mystorageaccount.blob.core.windows.net/mycontainer/MyScriptError.txt"
  }
}

대신 스크립트 파일에 연결하려면 실행 명령 작업의 ScriptURI 옵션을 사용하면 됩니다. 이를 위해 인라인 스크립트가 포함된 newnetfirewallrule.ps1 파일을 준비하고 Blob Storage에 이 스크립트를 업로드했다고 가정합니다.

PUT https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
{
  "location": "eastus2",
  "properties": {
    "source": {
      "scriptUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/newnetfirewallrule.ps1"
    },
    "parameters": [
      {
        "name": "ruleName",
        "value": " Allow access to www.microsoft.com/pkiops/certs"
      },
      {
        "name": "endpoint",
        "value": "www.microsoft.com/pkiops/certs"
      },
      {
        "name": "port",
        "value": 433
      },
      {
        "name": "protocol",
        "value": "TCP"
      }

    ],
    "asyncExecution": false,
    "runAsUser": "contoso-user1",
    "runAsPassword": "Contoso123!"
    "timeoutInSeconds": 3600,
    "outputBlobUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/MyScriptoutput.txt",
    "errorBlobUri": "https://mystorageaccount.blob.core.windows.net/mycontainer/MyScriptError.txt"
  }
}

SAS URL은 Blob에 대한 읽기 액세스를 제공해야 합니다. SAS URL에 대해 만료 시간은 24시간이 좋습니다. Blob 옵션을 사용하여 Azure Portal에 또는 New-AzStorageBlobSASToken을 사용하여 SAS 토큰에 SAS URL을 생성할 수 있습니다. New-AzStorageBlobSASToken을 사용하여 SAS 토큰을 생성하는 경우 SAS URL 형식은 base blob URL + "?" + New-AzStorageBlobSASToken의 SAS 토큰입니다.

출력 및 오류 Blob은 AppendBlob 형식이어야 하고 해당 SAS URL은 Blob에 대한 읽기, 추가, 만들기, 쓰기 액세스를 제공해야 합니다. SAS URL에 대해 만료 시간은 24시간이 좋습니다. Blob의 옵션을 사용하여 Azure Portal에 또는 New-AzStorageBlobSASToken을 사용하여 SAS 토큰에 SAS URL을 생성할 수 있습니다.

예제 2: 실행 명령 세부 정보 가져오기

실행 명령을 올바르게 프로비전했는지 확인하려면 GET 명령을 사용하여 프로비전된 실행 명령에 대한 세부 정보를 검색합니다.

GET https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview

예제 3: 실행 명령 업데이트

Windows Admin Center에 연결하기 위해 추가 엔드포인트 *.waconazure.com에 대한 액세스를 연다고 가정해 보겠습니다’. 기존 실행 명령을 새 매개 변수로 업데이트할 수 있습니다.

PATCH https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
{
  "location": "eastus2",
  "properties": {
    "source": {
      "script": "New-NetFirewallRule -DisplayName $ruleName -Direction Outbound -Action Allow -RemoteAddress $endpoint -RemotePort $port -Protocol $protocol"
    },
    "parameters": [
      {
        "name": "ruleName",
        "value": "Allow access to WAC endpoint"
      },
      {
        "name": "endpoint",
        "value": "*.waconazure.com"
      },
      {
        "name": "port",
        "value": 433
      },
      {
        "name": "protocol",
        "value": "TCP"
      }
    ],
    "asyncExecution": false,
    "runAsUser": "contoso-user1",
    "runAsPassword": "Contoso123!",
    "timeoutInSeconds": 3600,
    "outputBlobUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/MyScriptoutput.txt",
    "errorBlobUri": "https://mystorageaccount.blob.core.windows.net/mycontainer/MyScriptError.txt"
  }
}

예제 4: 실행 명령 나열

엔드포인트 액세스용 실행 명령을 삭제하기 전에 Arc 지원 서버에 대한 다른 실행 명령이 없는지 확인합니다. list 명령을 사용하여 모든 실행 명령을 가져올 수 있습니다.

LIST https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/

예제 5: 실행 명령 삭제

실행 명령 확장이 더 이상 필요하지 않은 경우 다음 명령을 사용하여 삭제할 수 있습니다.

DELETE https://management.azure.com/subscriptions/ aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview

실행 명령 사용 안 함

Azure Arc 지원 서버에서 실행 명령을 사용하지 않도록 설정하려면 관리 명령 프롬프트를 열고 다음 명령을 실행합니다. 이러한 명령은 확장 차단 목록의 Connected Machine 에이전트에 대한 로컬 에이전트 구성 기능을 사용합니다.

Windows

azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"

Linux

sudo azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"