التشغيل السريع: تعيين نهج لتحديد الموارد غير المتوافقة باستخدام "Terraform"
الخطوة الأولى في فهم التوافق في Azure هي تحديد حالة مواردك. يعمل التشغيل السريع على تحديد الخطوات اللازمة من خلال عملية تعيين نهج لتحديد الأجهزة الافتراضية التي لا تستخدم الأقراص المُدارة.
في نهاية هذه العملية، يمكنك تحديد الأجهزة الظاهرية التي لا تستخدم الأقراص المدارة عبر الاشتراك. فإنها غير متوافقة مع تعيين النهج.
عند تعيين نهج مضمن أو تعريف مبادرة، من الاختياري الإشارة إلى إصدار. تعيينات النهج للتعريفات المضمنة افتراضيا إلى أحدث إصدار وترث تلقائيا تغييرات الإصدار الثانوية ما لم يتم تحديد خلاف ذلك.
المتطلبات الأساسية
- في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
- الإصدار 0.12.0 لــ "Terraform" أو إصدار أعلى تم تكوينه في بيئتك. للاطلاع على الإرشادات، يُرجى الرجوع إلى تكوين "Terraform" باستخدام "Azure Cloud Shell".
- يتطلب هذا التشغيل السريع استخدام الإصدار 2.13.0 من "Azure CLI" أو الأحدث منه. للعثور على الإصدار، قم بتشغيل
az --version
. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.
إنشاء تكوين "Terraform" والمتغير ومخرجات الملف
بالنسبة لهذا التشغيل السريع، يُمكن تعيين نهج بجانب تعيين الأجهزة الظاهرية الخاصة بالتدقيق، والتي لا تستخدم تعريف الأقراص المُدارة. يعمل تعريف النهج هذا على تحديد الموارد غير المتوافقة مع الشروط المحددة في تعريف النهج.
تكوين تكوين 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
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.
لمعرفة المزيد حول تعيين نهج للتحقق من توافق الموارد الجديدة، تابع البرنامج التعليمي من أجل: