Använda Azure Policy för att framtvinga jobbkörning på Hybrid Runbook Worker
Viktigt!
- Från och med den 1 april 2025 stoppas alla jobb som körs på agentbaserad Hybrid Worker.
- Azure Automation Agent-baserade User Hybrid Runbook Worker (Windows och Linux) har dragits tillbaka den 31 augusti 2024 och stöds inte längre. Följ riktlinjerna för hur du migrerar från en befintlig Agent-baserad User Hybrid Runbook Workers till tilläggsbaserade hybridarbetare.
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 Portal, 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.
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')]" } } } }
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 .
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 på
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 exempelMicrosoft.Compute/virtualMachines
för en virtuell dator.- Resurs-
/subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
- Resursgrupp –
/subscriptions/{subID}/resourceGroups/{rgName}
- Abonnemang-
/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"
- Resurs-
Logga in på Azure-portalen.
Starta Azure Policy-tjänsten i Azure Portal genom att välja Alla tjänster och sedan söka efter och välja Princip.
Välj Efterlevnad till vänster på sidan. Leta sedan upp den principtilldelning som du skapade.
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/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": {}
}
}
]
}
}
Åtgärdens försök loggas också i Automation-kontots aktivitetslogg, ungefär som i följande exempel.
Nästa steg
Information om hur du arbetar med runbooks finns i Hantera runbooks i Azure Automation.