Azure Policy를 사용하여 Hybrid Runbook Worker에서 작업 실행을 적용합니다
Important
Azure Automation 에이전트 기반 사용자 Hybrid Runbook Worker(Windows 및 Linux)는 2024년 8월 31일에 사용 중지되었으며 더 이상 지원되지 않습니다. 기존 에이전트 기반 사용자 Hybrid Runbook Worker에서 확장 기반 Hybrid Worker로 마이그레이션하는 방법에 대한 지침을 따릅니다.
Hybrid Runbook Worker에서 Runbook을 시작하면 Azure PowerShell 또는 REST API를 사용하여 Azure Portal에서 시작할 때 Hybrid Runbook Worker 그룹의 이름을 지정할 수 있는 실행 옵션이 사용됩니다. 그룹이 지정되면 이 그룹에 있는 Worker 중 하나가 Runbook을 검색하여 실행합니다. Runbook에서 이 옵션을 지정하지 않을 경우 Azure Automation이 Azure 샌드박스에서 Runbook을 실행합니다.
Automation 작업 운영자 또는 그 상위 구성원인 조직 내의 모든 사용자는 Runbook 작업을 만들 수 있습니다. Automation 계정에서 Hybrid Runbook Worker 그룹을 대상으로 하는 Runbook 실행을 관리하려면 Azure Policy를 사용할 수 있습니다. 이를 통해 조직 표준을 적용하고, 지정된 사람이 Automation 작업을 제어하고 관리할 수 있으며, 모든 사용자는 Azure 샌드박스에서 Runbook을 실행할 수 없고, Hybrid Runbook Worker에서만 실행이 가능합니다.
이 문서에는 다음의 Automation REST API 작업을 사용하여 이러한 작업을 컨트롤하는 데 도움이 되는 사용자 지정 Azure Policy 정의가 포함되어 있습니다. 특별한 사항
이 정책은 runOn
속성에 기반합니다. 이 정책은 속성 값의 유효성을 검사함, 여기에는 기존 Hybrid Runbook Worker 그룹의 이름이 포함되어야 합니다. 값이 Null인 경우에는 작업, 작업 일정 또는 웹후크에 대한 만들기 요청이 Azure 샌드박스에서 사용될 목적이며, 요청이 거부되었다고 해석됩니다.
필수 사용 권한
Azure Policy 리소스 권한을 얻으려면 구독 수준에서 소유자 역할 구성원이어야 합니다.
정책 정의 만들기 및 할당
여기서는 정책 규칙을 작성한 다음 관리 그룹 또는 구독에 할당하고 필요에 따라 구독에 리소스 그룹을 지정 합니다. 아직 정책 언어에 익숙하지 않은 경우 정책 정의 구조에서 정책 정의를 구성하는 방법을 알아보세요.
다음 JSON 코드 조각을 사용하여 AuditAutomationHRWJobExecution.json이라는 이름의 JSON 파일을 만듭니다.
{ "properties": { "displayName": "Enforce job execution on Automation Hybrid Runbook Worker", "description": "Enforce job execution on Hybrid Runbook Workers in your Automation account.", "mode": "all", "parameters": { "effectType": { "type": "string", "defaultValue": "Deny", "allowedValues": [ "Deny", "Disabled" ], "metadata": { "displayName": "Effect", "description": "Enable or disable execution of the policy" } } }, "policyRule": { "if": { "anyOf": [ { "allOf": [ { "field": "type", "equals": "Microsoft.Automation/automationAccounts/jobs" }, { "value": "[length(field('Microsoft.Automation/automationAccounts/jobs/runOn'))]", "less": 1 } ] }, { "allOf": [ { "field": "type", "equals": "Microsoft.Automation/automationAccounts/webhooks" }, { "value": "[length(field('Microsoft.Automation/automationAccounts/webhooks/runOn'))]", "less": 1 } ] }, { "allOf": [ { "field": "type", "equals": "Microsoft.Automation/automationAccounts/jobSchedules" }, { "value": "[length(field('Microsoft.Automation/automationAccounts/jobSchedules/runOn'))]", "less": 1 } ] } ] }, "then": { "effect": "[parameters('effectType')]" } } } }
다음 Azure PowerShell 또는 Azure CLI 명령을 실행하여 AuditAutomationHRWJobExecution.json 파일을 사용하여 정책 정의를 만듭니다.
az policy definition create --name 'audit-enforce-jobs-on-automation-hybrid-runbook-workers' --display-name 'Audit Enforce Jobs on Automation Hybrid Runbook Workers' --description 'This policy enforces job execution on Automation account user Hybrid Runbook Workers.' --rules 'AuditAutomationHRWJobExecution.json' --mode All
이 명령은 Automation Hybrid Runbook Worker에 대한 작업 적용 감사라는 이름의 정책 정의를 만듭니다. 사용할 수 있는 다른 매개 변수에 대한 자세한 내용은 az policy definition create를 참조하세요.
위치 매개 변수 없이 호출할 경우
az policy definition create
은 기본적으로 선택한 세션 컨텍스트 구독에 정책 정의를 저장하도록 지정됩니다. 정의를 다른 위치에 저장하려면 다음 매개 변수를 사용합니다.- subscription - 다른 구독에 저장합니다. 구독 ID에 대해 GUID 값 또는 구독 이름에 대해 문자열 값이 필요합니다.
- management-group - 관리 그룹에 저장합니다. 문자열 값이 필요합니다.
정책 정의를 만든 후 다음 명령을 실행하여 정책 할당을 만들 수 있습니다.
az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
az policy assignment create
의 scope 매개 변수는 관리 그룹, 구독, 리소스 그룹 또는 단일 리소스를 사용하여 작동합니다. 매개 변수는 전체 리소스 경로를 사용합니다. 각 컨테이너에 대한 scope 패턴은 다음과 같습니다.{rName}
,{rgName}
,{subId}
및{mgName}
을 각각 리소스 이름, 리소스 그룹 이름, 구독 ID 및 관리 그룹 이름으로 바꿉니다.{rType}
은 리소스의 리소스 종류로 바꿉니다(예: VM에 대한Microsoft.Compute/virtualMachines
).- 리소스 -
/subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
- 리소스 그룹 -
/subscriptions/{subID}/resourceGroups/{rgName}
- 구독 -
/subscriptions/{subID}
- 관리 그룹 -
/providers/Microsoft.Management/managementGroups/{mgName}
다음 명령으로 PowerShell을 사용하여 Azure Policy 정의 ID를 가져올 수 있습니다.
az policy definition show --name 'Audit Enforce Jobs on Automation Hybrid Runbook Workers'
만든 정책 정의에 대한 정책 정의 ID는 다음 예제와 유사해야 합니다.
"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Enforce Jobs on Automation Hybrid Runbook Workers"
- 리소스 -
Azure Portal에 로그인합니다.
모든 서비스를 선택한 후 정책을 검색하고 선택하여 Azure Portal에서 Azure Policy 서비스를 시작합니다.
페이지 왼쪽에서 준수를 선택합니다. 생성한 정책 할당으로 이동합니다.
Automation REST 작업 중 하나가 요청 본문의 Hybrid Runbook Worker 참조 없이 실행되는 경우 403 응답 코드가 Azure 샌드박스에서 작업을 실행하려고 했음을 나타내는 다음 예제와 유사한 오류와 함께 반환됩니다.
{
"error": {
"code": "RequestDisallowedByPolicy",
"target": "Start_VMS",
"message": "Resource 'Start_VMS' was disallowed by policy. Policy identifiers: '[{\"policyAssignment\":{\"name\":\"Enforce Jobs on Automation Hybrid Runbook Workers\",\"id\":\"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MAIC-RG/providers/Microsoft.Authorization/policyAssignments/fd5e2cb3842d4eefbc857917\"},\"policyDefinition\":{\"name\":\"Enforce Jobs on Automation Hybrid Runbook Workers\",\"id\":\"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/policyDefinitions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f\"}}]'.",
"additionalInfo": [
{
"type": "PolicyViolation",
"info": {
"policyDefinitionDisplayName": "Enforce Jobs on Automation Hybrid Runbook Workers",
"evaluationDetails": {
"evaluatedExpressions": [
{
"result": "True",
"expressionKind": "Field",
"expression": "type",
"path": "type",
"expressionValue": "Microsoft.Automation/automationAccounts/jobs",
"targetValue": "Microsoft.Automation/automationAccounts/jobs",
"operator": "Equals"
},
{
"result": "True",
"expressionKind": "Value",
"expression": "[length(field('Microsoft.Automation/automationAccounts/jobs/runOn'))]",
"expressionValue": 0,
"targetValue": 1,
"operator": "Less"
}
]
},
"policyDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/policyDefinitions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
"policyDefinitionName": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
"policyDefinitionEffect": "Deny",
"policyAssignmentId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MAIC-RG/providers/Microsoft.Authorization/policyAssignments/fd5e2cb3842d4eefbc857917",
"policyAssignmentName": "fd5e2cb3842d4eefbc857917",
"policyAssignmentDisplayName": "Enforce Jobs on Automation Hybrid Runbook Workers",
"policyAssignmentScope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MAIC-RG",
"policyAssignmentParameters": {}
}
}
]
}
}
시도된 작업은 다음 예제와 유사하게 Automation 계정의 활동 로그에도 기록됩니다.
다음 단계
Runbook을 사용하려면 Azure Automation에서 Runbook 관리를 참조하세요.