Sdílet prostřednictvím


Použití Azure Policy k vynucení provádění úloh v procesu Hybrid Runbook Worker

Důležité

Funkce Hybrid Runbook Worker (Windows a Linux) založená na agentovi Azure Automation se 31. srpna 2024 vyřadila z provozu a už se nepodporuje. Postupujte podle pokynů k migraci z existujícího hybridního prostředí Runbook Worker založeného na agentech na hybridní pracovní procesy založené na rozšířeních.

Spuštění runbooku v procesu Hybrid Runbook Worker používá možnost Spustit při , která umožňuje určit název skupiny Hybrid Runbook Worker při iniciování z webu Azure Portal pomocí Azure PowerShellu nebo rozhraní REST API. Pokud je zadána skupina, jeden z pracovních procesů v této skupině načte a spustí runbook. Pokud runbook tuto možnost nezadá, Azure Automation spustí runbook v sandboxu Azure.

Úlohy runbooku může vytvářet kdokoli ve vaší organizaci, který je členem operátora úlohy automatizace nebo vyšší. Ke správě spouštění runbooků, které cílí na skupinu Hybrid Runbook Worker ve vašem účtu Automation, můžete použít Azure Policy. To pomáhá vynucovat standardy organizace a zajistit, aby vaše úlohy automatizace byly řízeny a spravovány určenými úlohami a nikdo nemůže spustit runbook v sandboxu Azure, pouze u pracovních procesů hybridních runbooků.

Vlastní definice služby Azure Policy je součástí tohoto článku, která vám pomůže řídit tyto aktivity pomocí následujících operací rozhraní REST API služby Automation. Konkrétně:

Tato zásada je založená runOn na vlastnosti. Zásada ověří hodnotu vlastnosti, která by měla obsahovat název existující skupiny Hybrid Runbook Worker. Pokud je hodnota null, interpretuje se jako požadavek na vytvoření úlohy, plánu úlohy nebo webhooku určený pro sandbox Azure a požadavek se odmítne.

Požadována oprávnění

Abyste měli oprávnění k prostředkům Azure Policy, musíte být členem role Vlastník na úrovni předplatného.

Vytvoření a přiřazení definice zásady

Tady vytvoříme pravidlo zásad a pak ho přiřadíme buď skupině pro správu, nebo předplatnému, a volitelně určíme skupinu prostředků v předplatném. Pokud ještě nejste obeznámeni s jazykem zásad, podívejte se na strukturu definic zásad a zjistěte jak strukturovat definici zásady.

  1. Pomocí následujícího fragmentu kódu JSON vytvořte soubor JSON s názvem 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. Spuštěním následujícího příkazu Azure PowerShellu nebo Azure CLI vytvořte definici zásady pomocí souboru 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
    

    Příkaz vytvoří definici zásady s názvem Audit Enforce Jobs on Automation Hybrid Runbook Worker. Další informace o dalších parametrech, které můžete použít, najdete v tématu az policy definition create.

    Při zavolání bez parametrů az policy definition create umístění se ve výchozím nastavení uloží definice zásady ve vybraném předplatném kontextu relací. Pokud chcete definici uložit do jiného umístění, použijte následující parametry:

    • předplatné – Uložte ho do jiného předplatného. Vyžaduje hodnotu GUID pro ID předplatného nebo řetězcovou hodnotu pro název předplatného.
    • skupina pro správu – Uložte ji do skupiny pro správu. Vyžaduje řetězcovou hodnotu.

  1. Po vytvoření definice zásady můžete vytvořit přiřazení zásady spuštěním následujících příkazů:

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

    Parametr oboru funguje az policy assignment create se skupinou pro správu, předplatným, skupinou prostředků nebo jedním prostředkem. Parametr používá úplnou cestu k prostředku. Vzor pro obor pro každý kontejner je následující. Nahraďte {rName}název prostředku, {mgName} {rgName}{subId}název skupiny prostředků, ID předplatného a název skupiny pro správu. {rType}by se nahradila typem prostředku prostředku, například Microsoft.Compute/virtualMachines pro virtuální počítač.

    • Zdroj- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Skupina prostředků – /subscriptions/{subID}/resourceGroups/{rgName}
    • Předplatné- /subscriptions/{subID}
    • Skupina pro správu – /providers/Microsoft.Management/managementGroups/{mgName}

    ID definice azure Policy můžete získat pomocí PowerShellu pomocí následujícího příkazu:

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

    ID definice zásady pro definici zásady, kterou jste vytvořili, by se mělo podobat následujícímu příkladu:

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

  1. Přihlaste se k portálu Azure.

  2. Spusťte službu Azure Policy na webu Azure Portal tak, že vyberete Všechny služby a pak vyhledáte a vyberete Zásady.

  3. Na levé straně stránky vyberte Dodržování předpisů . Pak vyhledejte přiřazení zásad, které jste vytvořili.

    Snímek obrazovky řídicího panelu Azure Policy

Když se spustí jedna z operací REST služby Automation bez odkazu na funkci Hybrid Runbook Worker v textu požadavku, vrátí se kód odpovědi 403 s chybou podobnou následujícímu příkladu, která značí, že operace se pokusila provést v sandboxu 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/75475e1e-9643-4f3d-859e-055f4c31b458/resourceGroups/MAIC-RG/providers/Microsoft.Authorization/policyAssignments/fd5e2cb3842d4eefbc857917\"},\"policyDefinition\":{\"name\":\"Enforce Jobs on Automation Hybrid Runbook Workers\",\"id\":\"/subscriptions/75475e1e-9643-4f3d-859e-055f4c31b458/providers/Microsoft.Authorization/policyDefinitions/4fdffd35-fd9f-458e-9779-94fe33401bfc\"}}]'.",
    "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/75475e1e-9643-4f3d-859e-055f4c31b458/providers/Microsoft.Authorization/policyDefinitions/4fdffd35-fd9f-458e-9779-94fe33401bfc",
          "policyDefinitionName": "4fdffd35-fd9f-458e-9779-94fe33401bfc",
          "policyDefinitionEffect": "Deny",
          "policyAssignmentId": "/subscriptions/75475e1e-9643-4f3d-859e-055f4c31b458/resourceGroups/MAIC-RG/providers/Microsoft.Authorization/policyAssignments/fd5e2cb3842d4eefbc857917",
          "policyAssignmentName": "fd5e2cb3842d4eefbc857917",
          "policyAssignmentDisplayName": "Enforce Jobs on Automation Hybrid Runbook Workers",
          "policyAssignmentScope": "/subscriptions/75475e1e-9643-4f3d-859e-055f4c31b458/resourceGroups/MAIC-RG",
          "policyAssignmentParameters": {}
        }
      }
    ]
  }
}

Pokus o operaci se také protokoluje v protokolu aktivit účtu Automation, podobně jako v následujícím příkladu.

Příklad protokolu aktivit pro neúspěšné spuštění úlohy

Další kroky

Pokud chcete pracovat s runbooky, přečtěte si téma Správa runbooků ve službě Azure Automation.