التشغيل السريع: تعيين نهج لتحديد الموارد غير المتوافقة باستخدام "Terraform"
تتمثل الخطوة الأولى في فهم التوافق في "Azure" في تحديد حالة مواردك. يعمل التشغيل السريع على تحديد الخطوات اللازمة من خلال عملية تعيين نهج لتحديد الأجهزة الافتراضية التي لا تستخدم الأقراص المُدارة.
في نهاية هذه العملية، ستحدد بنجاح الأجهزة الظاهرية التي لا تستخدم الأقراص المدارة عبر الاشتراك. فإنها غير متوافقة مع تعيين النهج.
المتطلبات الأساسية
- في حال لم تكن مشتركاً في "Azure"، يمكنك إنشاء حساب مجاني قبل البدء.
- الإصدار 0.12.0 لــ "Terraform" أو إصدار أعلى تم تكوينه في بيئتك. للاطلاع على الإرشادات، يُرجى الرجوع إلى تكوين "Terraform" باستخدام "Azure Cloud Shell".
- يتطلب هذا التشغيل السريع استخدام الإصدار 2.13.0 من "Azure CLI" أو الأحدث منه. للعثور على الإصدار، شغّل
az --version
. إذا كنت بحاجة إلى التثبيت أو الترقية، فيُرجى الرجوع إلى تثبيت Azure CLI.
إنشاء تكوين "Terraform" والمتغير ومخرجات الملف
بالنسبة لهذا التشغيل السريع، يمكنك تعيين نهج بجانب تعيينالأجهزة الظاهرية الخاصة بالتدقيق، والتي لا تستخدم الأقراص المُدارة (06a78e20-9358-41c9-923c-fb736d382a4d
). يعمل تعريف النهج هذا على تحديد الموارد غير المتوافقة مع الشروط المحددة في تعريف النهج.
أولاً، قم بإنشاء تكوين "Terraform" والمتغير ومخرجات الملف. تستخدم موارد "Terraform" الخاصة بنهج "Azure" موفّر خدمات "Azure".
قم بإنشاء مجلد جديد باسم
policy-assignment
وبعدها قم بتغيير الدلائل فيه.قم بإنشاء
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" }
قم بإنشاء
variables.tf
باستخدام الكود التالي:variable "cust_scope" { default = "{scope}" }
يحدد النطاق الموارد أو مجموعة الموارد التي سيُفرض عليهما تعيين النهج. يمكن أن تتراوح من مجموعة إدارة إلى مورّد فردي. تأكد من استبدال
{scope}
بأحد الأنماط التالية استنادا إلى المورد المعلن:- الاشتراك:
/subscriptions/{subscriptionId}
- مجموعة الموارد:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
- المورّد:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
- الاشتراك:
قم بإنشاء
output.tf
باستخدام الكود التالي:output "assignment_id" { value = azurerm_subscription_policy_assignment.auditvms.id }
تهيئة "Terraform" وإنشاء خطة
بعد ذلك، قم بتهيئة "Terraform" لتحميل مقدمي الخدمات الضروريين، وبعدها قم بإنشاء خطة.
تشغيل أمر "terraform init". يعمل هذا الأمر على تحميل وحدات "Azure" اللازمة لإنشاء موارد "Azure" في تكوين "Terraform".
terraform init
المصادقة باستخدام "Azure CLI" لــ "Terraform". لمزيد من المعلومات، يُرجى الرجوع إلى "Azure Provider": المصادقة باستخدام "Azure CLI".
az login
قم بإنشاء خطة التنفيذ مع أمر خطة "terraform" وتحديد المعلمة.
terraform plan -out assignment.tfplan
ملاحظة
للحصول على معلومات حول خطط التنفيذ الدائمة والأمان، يُرجى الرجوع إلى خطة "Terraform": تحذير الأمان.
تطبيق خطة التنفيذ الخاصة بــ "Terraform"
في النهاية، قم بتطبيق خطة التنفيذ.
قم بتشغيل أمر تطبيق "terraform" وحدد assignment.tfplan
ما تم إنشاؤه بالفعل.
terraform apply assignment.tfplan
مع "استكمال التطبيق! الموارد: تمت إضافة 1، تغير 0، تم إتلاف 0." الرسالة، تم إنشاء تعيين النهج الآن. منذ أن حددنا ملف 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.
لمعرفة المزيد حول تعيين نهج للتحقق من توافق الموارد الجديدة، تابع البرنامج التعليمي من أجل: