Поделиться через


Использование политики 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 необходимо быть членом роли владельца на уровне подписки.

Создание и назначение определения политики

Мы составим правило политики, а затем присвоим его группе управления или подписке и при необходимости укажем группу ресурсов в подписке. Если вы не знакомы с языком политики, изучите структуру определения политики, чтобы понять, как структурировать определение политики.

  1. На основе следующего фрагмента кода 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')]"
           }
         }
       }
     }
    
  2. Выполните следующую команду 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 — сохранение в группе управления. Требуется значение строки.

  1. После создания определения политики вы можете создать назначение политики, выполнив следующие команды:

    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"
    

  1. Войдите на портал Azure.

  2. Запустите службу "Политика Azure" на портале Azure. Для этого щелкните Все службы, выполните поиск по запросу Политика и выберите этот элемент.

  3. Выберите Соответствие в левой части страницы Найдите созданное вами назначение политики.

    Снимок экрана: панель мониторинга Политики 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.