기존 에이전트 기반 하이브리드 작업자를 확장 기반 하이브리드 작업자로 마이그레이션
Important
Azure Automation 에이전트 기반 사용자 Hybrid Runbook Worker(Windows 및 Linux)는 2024년 8월 31일에 사용 중지되었으며 더 이상 지원되지 않습니다. 기존 에이전트 기반 사용자 Hybrid Runbook Worker에서 확장 기반 Hybrid Worker로 마이그레이션하는 방법에 대해 이 게시물의 지침을 따릅니다.
이 문서에서는 확장 기반 사용자 Hybrid Runbook Worker의 이점과 기존 에이전트 기반 사용자 Hybrid Runbook Worker를 확장 기반 Hybrid Worker로 마이그레이션하는 방법에 대해 설명합니다.
Azure Automation에서 지원하는 두 개의 Hybrid Runbook Worker 설치 플랫폼이 있습니다.
- 에이전트 기반 Hybrid Runbook 작업자(V1) - 에이전트 기반 Hybrid Runbook 작업자는 Log Analytics 에이전트에 종속됩니다.
- 확장 기반 Hybrid Runbook 작업자(V2) - 확장 기반 Hybrid Runbook 작업자는 VM(가상 머신) 확장 프레임워크를 통해 Hybrid Runbook 작업자 역할의 네이티브 통합을 제공합니다.
Hybrid Runbook Worker에서 Runbook을 실행하는 프로세스는 둘 다 동일하게 유지됩니다.
에이전트 기반 작업자에 비해 확장 기반 사용자 Hybrid Runbook Worker의 이점
확장 기반 방식의 목적은 Hybrid Worker의 설치 및 관리를 간소화하고 에이전트 기반 버전 작업의 복잡성을 제거하는 것입니다. 다음은 몇 가지 주요 이점입니다.
원활한 온보딩 – Hybrid Runbook 작업자 온보딩을 위한 에이전트 기반 방식은 Log Analytics 에이전트에 의존하며, 이는 다단계 프로세스이고 시간 소모적이며 오류가 발생하기 쉽습니다. 확장 기반 방식은 더 많은 보안을 제공하며 더 이상 Log Analytics 에이전트에 의존하지 않습니다.
관리 용이성 – Hybrid Runbook Worker용 ARM(Azure Resource Manager) ID와의 네이티브 통합을 제공하고 정책 및 템플릿을 통해 대규모 거버넌스를 위한 유연성을 제공합니다.
Microsoft Entra ID 기반 인증 – Microsoft Entra ID에서 제공하는 VM 시스템이 할당한 관리 ID를 사용합니다. 이는 ID 및 리소스 자격 증명의 제어 및 관리를 중앙 집중화합니다.
통합 환경 – Azure 및 Azure 외 Arc 지원 컴퓨터를 관리하는 데 동일한 환경을 제공합니다.
여러 온보딩 채널 – Azure Portal, PowerShell cmdlet, Bicep, ARM 템플릿, REST API 및 Azure CLI를 통해 확장 기반 작업자를 온보딩하고 관리하도록 선택할 수 있습니다.
기본 자동 업그레이드 – 기본적으로 부 버전의 자동 업그레이드를 제공하므로 최신 버전으로 업데이트된 상태를 유지하는 관리 용이성이 크게 줄어듭니다. 수동 오버헤드 없이 보안 또는 기능 업데이트를 활용하려면 자동 업그레이드를 사용하도록 설정하는 것이 좋습니다. 언제든지 자동 업그레이드를 옵트아웃할 수도 있습니다. 주 버전 업그레이드는 현재 지원되지 않으며 수동으로 관리해야 합니다.
참고 항목
확장 기반 Hybrid Runbook Worker는 사용자 Hybrid Runbook Worker 형식만 지원하며 업데이트 관리 기능에 필요한 시스템 Hybrid Runbook Worker는 포함하지 않습니다.
필수 조건
머신 최소 요구 사항
- 두 개의 코어
- 4GB의 RAM
- 비 Azure 머신에는 Azure Connected Machine 에이전트가 설치되어 있어야 합니다.
AzureConnectedMachineAgent
를 설치하려면 Arc 지원 서버의 경우 Azure Portal에서 Azure에 하이브리드 컴퓨터 연결을 참조하거나 VMware 가상 머신 Azure Arc 관리를 참조하여 Arc 지원 VMware vSphere VM에 대한 게스트 관리를 사용하도록 설정합니다. - 시스템이 할당한 관리 ID는 Azure 가상 머신, Arc 사용 서버 또는 Arc 사용 VMware vSphere VM에서 사용하도록 설정해야 합니다. 시스템 할당 관리 ID가 사용하도록 설정되지 않은 경우 Azure Portal을 통한 설치 프로세스의 일부로 사용하도록 설정됩니다.
지원되는 운영 체제
Windows(x64) | Linux(x64) |
---|---|
● Windows Server 2022(Server Core 포함) ● Windows Server 2019(Server Core 포함) ● Windows Server 2016, 버전 1709 및 1803(Server Core 제외) ● Windows Server 2012, 2012 R2(Server Core 제외) ● Windows 10 Enterprise(다중 세션 포함) 및 Pro |
● Debian GNU/Linux 8, 9, 10, 11 및 12 ● Ubuntu 18.04 LTS, 20.04 LTS, 22.04 LTS 및 24.04 LTS ● SUSE Linux Enterprise Server 15.2, 15.3, 15.4, 15.5 및 15.6 ● Red Hat Enterprise Linux Server 7, 8 및 9 ● Rocky Linux 9 ● Oracle Linux 7, 8 및 9 Hybrid Worker 확장은 OS 공급업체의 지원 타임라인을 따릅니다. |
기타 요구 사항
Windows(x64) | Linux(x64) |
---|---|
Windows PowerShell 5.1(WMF 5.1 다운로드). PowerShell Core가 지원되지 않습니다. | Linux 강화를 사용하도록 설정하면 안 됩니다. |
.NET Framework 4.6.2 이상 |
Linux의 패키지 요구 사항
필수 패키지 | 설명 | 최소 버전 |
---|---|---|
Glibc | GNU C 라이브러리 | 2.5-12 |
Openssl | OpenSSL 라이브러리 | 1.0(TLS 1.1 및 1.2 지원) |
Curl | cURL 웹 클라이언트 | 7.15.5 |
Python-ctypes | Python용 외래 함수 라이브러리 | Python 2.x 또는 Python 3.x 필요 |
PAM | 플러그 가능 인증 모듈 |
선택적 패키지 | 설명 | 최소 버전 |
---|---|---|
PowerShell Core | PowerShell Runbook을 실행하려면 PowerShell Core를 설치해야 합니다. 지침은 Linux에 PowerShell Core 설치를 참조하세요. | 6.0.0 |
참고 항목
Hybrid Runbook Worker는 현재 VMSS(Virtual Machine Scale Sets)에 대해 지원되지 않습니다.
가상 머신 호스팅 도메인 컨트롤러에서 Hybrid Worker 확장을 구성하지 않는 것이 좋습니다. 보안 모범 사례는 Azure Automation 작업을 통해 잠재적인 공격 벡터에 도메인 컨트롤러를 노출하는 위험이 높은 특성으로 인해 이러한 설정을 권장하지 않습니다. 도메인 컨트롤러는 무단 액세스를 방지하고 ADDS(Active Directory 도메인 Services) 환경의 무결성을 유지하기 위해 필수적이지 않은 서비스와 고도로 보호되고 격리되어야 합니다.
Hybrid Worker 자격 증명에 대한 권한
확장 기반 Hybrid Worker가 사용자 지정 Hybrid Worker 자격 증명을 사용하는 경우 작업이 일시 중단되지 않도록 사용자 지정 사용자에게 다음 폴더 권한이 할당되었는지 확인합니다.
리소스 종류 | 폴더 권한 |
---|---|
Azure VM | C:\Packages\Plugins\Microsoft.Azure.Automation.HybridWorker.HybridWorkerForWindows(읽기 및 실행) |
Arc 지원 서버 | C:\ProgramData\AzureConnectedMachineAgent\Tokens (read) C:\Packages\Plugins\Microsoft.Azure.Automation.HybridWorker.HybridWorkerForWindows (read and execute). |
참고 항목
- 시스템에 UAC/LUA가 있는 경우 권한이 그룹 멤버 자격을 통하지 않고 직접 부여되어야 합니다. 자세히 알아보기.
- Arc 지원 서버의 경우 ARC 에이전트를 업데이트할 때마다 제거할 때 사용 권한을 다시 할당해야 합니다.
- Hybrid Runbook Worker는 현재 VMSS(Virtual Machine Scale Sets)에 대해 지원되지 않습니다.
기존 Agent 기반 Hybrid Worker를 Extension 기반 Hybrid Worker로 마이그레이션
확장 기반 Hybrid Worker의 이점을 활용하려면 모든 기존 에이전트 기반 사용자 Hybrid Worker를 확장 기반 Worker로 마이그레이션해야 합니다. 하이브리드 작업자 머신은 에이전트 기반(V1) 및 확장 기반(V2) 플랫폼 모두에서 공존할 수 있습니다. 확장 기반 설치는 에이전트 기반 Worker의 설치 또는 관리에 영향을 미치지 않습니다.
기존 에이전트 기반 Hybrid Worker에 Hybrid Worker 확장을 설치하려면 다음 단계를 수행하기 전에 필수 조건이 충족되었는지 확인합니다.
프로세스 자동화에서 Hybrid Worker 그룹을 선택한 다음, 기존 Hybrid Worker 그룹을 선택하여 Hybrid Worker 그룹 페이지로 이동합니다.
Hybrid Worker 그룹에서 Hybrid Worker>+ 추가를 선택하여 Hybrid Worker로 머신 추가 페이지로 이동합니다.
기존 에이전트 기반(V1) 하이브리드 작업자 옆의 확인란을 선택합니다. 에이전트 기반 Hybrid Worker가 나열되지 않으면 Azure Arc Connected Machine Agent가 컴퓨터에 설치되어 있는지 확인합니다.
AzureConnectedMachineAgent
를 설치하려면 Arc 지원 서버의 경우 Azure Portal에서 Azure에 하이브리드 컴퓨터 연결을 참조하거나 VMware 가상 머신 Azure Arc 관리를 참조하여 Arc 지원 VMware vSphere VM에 대한 게스트 관리를 사용하도록 설정합니다.추가를 선택하여 머신을 그룹에 추가합니다.
플랫폼 열에는 에이전트 기반(V1) 및 확장 기반(V2)과 동일한 하이브리드 작업자가 표시됩니다. 확장 기반 Hybrid Worker 환경과 사용에 확신이 있으면 에이전트 기반 Worker를 제거할 수 있습니다.
여러 에이전트 기반 Hybrid Worker의 대규모 마이그레이션의 경우 Bicep, ARM 템플릿, PowerShell cmdlet, REST API 및 Azure CLI와 같은 다른 채널을 사용할 수도 있습니다.
Bicep 및 ARM 템플릿, REST API, Azure CLI 및 PowerShell을 사용하여 Hybrid Worker 확장 관리
Bicep 템플릿을 사용하여 새 Hybrid Worker 그룹을 만들고, 새 Azure Windows VM을 만들고, 기존 Hybrid Worker 그룹에 추가할 수 있습니다. Bicep에 대해 자세히 알아봅니다.
예를 들어 설명한 아래 단계에 따라 수행합니다.
- 하이브리드 작업자 그룹을 만듭니다.
- Azure VM 또는 Arc 지원 서버를 만듭니다. 또는 기존 Azure VM 또는 Arc 지원 서버를 사용할 수도 있습니다.
- Azure VM 또는 Arc 지원 서버를 위에서 만든 Hybrid Worker 그룹에 연결합니다.
- 새 GUID를 생성하고 Hybrid Worker의 이름으로 전달합니다.
- VM의 시스템이 할당한 관리 ID를 사용하도록 설정합니다.
- VM에 Hybrid Worker 확장을 설치합니다.
- 확장이 VM에 성공적으로 설치되었는지 확인하려면 Azure Portal에서 VM >확장 탭으로 이동하여 VM 에 설치된 Hybrid Worker 확장의 상태를 확인합니다.
param automationAccount string
param automationAccountLocation string
param workerGroupName string
@description('Name of the virtual machine.')
param virtualMachineName string
@description('Username for the Virtual Machine.')
param adminUsername string
@description('Password for the Virtual Machine.')
@minLength(12)
@secure()
param adminPassword string
@description('Location for the VM.')
param vmLocation string = 'North Central US'
@description('Size of the virtual machine.')
param vmSize string = 'Standard_DS1_v2'
@description('The Windows version for the VM. This will pick a fully patched image of this given Windows version.')
@allowed([
'2008-R2-SP1'
'2012-Datacenter'
'2012-R2-Datacenter'
'2016-Nano-Server'
'2016-Datacenter-with-Containers'
'2016-Datacenter'
'2019-Datacenter'
'2019-Datacenter-Core'
'2019-Datacenter-Core-smalldisk'
'2019-Datacenter-Core-with-Containers'
'2019-Datacenter-Core-with-Containers-smalldisk'
'2019-Datacenter-smalldisk'
'2019-Datacenter-with-Containers'
'2019-Datacenter-with-Containers-smalldisk'
])
param osVersion string = '2019-Datacenter'
@description('DNS name for the public IP')
param dnsNameForPublicIP string
var nicName_var = 'myVMNict'
var addressPrefix = '10.0.0.0/16'
var subnetName = 'Subnet'
var subnetPrefix = '10.0.0.0/24'
var subnetRef = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName_var, subnetName)
var vmName_var = virtualMachineName
var virtualNetworkName_var = 'MyVNETt'
var publicIPAddressName_var = 'myPublicIPt'
var networkSecurityGroupName_var = 'default-NSGt'
var UniqueStringBasedOnTimeStamp = uniqueString(resourceGroup().id)
resource publicIPAddressName 'Microsoft.Network/publicIPAddresses@2020-08-01' = {
name: publicIPAddressName_var
location: vmLocation
properties: {
publicIPAllocationMethod: 'Dynamic'
dnsSettings: {
domainNameLabel: dnsNameForPublicIP
}
}
}
resource networkSecurityGroupName 'Microsoft.Network/networkSecurityGroups@2020-08-01' = {
name: networkSecurityGroupName_var
location: vmLocation
properties: {
securityRules: [
{
name: 'default-allow-3389'
properties: {
priority: 1000
access: 'Allow'
direction: 'Inbound'
destinationPortRange: '3389'
protocol: 'Tcp'
sourceAddressPrefix: '*'
sourcePortRange: '*'
destinationAddressPrefix: '*'
}
}
]
}
}
resource virtualNetworkName 'Microsoft.Network/virtualNetworks@2020-08-01' = {
name: virtualNetworkName_var
location: vmLocation
properties: {
addressSpace: {
addressPrefixes: [
addressPrefix
]
}
subnets: [
{
name: subnetName
properties: {
addressPrefix: subnetPrefix
networkSecurityGroup: {
id: networkSecurityGroupName.id
}
}
}
]
}
}
resource nicName 'Microsoft.Network/networkInterfaces@2020-08-01' = {
name: nicName_var
location: vmLocation
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
properties: {
privateIPAllocationMethod: 'Dynamic'
publicIPAddress: {
id: publicIPAddressName.id
}
subnet: {
id: subnetRef
}
}
}
]
}
dependsOn: [
virtualNetworkName
]
}
resource vmName 'Microsoft.Compute/virtualMachines@2020-12-01' = {
name: vmName_var
location: vmLocation
identity: {
type: 'SystemAssigned'
}
properties: {
hardwareProfile: {
vmSize: vmSize
}
osProfile: {
computerName: vmName_var
adminUsername: adminUsername
adminPassword: adminPassword
}
storageProfile: {
imageReference: {
publisher: 'MicrosoftWindowsServer'
offer: 'WindowsServer'
sku: osVersion
version: 'latest'
}
osDisk: {
createOption: 'FromImage'
}
}
networkProfile: {
networkInterfaces: [
{
id: nicName.id
}
]
}
}
}
resource automationAccount_resource 'Microsoft.Automation/automationAccounts@2021-06-22' = {
name: automationAccount
location: automationAccountLocation
properties: {
sku: {
name: 'Basic'
}
}
}
resource automationAccount_workerGroupName 'Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups@2022-02-22' = {
parent: automationAccount_resource
name: workerGroupName
dependsOn: [
vmName
]
}
resource automationAccount_workerGroupName_testhw_UniqueStringBasedOnTimeStamp 'Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups/hybridRunbookWorkers@2021-06-22' = {
parent: automationAccount_workerGroupName
name: guid('testhw', UniqueStringBasedOnTimeStamp)
properties: {
vmResourceId: resourceId('Microsoft.Compute/virtualMachines', virtualMachineName)
}
dependsOn: [
vmName
]
}
resource virtualMachineName_HybridWorkerExtension 'Microsoft.Compute/virtualMachines/extensions@2022-03-01' = {
name: '${virtualMachineName}/HybridWorkerExtension'
location: vmLocation
properties: {
publisher: 'Microsoft.Azure.Automation.HybridWorker'
type: 'HybridWorkerForWindows'
typeHandlerVersion: '1.1'
autoUpgradeMinorVersion: true
enableAutomaticUpgrade: true
settings: {
AutomationAccountURL: automationAccount_resource.properties.automationHybridServiceUrl
}
}
dependsOn: [
vmName
]
}
output output1 string = automationAccount_resource.properties.automationHybridServiceUrl
에이전트 기반 Hybrid Worker 제거
관리자 모드에서 PowerShell 세션을 열고 다음 명령을 실행합니다.
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\HybridRunbookWorker\<AutomationAccountID>\<HybridWorkerGroupName>" -Force -Verbose
프로세스 자동화에서 Hybrid Worker 그룹을 선택한 다음, Hybrid Worker 그룹을 선택하여 Hybrid Worker 그룹 페이지로 이동합니다.
Hybrid Worker 그룹에서 Hybrid Worker를 선택합니다.
Hybrid Worker 그룹에서 삭제하려는 머신 옆에 있는 확인란을 선택합니다.
에이전트 기반 Windows Hybrid Worker를 제거하려면 삭제를 선택합니다.
참고 항목
- Automation 계정에서 Private Link 사용하지 않도록 설정하면 Hybrid Runbook 작업자를 제거하는 데 최대 60분이 걸릴 수 있습니다.
- Hybrid Worker를 제거하면 컴퓨터에서 Hybrid Worker 인증 인증서가 45분간 유효합니다.
다음 단계
- Hybrid Runbook Worker에 대한 자세한 내용은 Automation Hybrid Runbook Worker 개요를 참조하세요.
- 확장 기반 Hybrid Worker를 배포하려면 Azure Automation에서 확장 기반 Windows 또는 Linux 사용자 Hybrid Runbook Worker 배포를 참조하세요.
- Azure VM 확장에 대한 자세한 내용은 Windows용 Azure VM 확장 및 기능과 Linux용 Azure VM 확장 및 기능을 참조하세요.