Delen via


Azure Policy gebruiken om taakuitvoering af te dwingen op Hybrid Runbook Worker

Belangrijk

Azure Automation Hybrid Runbook Worker op basis van een agent (Windows en Linux) wordt op 31 augustus 2024 buiten gebruik gesteld en wordt na die datum niet meer ondersteund. U moet vóór 31 augustus 2024 de migratie van bestaande Hybrid Runbook Workers voor gebruikers op basis van een agent voltooien naar Workers op basis van extensies. Bovendien zou het vanaf 1 november 2023 niet mogelijk zijn om nieuwe hybride werknemers op basis van agents te maken. Meer informatie.

Het starten van een runbook op een Hybrid Runbook Worker maakt gebruik van een optie Uitvoeren op waarmee u de naam van een Hybrid Runbook Worker-groep kunt opgeven bij het initiëren vanuit Azure Portal, met de Azure PowerShell of REST API. Wanneer een groep is opgegeven, haalt een van de werknemers in die groep het runbook op en voert deze uit. Als uw runbook deze optie niet opgeeft, voert Azure Automation het runbook uit in de Azure-sandbox.

Iedereen in uw organisatie die lid is van de Automation-taakoperator of hoger, kan runbooktaken maken. Als u runbookuitvoering wilt beheren die gericht is op een Hybrid Runbook Worker-groep in uw Automation-account, kunt u Azure Policy gebruiken. Dit helpt bij het afdwingen van organisatiestandaarden en ervoor te zorgen dat uw automatiseringstaken worden beheerd en beheerd door degenen die zijn aangewezen, en niemand kan een runbook uitvoeren in een Azure-sandbox, alleen op Hybrid Runbook Workers.

Een aangepaste Azure Policy-definitie is opgenomen in dit artikel om u te helpen bij het beheren van deze activiteiten met behulp van de volgende Automation REST API-bewerkingen. Specifiek:

Dit beleid is gebaseerd op de runOn eigenschap. Het beleid valideert de waarde van de eigenschap, die de naam van een bestaande Hybrid Runbook Worker-groep moet bevatten. Als de waarde null is, wordt deze geïnterpreteerd als de aanvraag voor het maken van de taak, taakplanning of webhook is bedoeld voor de Azure-sandbox en wordt de aanvraag geweigerd.

Machtigingen vereist

U moet lid zijn van de rol Eigenaar op abonnementsniveau voor machtigingen voor Azure Policy-resources.

De beleidsdefinitie maken en toewijzen

Hier stellen we de beleidsregel op en wijzen we deze vervolgens toe aan een beheergroep of abonnement en geven we desgewenst een resourcegroep op in het abonnement. Als u nog niet vertrouwd bent met de beleidstaal, kunt u policy definition structure raadplegen voor informatie over het structureren van de beleidsdefinitie.

  1. Gebruik het volgende JSON-fragment om een JSON-bestand te maken met de naam 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. Voer de volgende Azure PowerShell- of Azure CLI-opdracht uit om een beleidsdefinitie te maken met behulp van het bestand 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
    

    Met de opdracht maakt u een beleidsdefinitie met de naam Audit Enforce Jobs in Automation Hybrid Runbook Workers. Zie az policy definition create voor meer informatie over andere parameters die u kunt gebruiken.

    Wanneer u zonder locatieparameters wordt aangeroepen, az policy definition create wordt standaard de beleidsdefinitie opgeslagen in het geselecteerde abonnement van de context van de sessies. Gebruik de volgende parameters om de definitie op een andere locatie op te slaan:

    • abonnement : opslaan in een ander abonnement. Vereist een GUID-waarde voor de abonnements-id of een tekenreekswaarde voor de abonnementsnaam.
    • beheergroep : opslaan in een beheergroep. Vereist een tekenreekswaarde .

  1. Nadat u de beleidsdefinitie hebt gemaakt, kunt u een beleidstoewijzing maken door de volgende opdrachten uit te voeren:

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

    De bereikparameter werkt az policy assignment create met beheergroep, abonnement, resourcegroep of één resource. De parameter maakt gebruik van een volledig resourcepad. Het patroon voor het bereik voor elke container is als volgt. Vervang,{rgName}, {subId}en {mgName} door {rName}respectievelijk de resourcenaam, de naam van de resourcegroep, de abonnements-id en de naam van de beheergroep. {rType} wordt vervangen door het resourcetype van de resource, zoals Microsoft.Compute/virtualMachines voor een VIRTUELE machine.

    • Resource- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Resourcegroep - /subscriptions/{subID}/resourceGroups/{rgName}
    • Abonnement- /subscriptions/{subID}
    • Beheergroep - /providers/Microsoft.Management/managementGroups/{mgName}

    U kunt de Definitie-id van Azure Policy ophalen met behulp van PowerShell met de volgende opdracht:

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

    De beleidsdefinitie-id voor de beleidsdefinitie die u hebt gemaakt, moet eruitzien als in het volgende voorbeeld:

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

  1. Meld u aan bij de Azure-portal.

  2. Start de Azure Policy-service in Azure Portal door Alle services te selecteren en dan Beleid te zoeken en te selecteren.

  3. Selecteer Naleving links op de pagina. Zoek vervolgens de beleidstoewijzing die u hebt gemaakt.

    Screenshot of Azure Policy dashboard.

Wanneer een van de Automation REST-bewerkingen wordt uitgevoerd zonder te verwijzen naar een Hybrid Runbook Worker in de aanvraagbody, wordt een 403-antwoordcode geretourneerd met een fout die vergelijkbaar is met het volgende voorbeeld dat aangeeft dat de bewerking is uitgevoerd in een Azure-sandbox:

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

De poging tot bewerking wordt ook vastgelegd in het activiteitenlogboek van het Automation-account, vergelijkbaar met het volgende voorbeeld.

Example of Activity log for failed job execution.

Volgende stappen

Zie Runbooks beheren in Azure Automation om te werken met runbooks.