Использование политики Azure для принудительного выполнения заданий в гибридной рабочей роли Runbook
Внимание
31 августа 2024 г. служба автоматизации Azure гибридная рабочая роль Runbook на основе агента (Windows и Linux) не поддерживается. Следуйте инструкциям по миграции из существующих рабочих ролей Runbook на основе агента в гибридные рабочие роли на основе расширений.
При запуске модуля runbook в гибридной рабочей роли Runbook используется параметр Выполнить в, который позволяет указать имя группы гибридных рабочих ролей Runbook при запуске с портала Azure, из Azure PowerShell или через REST API. Если группа указана, одна из рабочих ролей в этой группе извлекает и выполняет runbook. Если для runbook не указан этот параметр, служба автоматизации Azure выполняет его в песочнице Azure.
Создавать задания runbook может любой пользователь организации, который относится к роли оператор задания службы автоматизации или более высокого уровня. Для управления выполнением модулей runbook, предназначенных для группы гибридных рабочих ролей Runbook в учетной записи службы автоматизации, можно использовать Политику Azure. Это позволяет обеспечить соблюдение стандартов организации и сделать так, чтобы заданиями автоматизации управляли уполномоченные лица и модули runbook нельзя было произвольным образом запускать в песочнице Azure (только в гибридных рабочих ролях Runbook).
В этой статье приведено определение настраиваемой политики Azure, которое поможет вам управлять этими задачами с помощью перечисленных ниже операций REST API службы автоматизации. В частности:
Эта политика основана на свойстве runOn
. Политика проверяет значение свойства, которое должно содержать имя существующей группы гибридных рабочих ролей Runbook. Если значение равно null, оно интерпретируется как запрос на создание задания, расписание задания или веб-перехватчика, предназначенных для песочницы Azure, и запрос отклоняется.
Требуемые разрешения
Для доступа к ресурсам политики Azure необходимо быть членом роли владельца на уровне подписки.
Создание и назначение определения политики
Мы составим правило политики, а затем присвоим его группе управления или подписке и при необходимости укажем группу ресурсов в подписке. Если вы не знакомы с языком политики, изучите структуру определения политики, чтобы понять, как структурировать определение политики.
На основе следующего фрагмента кода JSON создайте JSON-файл под названием AuditAutomationHRWJobExecution.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
Эта команда создает определение политики под названием Audit Enforce Jobs on Automation Hybrid Runbook Workers (Проверка принудительного выполнения заданий в гибридных рабочих ролях Runbook службы автоматизации). Дополнительные сведения о других параметрах, которые можно использовать, см. в разделе о az policy definition create.
При вызове без параметров расположения
az policy definition create
по умолчанию сохраняет определение политики в выбранной подписке контекста сеансов. Чтобы сохранить определение в другом месте, используйте следующие параметры:- subscription — сохранение в другой подписке. Требуется значение GUID для идентификатора подписки или значение строки для имени подписки.
- management-group — сохранение в группе управления. Требуется значение строки.
После создания определения политики вы можете создать назначение политики, выполнив следующие команды:
az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
Параметр scope в
az policy assignment create
работает с группой управления, подпиской, группой ресурсов или отдельным ресурсом. Параметр использует полный путь к ресурсу. Формат параметра scope для каждого контейнера приведен ниже. Замените{rName}
,{rgName}
,{subId}
и{mgName}
именем ресурса, именем группы ресурсов, идентификатором подписки и именем группы управления соответственно. Замените{rType}
типом ресурса, таким какMicrosoft.Compute/virtualMachines
для виртуальной машины.- Ресурс:
/subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
. - Группа ресурсов —
/subscriptions/{subID}/resourceGroups/{rgName}
- Подписка —
/subscriptions/{subID}
- Группа управления —
/providers/Microsoft.Management/managementGroups/{mgName}
Вы можете получить идентификатор определения Политики Azure с помощью следующей команды в PowerShell.
az policy definition show --name 'Audit Enforce Jobs on Automation Hybrid Runbook Workers'
Идентификатор определения политики для созданного вами определения должен выглядеть следующим образом:
"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Enforce Jobs on Automation Hybrid Runbook Workers"
- Ресурс:
Войдите на портал Azure.
Запустите службу "Политика Azure" на портале Azure. Для этого щелкните Все службы, выполните поиск по запросу Политика и выберите этот элемент.
Выберите Соответствие в левой части страницы Найдите созданное вами назначение политики.
Если какая-либо операция службы автоматизации передачи репрезентативного состояния выполняется в тексте запроса без ссылки на гибридную рабочую роль Runbook, возвращается код ответа 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": {}
}
}
]
}
}
Предпринятая операция также заносится в журнал действий учетной записи службы автоматизации, как показано в примере ниже.
Следующие шаги
Сведения о работе с модулями runbook см. в статье Управление модулями runbook в службе автоматизации Azure.