分享方式:


使用 Azure 原則在混合式 Runbook 背景工作角色上強制作業執行

重要

Azure 自動化代理程式型使用者混合式 Runbook 背景工作角色 (Windows 和 Linux) 已在 2024 年 8 月 31 日淘汰,不再受到支援。 請遵循如何從現有代理程式型使用者混合式 Runbook 背景工作角色移轉至延伸模組型混合式背景工作角色的指導方針。

在混合式 Runbook 背景工作角色上啟動 Runbook 會使用 [執行位置] 選項,讓您可以在使用 Azure 入口網站、Azure PowerShell 或 REST API 起始時指定混合式 Runbook 背景工作角色群組的名稱。 指定群組時,該群組中的其中一個背景工作角色會擷取並執行 Runbook。 如果您的 Runbook 未指定此選項,Azure 自動化會在 Azure 沙箱中執行 Runbook。

組織中屬於自動化作業操作員或更高角色成員的任何使用者都可以建立 Runbook 作業。 若要管理自動化帳戶中以混合式 Runbook 背景工作角色群組為目標的 Runbook 執行,您可以使用 Azure 原則。 這有助於強制執行組織標準,並確保自動化作業受到這些指定標準的控制和管理,而且任何使用者都無法在 Azure 沙箱上執行 Runbook,只能在混合式 Runbook 背景工作角色上執行。

本文所含的自訂 Azure 原則定義可協助您使用下列自動化 REST API 作業來控制這些活動。 具體而言:

此原則是以 runOn 屬性為基礎。 此原則會驗證屬性的值,其中應包含現有混合式 Runbook 背景工作角色群組的名稱。 如果值為 null,則會解譯為向 Azure 沙箱發出作業、作業排程或 Webhook 的建立要求,且要求遭到拒絕。

需要的權限

您必須是訂用帳戶層級的擁有者角色成員,才能具備 Azure 原則資源的存取權限。

建立及指派原則定義

在這裡,我們會撰寫原則規則,然後指派給管理群組或訂用帳戶,並選擇性地在訂用帳戶中指定資源群組。 如果您還不熟悉原則的語言,請參考原則定義結構來了解如何建構原則定義。

  1. 使用下列 JSON 程式碼片段建立名稱為 AuditAutomationHRWJobExecution.json 的 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. 執行下列 Azure PowerShell 或 Azure CLI 命令,以使用 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
    

    此命令會建立名為在自動化混合式 Runbook 背景工作角色稽核強制執行作業的原則定義。 如需有關其他可供您使用之參數的詳細資訊,請參閱 az policy definition create

    若在未指定位置參數的情況下呼叫,az policy definition create 會預設儲存工作階段內容中所選訂用帳戶的原則定義。 若要將定義儲存至不同位置,請使用下列參數:

    • subscription - 儲存到不同的訂用帳戶。 需要一個 GUID 值來用於訂用帳戶 ID,或需要一個「字串」值來用於訂用帳戶名稱。
    • management-group - 儲存到管理群組。 需要字串值。

  1. 建立原則定義之後,您可以執行下列命令來建立原則指派:

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

    az policy assignment create 上的 scope 參數可與管理群組、訂用帳戶、資源群組或單一資源搭配使用。 此參數使用完整資源路徑。 以下是每個容器的 scope 模式。 請將 {rName}{rgName}{subId}{mgName} 分別取代為您的資源名稱、資源群組名稱、訂用帳戶 ID 及管理群組名稱。 {rType} 會取代為資源的資源類型,例如,如果是 VM,則為 Microsoft.Compute/virtualMachines

    • 資源 - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • 資源群組 - /subscriptions/{subID}/resourceGroups/{rgName}
    • 訂用帳戶 - /subscriptions/{subID}
    • 管理群組 - /providers/Microsoft.Management/managementGroups/{mgName}

    您可以使用 PowerShell 搭配下列命令來取得 Azure 原則定義識別碼:

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

    針對您所建立的原則定義,其原則定義識別碼應該類似下列範例:

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

  1. 登入 Azure 入口網站

  2. 藉由選取 [所有服務] 然後搜尋並選取 [原則],在 Azure 入口網站中啟動 Azure 原則服務。

  3. 選取頁面左側的 [合規性]。 然後找出您所建立的原則指派。

    Azure 原則儀表板的螢幕擷取畫面。

若執行其中一個自動化 REST 作業而未參考要求本文中的混合式 Runbook 背景工作角色時,即會傳回 403 回應碼並產生類似下列範例的錯誤,指出作業嘗試在 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": {}
        }
      }
    ]
  }
}

嘗試的作業也會記錄在自動化帳戶的 [活動記錄] 中,類似於下列範例。

作業執行失敗的活動記錄範例。

下一步

若要使用 Runbook,請參閱在 Azure 自動化中管理 Runbook