Udostępnij za pośrednictwem


Używanie usługi Azure Policy do wymuszania wykonywania zadań w hybrydowym procesie roboczym elementu Runbook

Ważne

Uruchamianie elementu Runbook w hybrydowym procesie roboczym elementu Runbook używa opcji Uruchom w celu określenia nazwy grupy hybrydowych procesów roboczych elementu Runbook podczas inicjowania z witryny Azure Portal przy użyciu programu Azure PowerShell lub interfejsu API REST. Po określeniu grupy jeden z procesów roboczych w tej grupie pobiera i uruchamia element Runbook. Jeśli element Runbook nie określi tej opcji, usługa Azure Automation uruchomi element Runbook w piaskownicy platformy Azure.

Każda osoba w organizacji, która jest członkiem operatora zadań automatyzacji lub nowszej, może tworzyć zadania elementu Runbook. Aby zarządzać wykonywaniem elementu Runbook przeznaczonym dla hybrydowej grupy procesów roboczych elementu Runbook na koncie usługi Automation, możesz użyć usługi Azure Policy. Pomaga to wymusić standardy organizacyjne i zapewnić, że zadania automatyzacji są kontrolowane i zarządzane przez wyznaczone osoby, a każda osoba nie może wykonać elementu Runbook w piaskownicy platformy Azure, tylko w hybrydowych procesach roboczych elementu Runbook.

W tym artykule znajduje się niestandardowa definicja usługi Azure Policy, która ułatwia kontrolowanie tych działań przy użyciu następujących operacji interfejsu API REST usługi Automation. Szczególnie:

Te zasady są oparte na runOn właściwości . Zasady weryfikują wartość właściwości, która powinna zawierać nazwę istniejącej grupy hybrydowych procesów roboczych elementu Runbook. Jeśli wartość ma wartość null, jest interpretowana jako żądanie tworzenia zadania, harmonogramu zadań lub elementu webhook jest przeznaczone dla piaskownicy platformy Azure, a żądanie zostanie odrzucone.

Wymagane uprawnienia

Aby uzyskać uprawnienia do zasobów usługi Azure Policy, musisz być członkiem roli Właściciel na poziomie subskrypcji.

Tworzenie i przypisywanie definicji zasad

W tym miejscu utworzymy regułę zasad, a następnie przypiszemy ją do grupy zarządzania lub subskrypcji i opcjonalnie określimy grupę zasobów w subskrypcji. Jeśli jeszcze nie znasz języka zasad, zapoznaj się z artykułem dotyczącym struktury definicji zasad, aby dowiedzieć się, jak określić strukturę definicji zasad.

  1. Użyj poniższego fragmentu kodu JSON, aby utworzyć plik JSON o nazwie 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. Uruchom następujące polecenie programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure, aby utworzyć definicję zasad przy użyciu pliku 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
    

    Polecenie tworzy definicję zasad o nazwie Audit Enforce Jobs on Automation Hybrid Runbook Workers (Wymuszanie zadań inspekcji w hybrydowych procesach roboczych elementów Runbook usługi Automation). Aby uzyskać więcej informacji na temat innych parametrów, których można użyć, zobacz az policy definition create.

    Po wywołaniu bez parametrów az policy definition create lokalizacji domyślnie zapisuje definicję zasad w wybranej subskrypcji kontekstu sesji. Aby zapisać definicję w innej lokalizacji, użyj następujących parametrów:

    • subskrypcja — zapisz w innej subskrypcji. Wymaga wartości identyfikatora GUID dla identyfikatora subskrypcji lub wartości ciągu dla nazwy subskrypcji.
    • management-group — zapisywanie w grupie zarządzania. Wymaga wartości ciągu.

  1. Po utworzeniu definicji zasad można utworzyć przypisanie zasad, uruchamiając następujące polecenia:

    az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
    

    Parametr az policy assignment create zakresu działa z grupą zarządzania, subskrypcją, grupą zasobów lub pojedynczym zasobem. Parametr używa pełnej ścieżki zasobu. Wzorzec zakresu dla każdego kontenera jest następujący. Zastąp {rName}wartości , {rgName}, {subId}i {mgName} nazwą zasobu, nazwą grupy zasobów, identyfikatorem subskrypcji i nazwą grupy zarządzania. {rType} element zostanie zastąpiony typem zasobu, takim jak Microsoft.Compute/virtualMachines dla maszyny wirtualnej.

    • Zasób- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grupa zasobów — /subscriptions/{subID}/resourceGroups/{rgName}
    • Subskrypcja- /subscriptions/{subID}
    • Grupa zarządzania — /providers/Microsoft.Management/managementGroups/{mgName}

    Identyfikator definicji usługi Azure Policy można uzyskać przy użyciu programu PowerShell za pomocą następującego polecenia:

    az policy definition show --name 'Audit Enforce Jobs on Automation Hybrid Runbook Workers'
    

    Identyfikator definicji zasad dla utworzonej definicji zasad powinien przypominać następujący przykład:

    "/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Enforce Jobs on Automation Hybrid Runbook Workers"
    

  1. Zaloguj się w witrynie Azure Portal.

  2. Uruchom usługę Azure Policy w witrynie Azure Portal, wybierając pozycję Wszystkie usługi, a następnie wyszukując i wybierając pozycję Zasady.

  3. Wybierz pozycję Zgodność w lewej części strony. Następnie znajdź utworzone przypisanie zasad.

    Zrzut ekranu przedstawiający pulpit nawigacyjny usługi Azure Policy.

Gdy jedna z operacji REST usługi Automation jest wykonywana bez odwołania do hybrydowego procesu roboczego elementu Runbook w treści żądania, kod odpowiedzi 403 jest zwracany z błędem podobnym do poniższego przykładu wskazującego na próbę wykonania operacji w piaskownicy platformy 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": {}
        }
      }
    ]
  }
}

Podjęta operacja jest również rejestrowana w dzienniku aktywności konta usługi Automation, podobnie jak w poniższym przykładzie.

Przykład dziennika aktywności dla wykonania zadania, które zakończyło się niepowodzeniem.

Następne kroki

Aby pracować z elementami Runbook, zobacz Zarządzanie elementami Runbook w usłudze Azure Automation.