مشاركة عبر


التشغيل السريع: تعيين نهج لتحديد الموارد غير المتوافقة باستخدام "Terraform"

الخطوة الأولى في فهم التوافق في Azure هي تحديد حالة مواردك. يعمل التشغيل السريع على تحديد الخطوات اللازمة من خلال عملية تعيين نهج لتحديد الأجهزة الافتراضية التي لا تستخدم الأقراص المُدارة.

في نهاية هذه العملية، يمكنك تحديد الأجهزة الظاهرية التي لا تستخدم الأقراص المدارة عبر الاشتراك. فإنها غير متوافقة مع تعيين النهج.

عند تعيين نهج مضمن أو تعريف مبادرة، من الاختياري الإشارة إلى إصدار. تعيينات النهج للتعريفات المضمنة افتراضيا إلى أحدث إصدار وترث تلقائيا تغييرات الإصدار الثانوية ما لم يتم تحديد خلاف ذلك.

المتطلبات الأساسية

إنشاء تكوين "Terraform" والمتغير ومخرجات الملف

بالنسبة لهذا التشغيل السريع، يُمكن تعيين نهج بجانب تعيين الأجهزة الظاهرية الخاصة بالتدقيق، والتي لا تستخدم تعريف الأقراص المُدارة. يعمل تعريف النهج هذا على تحديد الموارد غير المتوافقة مع الشروط المحددة في تعريف النهج.

تكوين تكوين Terraform والمتغير وملفات الإخراج. تستخدم موارد "Terraform" الخاصة بنهج "Azure" موفّر خدمات "Azure".

  1. قم بإنشاء مجلد جديد باسم policy-assignment وبعدها قم بتغيير الدلائل فيه.

  2. قم بإنشاء main.tf باستخدام الكود التالي:

    إشعار

    لإنشاء تعيين نهج في مجموعة إدارة، استخدم مورد azurerm_management_group_policy_assignment، بالنسبة لمجموعة الموارد، استخدم azurerm_resource_group_policy_assignment وللاشتراك استخدم مورد azurerm_subscription_policy_assignment.

      provider "azurerm" {
        features {}
      }
    
      terraform {
      required_providers {
          azurerm = {
              source = "hashicorp/azurerm"
              version = ">= 2.96.0"
          }
        }
      }
    
      resource "azurerm_subscription_policy_assignment" "auditvms" {
      name = "audit-vm-manageddisks"
      subscription_id = var.cust_scope
      policy_definition_id = "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d"
      description = "Shows all virtual machines not using managed disks"
      display_name = "Audit VMs without managed disks assignment"
      }
    
  3. قم بإنشاء variables.tf باستخدام الكود التالي:

    variable "cust_scope" {
        default = "{scope}"
    }
    

    يحدد النطاق الموارد أو مجموعة الموارد التي سيُفرض عليهما تعيين النهج. ويمكن أن تتراوح من مجموعة إدارة إلى مورد فردي. تأكد من استبدال {scope} بأحد الأنماط التالية استنادا إلى المورد المعلن:

    • الاشتراك: /subscriptions/{subscriptionId}
    • مجموعة الموارد: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • المورّد: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  4. قم بإنشاء output.tf باستخدام الكود التالي:

    output "assignment_id" {
        value = azurerm_subscription_policy_assignment.auditvms.id
    }
    

تهيئة "Terraform" وإنشاء خطة

تهيئة Terraform لتنزيل الموفرين الضروريين ثم إنشاء خطة.

  1. تشغيل أمر "terraform init". يعمل هذا الأمر على تحميل وحدات "Azure" اللازمة لإنشاء موارد "Azure" في تكوين "Terraform".

    terraform init
    

     لقطة شاشة لتشغيل أمر

  2. المصادقة باستخدام "Azure CLI" لــ "Terraform". لمزيد من المعلومات، يُرجى الرجوع إلى "Azure Provider": المصادقة باستخدام "Azure CLI".

    az login
    
  3. قم بإنشاء خطة التنفيذ مع أمر خطة "terraform" وتحديد المعلمة.

    terraform plan -out assignment.tfplan
    

    لقطة شاشة لتشغيل أمر خطة

    إشعار

    للحصول على معلومات حول خطط التنفيذ الدائمة والأمان، يُرجى الرجوع إلى خطة "Terraform": تحذير الأمان.

تطبيق خطة التنفيذ الخاصة بــ "Terraform"

تطبيق خطة التنفيذ.

قم بتشغيل أمر تطبيق "terraform" وحدد assignment.tfplan ما تم إنشاؤه بالفعل.

terraform apply assignment.tfplan

 لقطة شاشة لتشغيل أمر تطبيق

Apply complete! Resources: 1 added, 0 changed, 0 destroyed. مع الرسالة، يتم الآن إنشاء تعيين النهج. منذ أن حددنا ملف outputs.tf، تم أيضاً إرجاع assignment_id.

تحديد الموارد غير المتوافقة

لعرض الموارد غير المتوافقة مع هذا التعيين الجديد، استخدم assignment_id الذي تم إرجاعه بواسطة terraform apply. بعد ذلك، قم بتشغيل الأمر التالي للحصول على معرّفات الموارد للموارد غير المتوافقة التي يتم إخراجها في ملف "JSON":

armclient post "/subscriptions/<subscriptionID>/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$filter=IsCompliant eq false and PolicyAssignmentId eq '<policyAssignmentID>'&$apply=groupby((ResourceId))" > <json file to direct the output with the resource IDs into>

تُشبه نتائجك المثال التالي:

{
  "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
  "@odata.count": 3,
  "value": [
    {
      "@odata.id": null,
      "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachineId>"
    },
    {
      "@odata.id": null,
      "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine2Id>"
    },
    {
      "@odata.id": null,
      "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "ResourceId": "/subscriptions/<subscriptionName>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine3ID>"
    }
  ]
}

تُعتبر النتائج مشابهة مع ما تراه عادةً مدرجاً ضمن الموارد غير المتوافقة في طريقة عرض مدخل "Azure".

تنظيف الموارد

لإزالة المهمة التي تم إنشاؤها، استخدم "Azure CLI" أو عكس خطة تنفيذ "Terraform" باستخدام terraform destroy.

  • Azure CLI

    az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
    
  • Terraform

    terraform destroy
    

الخطوات التالية

في هذا التشغيل السريع، قمت بتعيين تعريف نهج لتحديد الموارد غير المتوافقة في بيئة Azure.

لمعرفة المزيد حول تعيين نهج للتحقق من توافق الموارد الجديدة، تابع البرنامج التعليمي من أجل: