Menggunakan Azure Policy untuk memberlakukan eksekusi pekerjaan pada Hybrid Runbook Worker

Penting

Pekerja Runbook Hibrida Pengguna berbasis Agen Azure Automation (Windows dan Linux) akan dihentikan pada 31 Agustus 2024 dan tidak akan didukung setelah tanggal tersebut. Anda perlu menyelesaikan migrasi Pekerja Runbook Hibrida Pengguna berbasis Agen yang sudah ada ke Pekerja berbasis Ekstensi sebelum 31 Agustus 2024. Selain itu, mulai 1 November 2023, membuat Hybrid Worker berbasis Agen baru tidak akan mungkin dilakukan. Pelajari lebih lanjut.

Memulai runbook pada Hybrid Runbook Worker menggunakan opsi Jalankan pada yang memungkinkan Anda menentukan nama grup Hybrid Runbook Worker saat memulai dari portal Microsoft Azure, dengan Azure PowerShell, atau REST API. Saat grup ditentukan, salah satu pekerja dalam grup tersebut mengambil dan menjalankan runbook. Jika runbook Anda tidak menentukan opsi ini, Azure Automation menjalankan runbook dalam kotak pasir Azure.

Siapa pun di organisasi Anda yang merupakan anggota Operator Pekerjaan Automation atau lebih tinggi dapat membuat pekerjaan runbook. Untuk mengelola eksekusi runbook yang menargetkan grup Hybrid Runbook Worker di akun Automation, Anda dapat menggunakan Azure Policy. Ini membantu menegakkan standar organisasi dan memastikan pekerjaan otomatisasi Anda dikontrol dan dikelola oleh mereka yang ditunjuk, dan siapa pun tidak dapat mengeksekusi runbook di kotak pasir Azure, hanya pada pekerja Hybrid Runbook.

Definisi Azure Policy kustom disertakan dalam artikel ini untuk membantu Anda mengontrol aktivitas ini menggunakan operasi REST API Automation berikut. Khususnya:

Kebijakan ini didasarkan pada properti runOn. Kebijakan ini memvalidasi nilai properti, yang seharusnya berisi nama grup Hybrid Runbook Worker yang ada. Jika nilainya null, ini ditafsirkan sebagai permintaan buat untuk pekerjaan, jadwal pekerjaan, atau webhook ditujukan untuk kotak pasir Azure, dan permintaan ditolak.

Izin yang diperlukan

Anda harus menjadi anggota peran Pemilik di tingkat langganan untuk izin ke sumber daya Azure Policy.

Membuat dan menetapkan definisi kebijakan

Di sini kami menyusun aturan kebijakan lalu menetapkannya ke grup manajemen atau langganan, dan secara opsional menentukan grup sumber daya dalam langganan. Jika Anda belum terbiasa dengan bahasa kebijakan, merujuk ke struktur definisi kebijakan untuk cara menyusun definisi kebijakan.

  1. Menggunakan cuplikan JSON berikut untuk membuat file JSON dengan nama 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. Jalankan perintah Azure PowerShell atau Azure CLI berikut ini untuk membuat definisi kebijakan menggunakan file AuditAutomationHRWJobExecution.jso.

     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
    

    Perintah ini membuat definisi kebijakan bernama Pekerjaan Pemberlakuan Audit pada Automation Hybrid Runbook Workers. Untuk informasi selengkapnya tentang parameter lain yang dapat Anda gunakan, lihat az policy definition create.

    Ketika dipanggil tanpa parameter lokasi, az policy definition create akan default ke menyimpan definisi kebijakan dalam langganan yang dipilih dari konteks sesi. Untuk menyimpan definisi ke lokasi lain, gunakan parameter berikut:

    • subscription - Simpan ke langganan lain. Memerlukan nilai GUID untuk ID langganan atau nilai string untuk nama langganan.
    • management-group - Simpan ke grup manajemen. Membutuhkan nilai string.

  1. Setelah membuat definisi kebijakan, Anda bisa membuat penetapan kebijakan dengan menjalankan perintah berikut:

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

    Parameter scope pada az policy assignment create berfungsi dengan grup manajemen, langganan, grup sumber daya, atau sumber daya tunggal. Parameter menggunakan jalur sumber daya lengkap. Pola scope untuk setiap kontainer adalah sebagai berikut. Ganti {rName}, {rgName}, {subId}, dan {mgName} masing-masing dengan nama sumber daya, nama grup sumber daya, ID langganan, dan nama grup manajemen. {rType} akan diganti dengan jenis sumber daya dari sumber daya, seperti Microsoft.Compute/virtualMachines untuk VM.

    • Sumber daya - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grup sumber daya - /subscriptions/{subID}/resourceGroups/{rgName}
    • Langganan - /subscriptions/{subID}
    • Grup manajemen - /providers/Microsoft.Management/managementGroups/{mgName}

    Anda bisa mendapatkan ID Definisi Azure Policy menggunakan PowerShell dengan perintah berikut:

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

    ID definisi kebijakan untuk definisi kebijakan yang Anda buat harus menyerupai contoh berikut:

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

  1. Masuk ke portal Azure.

  2. Luncurkan layanan Azure Policy di portal Microsoft Azure dengan memilih Semua layanan, lalu cari dan pilih Kebijakan.

  3. Pilih Kepatuhan di sisi kiri halaman. Lalu temukan penetapan kebijakan yang Anda buat.

    Screenshot of Azure Policy dashboard.

Ketika salah satu operasi REST Automation dijalankan tanpa merujuk ke Hybrid Runbook Worker dalam isi permintaan, kode respons 403 dikembalikan dengan kesalahan yang mirip dengan contoh berikut yang menunjukkan operasi percobaan eksekusi pada kotak pasir 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": {}
        }
      }
    ]
  }
}

Percobaan operasi juga dicatat dalam Log Aktivitas akun Automasi, mirip dengan contoh berikut.

Example of Activity log for failed job execution.

Langkah berikutnya

Untuk bekerja dengan runbook, lihat Mengelola runbook di Azure Automation.