Share via


Använda Azure Policy för att framtvinga jobbkörning på Hybrid Runbook Worker

Viktigt!

Azure Automation-agentbaserad Hybrid Runbook Worker för användare (Windows och Linux) dras tillbaka den 31 augusti 2024 och stöds inte efter det datumet. Du måste slutföra migreringen av befintliga agentbaserade Hybrid Runbook Workers för användare till tilläggsbaserade arbetsroller före den 31 augusti 2024. Från och med den 1 november 2023 skulle det dessutom inte vara möjligt att skapa nya agentbaserade hybridarbetare. Läs mer.

När du startar en runbook på en Hybrid Runbook Worker används ett Kör på-alternativ som gör att du kan ange namnet på en Hybrid Runbook Worker-grupp när du initierar från Azure-portalen, med Azure PowerShell eller REST-API:et. När en grupp har angetts hämtar och kör en av arbetarna i den gruppen runbooken. Om din runbook inte anger det här alternativet kör Azure Automation runbooken i Azure-sandbox-miljön.

Alla i din organisation som är medlem i Automation Job Operator eller senare kan skapa runbook-jobb. Du kan använda Azure Policy för att hantera Runbook-körning som riktar sig mot en Hybrid Runbook Worker-grupp i ditt Automation-konto. Detta bidrar till att upprätthålla organisationens standarder och se till att dina automationsjobb styrs och hanteras av de utsedda, och vem som helst kan inte köra en runbook på en Azure-sandbox-miljö, endast på Hybrid Runbook-arbetare.

En anpassad Azure Policy-definition ingår i den här artikeln som hjälper dig att styra dessa aktiviteter med hjälp av följande REST API-åtgärder för Automation. Specifikt:

Den här principen baseras på runOn egenskapen . Principen verifierar värdet för egenskapen, som ska innehålla namnet på en befintlig Hybrid Runbook Worker-grupp. Om värdet är null tolkas det som att create-begäran för jobbet, jobbschemat eller webhooken är avsedd för Azure-sandbox-miljön och begäran nekas.

Behörigheter som krävs

Du måste vara medlem i rollen Ägare på prenumerationsnivå för behörighet till Azure Policy-resurser.

Skapa och tilldela principdefinitionen

Här skapar vi principregeln och tilldelar den till antingen en hanteringsgrupp eller prenumeration, och kan också ange en resursgrupp i prenumerationen. Om du ännu inte är bekant med principspråket kan du titta på principdefinitionsstrukturen för att se hur du ska strukturera principdefinitionen.

  1. Använd följande JSON-kodfragment för att skapa en JSON-fil med namnet 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. Kör följande Azure PowerShell- eller Azure CLI-kommando för att skapa en principdefinition med hjälp av filen 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
    

    Kommandot skapar en principdefinition med namnet Granska Framtvinga jobb på Automation Hybrid Runbook Workers. Mer information om andra parametrar som du kan använda finns i az policy definition create.

    När det anropas utan platsparametrar az policy definition create sparas principdefinitionen som standard i den valda prenumerationen för sessionskontexten. Om du vill spara definitionen på en annan plats använder du följande parametrar:

    • prenumeration – Spara till en annan prenumeration. Kräver ett GUID-värde för prenumerations-ID:t eller ett strängvärde för prenumerationsnamnet.
    • hanteringsgrupp – Spara i en hanteringsgrupp. Kräver ett strängvärde .

  1. När du har skapat din principdefinition kan du skapa en principtilldelning genom att köra följande kommandon:

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

    Omfångsparametern az policy assignment create fungerar med hanteringsgrupp, prenumeration, resursgrupp eller en enskild resurs. Parametern använder en fullständig resurssökväg. Mönstret för omfånget för varje container är följande. Ersätt {rName}, {rgName}, {subId}och {mgName} med resursnamnet, resursgruppens namn, prenumerations-ID respektive hanteringsgruppsnamn. {rType} skulle ersättas med resurstypen för resursen, till exempel Microsoft.Compute/virtualMachines för en virtuell dator.

    • Resurs- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Resursgrupp – /subscriptions/{subID}/resourceGroups/{rgName}
    • Prenumeration- /subscriptions/{subID}
    • Hanteringsgrupp - /providers/Microsoft.Management/managementGroups/{mgName}

    Du kan hämta Definitions-ID:t för Azure Policy med hjälp av PowerShell med följande kommando:

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

    Principdefinitions-ID:t för den principdefinition som du skapade bör likna följande exempel:

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

  1. Logga in på Azure-portalen.

  2. Starta Azure Policy-tjänsten i Azure-portalen genom att välja Alla tjänster och sedan söka efter och välja Princip.

  3. Välj Efterlevnad till vänster på sidan. Leta sedan upp den principtilldelning som du skapade.

    Screenshot of Azure Policy dashboard.

När en av Automation REST-åtgärderna körs utan referens till en Hybrid Runbook Worker i begärandetexten returneras en 403-svarskod med ett fel som liknar följande exempel som anger att åtgärden försökte köras i en Azure-sandbox-miljö:

{
  "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": {}
        }
      }
    ]
  }
}

Åtgärdens försök loggas också i Automation-kontots aktivitetslogg, ungefär som i följande exempel.

Example of Activity log for failed job execution.

Nästa steg

Information om hur du arbetar med runbooks finns i Hantera runbooks i Azure Automation.