احصل على بيانات التوافق لموارد Azure

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

قبل مراجعة بيانات التوافق، من المهم فهم حالات التوافق في Azure Policy.

توجد عدة طرق للوصول إلى معلومات الامتثال التي تم إنشاؤها بواسطة تعيينات النهج والمبادرة الخاصة بك:

قبل النظر في طرق الإبلاغ عن الامتثال، دعنا ننظر إلى وقت تحديث معلومات الامتثال والتكرار والأحداث التي تؤدي إلى دورة التقييم.

محفزات التقييم

تتوفر نتائج دورة التقييم المكتملة في عمليات Microsoft.PolicyInsightsموفر الموارد من خلال PolicyStates وPolicyEvents. لمزيد من المعلومات حول عمليات Azure Policy Insights REST API، راجع Azure Policy Insights.

تحدث تقييمات النُهج والمبادرات المخصصة نتيجة لأحداث مختلفة:

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

  • يتم تحديث منهج أو مبادرة حديثاً بالفعل إلى نطاق. دورة التقييم وتوقيت هذا السيناريو هو نفسه بالنسبة لتعيين جديد لنطاق.

  • يتم توزيع المورد أو تحديثه داخل نطاق مع تعيين عبر Azure Resource Manager أو REST API أو SDK مدعوم. في هذا السيناريو، يصبح حدث التأثير (إلحاق وتدقيق ورفض وتوزيع) ومعلومات الحالة المتوافقة للمورد الفردي متاحاً في المدخل ومجموعات تطوير البرامج (SDK) بعد حوالي 15 دقيقة. لا يتسبب هذا الحدث في تقييم الموارد الأخرى.

  • يتم إنشاء اشتراك (نوع المورد Microsoft.Resources/subscriptions) أو نقله ضمن management group hierarchy مع تعريف نهج معين يستهدف نوع مورد الاشتراك. إن تقييم التأثيرات المدعومة بالاشتراك (audit, auditIfNotExist, deployIfNotExists, modify)، والتسجيل، وأي إجراءات علاجية يستغرق حوالي 30 دقيقة.

  • يتم إنشاء أو تحديث أو حذف استثناء من النهج. في هذا السيناريو، يتم تقييم التخصيص المقابل لنطاق الإعفاء المحدد.

  • دورة تقييم الامتثال القياسية. مرة واحدة كل 24 ساعة، يتم إعادة تقييم الواجبات تلقائياً. قد تستغرق نهج أو مبادرة كبيرة من العديد من الموارد وقتاً، لذلك لا توجد توقعات محددة مسبقاً حول موعد اكتمال دورة التقييم. بمجرد اكتمالها، تتوفر نتائج الامتثال المحدثة في المدخل ومجموعات SDK.

  • يتم تحديث موفر موارد تكوين الجهاز بتفاصيل التوافق بواسطة مورد مدار.

  • فحص عند الطلب

ملاحظة

حسب التصميم، يعفي Azure Policy جميع الموارد ضمن Microsoft.Resources موفر الموارد (RP) من تقييم النهج باستثناء الاشتراكات ومجموعات الموارد، والتي يمكن تقييمها.

فحص التقييم عند الطلب

يمكن بدء فحص تقييم لاشتراك أو مجموعة موارد باستخدام Azure CLI أو Azure PowerShell أو استدعاء REST API أو باستخدام إجراء فحص التوافق مع Azure Policy GitHub. هذا الفحص عملية غير متزامنة.

ملاحظة

لا يدعم جميع موفري موارد Azure عمليات فحص التقييم عند الطلب. على سبيل المثال، لا يدعم Azure Virtual Network Manager (AVNM) حاليًا المشغلات اليدوية أو دورة تقييم توافق النهج القياسية (عمليات الفحص اليومية).

فحص التقييم عند الطلب - GitHub Action

استخدم إجراء فحص الامتثال لـ Azure Policy لإجراء فحص تقييم عند الطلب من سير عمل GitHub على مورد واحد أو أكثر أو مجموعات موارد أو اشتراكات، وقم ببوابة سير العمل استناداً إلى حالة الامتثال للموارد. يمكنك أيضاً تكوين سير العمل للتشغيل في وقت مجدول حتى تحصل على أحدث حالة توافق في وقت مناسب. اختياريا، يمكن ل GitHub Actions إنشاء تقرير حول حالة التوافق للموارد الممسوحة ضوئيا لمزيد من التحليل أو للأرشفة.

يقوم المثال التالي بتشغيل فحص التوافق للاشتراك.

on:
  schedule:
    - cron:  '0 8 * * *'  # runs every morning 8am
jobs:
  assess-policy-compliance:
    runs-on: ubuntu-latest
    steps:
    - name: Login to Azure
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}

    - name: Check for resource compliance
      uses: azure/policy-compliance-scan@v0
      with:
        scopes: |
          /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

لمزيد من المعلومات وعينات سير العمل، راجع GitHub Actions لمستودع Azure Policy Compliance Scan.

فحص التقييم عند الطلب - Azure CLI

يتم بدء فحص التوافق بالأمر az policy state trigger-scan.

بشكل افتراضي، يبدأ az policy state trigger-scan تقييماً لجميع الموارد في الاشتراك الحالي. لبدء تقييم لمجموعة موارد معينة، استخدم معلمة resource-group. يبدأ المثال التالي فحص التوافق في الاشتراك الحالي لمجموعة موارد MyRG:

az policy state trigger-scan --resource-group "MyRG"

يمكنك اختيار عدم الانتظار حتى تكتمل العملية غير المتزامنة قبل المتابعة مع معلمة no-wait.

فحص التقييم عند الطلب - Azure PowerShell

بدأ فحص التوافق باستخدام الأمر Start-AzPolicyComplianceScan.

بشكل افتراضي، يبدأ Start-AzPolicyComplianceScan تقييماً لجميع الموارد في الاشتراك الحالي. لبدء تقييم على مجموعة موارد معينة، استخدم المعلمة ResourceGroupName. يبدأ المثال التالي فحص التوافق في الاشتراك الحالي لمجموعة موارد MyRG:

Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'

يمكنك جعل PowerShell تنتظر حتى تكتمل المكالمة غير المتزامنة قبل تقديم نتائج النتائج أو تشغيلها في الخلفية كـ مهمة. لاستخدام مهمة PowerShell لتشغيل فحص التوافق في الخلفية، استخدم المعلمة AsJob واضبط القيمة على عنصر، مثل $job في هذا المثال:

$job = Start-AzPolicyComplianceScan -AsJob

يمكنك التحقق من حالة المهمة عن طريق التحقق من العنصر $job. الوظيفة من النوع Microsoft.Azure.Commands.Common.AzureLongRunningJob. استخدم Get-Member في عنصر $job لمشاهدة الخصائص والأساليب المتاحة.

أثناء تشغيل فحص التوافق، تحقق من نتائج عنصر $job مثل هذه:

$job

Id     Name              PSJobTypeName     State         HasMoreData     Location             Command
--     ----              -------------     -----         -----------     --------             -------
2      Long Running O... AzureLongRunni... Running       True            localhost            Start-AzPolicyCompliance...

عند اكتمال فحص التوافق، تتغير خاصية State إلى Completed.

فحص التقييم عند الطلب - REST

كعملية غير متزامنة، لا تنتظر نقطة نهاية REST لبدء الفحص حتى يكتمل الفحص للاستجابة. بدلاً من ذلك، يوفر URI للاستعلام عن حالة التقييم المطلوب.

في كل REST API URI، هناك متغيرات يتم استخدامها تحتاج إلى استبدالها بقيمك الخاصة:

  • {YourRG} - استبدل اسم مجموعة الموارد الخاصة بك
  • استبدل {subscriptionId} بمعرّف اشتراكك

يدعم الفحص تقييم الموارد في الاشتراك أو في مجموعة الموارد. ابدأ فحصاً حسب النطاق باستخدام أمر REST API POST باستخدام بنيات URI التالية:

  • الاشتراك

    POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
    
  • مجموعة الموارد

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{YourRG}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
    

تقوم المكالمة بإرجاع الحالة 202 مقبول. تم تضمين خاصية الموقع بالتنسيق التالي في رأس الاستجابة:

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01

يتم إنشاء{ResourceContainerGUID} بشكل ثابت للنطاق المطلوب. إذا كان النطاق يقوم بالفعل بإجراء فحص عند الطلب، فلن يتم بدء فحص جديد. بدلاً من ذلك، يتم تقديم الطلب الجديد نفس عنوان URI {ResourceContainerGUID}للموقع للحالة. يقوم أمر REST API GET إلى عنوان URI Location بإرجاع 202 Accepted أثناء استمرار التقييم. عند اكتمال فحص التقييم، يقوم بإرجاع الحالة 200 موافق. نص الفحص المكتمل هو استجابة JSON بالحالة:

{
    "status": "Succeeded"
}

فحص التقييم عند الطلب - Visual Studio Code

ملحق Azure Policy ل Visual Studio Code قادر على تشغيل فحص تقييم لمورد معين. هذا الفحص عملية متزامنة، على عكس طريقتي Azure PowerShell وREST. للحصول على تفاصيل وخطوات، راجع التقييم عند الطلب بملحق VS Code.

المدخل

تعرض مدخل Microsoft Azure تجربة رسومية لتصور وفهم حالة التوافق في بيئتك. في صفحة Policy، يوفر خيار Overview تفاصيل حول النطاقات المتاحة حول الامتثال لكل من النُهج والمبادرات. إلى جانب حالة التوافق والعدد لكل مهمة، فإنه يحتوي على مخطط يوضح التوافق على مدار الأيام السبعة الماضية. تحتوي صفحة Compliance على الكثير من هذه المعلومات نفسها (باستثناء المخطط)، ولكنها توفر خيارات تصفية وفرز إضافية.

لقطة شاشة لصفحة الامتثال وخيارات التصفية والتفاصيل.

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

لقطة شاشة لصفحة تفاصيل الامتثال، بما في ذلك الأعداد والتفاصيل المتوافقة مع الموارد.

تعرض قائمة الموارد في علامة التبويب Resource compliance حالة تقييم الموارد الحالية للتعيين الحالي. يتم تعيين علامة التبويب الافتراضية على غير متوافق، ولكن يمكن تصفيتها. يتم عرض الأحداث (إلحاق وتدقيق ورفض وتوزيع وتعديل) التي يتم تشغيلها بواسطة طلب إنشاء مورد ضمن علامة التبويب Events.

لقطة شاشة لعلامة التبويب

بالنسبة إلى موارد وضع موفر المورد، في علامة التبويب Resource compliance، يؤدي تحديد المورد أو النقر بزر الماوس الأيمن على الصف وتحديد View compliance details إلى فتح تفاصيل امتثال المكون. توفر هذه الصفحة أيضاً علامات تبويب لمشاهدة النُهج التي تم تعيينها لهذا المورد والأحداث وأحداث المكون ومحفوظات التغيير.

لقطة شاشة لعلامة التبويب

مرة أخرى على صفحة امتثال المورد، حدد مع الاستمرار (أو انقر بزر الماوس الأيمن) على صف الحدث الذي ترغب في جمع المزيد من التفاصيل عنه وحدد Show activity logs. تفتح صفحة سجل النشاط وتتم تصفيتها مسبقاً للبحث الذي يعرض تفاصيل المهمة والأحداث. يوفر سجل النشاط مزيدا من السياق والمعلومات حول هذه الأحداث.

لقطة شاشة لسجل النشاط لأنشطة وتقييمات Azure Policy.

ملاحظة

يمكن تصدير نتائج التوافق من المدخل من خلال استعلامات Azure Resource Graph.

سطر الأوامر

يمكن استرداد نفس المعلومات المتوفرة في المدخل باستخدام واجهة برمجة تطبيقات REST (بما في ذلك مع ARMClient) وAzure PowerShell وAzure CLI. للحصول على التفاصيل الكاملة حول REST API، راجع مرجع Azure Policy. تحتوي الصفحات المرجعية لواجهة برمجة تطبيقات REST على زر "جربها" أخضر اللون في كل عملية تسمح لك بتجربتها مباشرة في المتصفح.

استخدم ARMClient أو أداة مشابهة للتعامل مع المصادقة على Azure لأمثلة REST API.

لخص النتائج

باستخدام REST API، يمكن إجراء التلخيص عن طريق الحاوية أو التعريف أو التخصيص. فيما يلي مثال على التلخيص على مستوى الاشتراك باستخدام تلخيص Azure Policy Insight للاشتراك:

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01

الناتج يلخص الاشتراك. في المثال الناتج أدناه، يكون التوافق الملخص تحت value.results.nonCompliantResources وvalue.results.nonCompliantPolicies. يوفر هذا الطلب مزيداً من التفاصيل، بما في ذلك كل مهمة تكون الأرقام غير المتوافقة ومعلومات التعريف لكل مهمة. يوفر كل عنصر نهج في التسلسل الهرمي queryResultsUri الذي يمكن استخدامه للحصول على مزيد من التفاصيل على هذا المستوى.

{
    "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary",
    "@odata.count": 1,
    "value": [{
        "@odata.id": null,
        "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
        "results": {
            "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant'",
            "nonCompliantResources": 15,
            "nonCompliantPolicies": 1
        },
        "policyAssignments": [{
            "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77",
            "policySetDefinitionId": "",
            "results": {
                "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77'",
                "nonCompliantResources": 15,
                "nonCompliantPolicies": 1
            },
            "policyDefinitions": [{
                "policyDefinitionReferenceId": "",
                "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "effect": "deny",
                "results": {
                    "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'",
                    "nonCompliantResources": 15
                }
            }]
        }]
    }]
}

الاستعلام عن الموارد

في المثال أعلاه، توفر value.policyAssignments.policyDefinitions.results.queryResultsUri نموذج URI لجميع الموارد غير المتوافقة لتعريف نهج معين. في القيمة $filter ، تكون ComplianceState متساوية (eq) مع "NonCompliant"، ويتم تحديد PolicyAssignmentId لتعريف النهج، ثم PolicyDefinitionId نفسه. يرجع سبب تضمين PolicyAssignmentId في عامل التصفية إلى إمكانية وجود PolicyDefinitionId في العديد من تعيينات النهج أو المبادرات ذات النطاقات المختلفة. من خلال تحديد كل من PolicyAssignmentId وPolicyDefinitionId، يمكننا أن نكون واضحين في النتائج التي نبحث عنها. في السابق، بالنسبة إلى PolicyStates، استخدمنا الأحدث، والذي يعين تلقائياً فترة زمنية من وإلى خلال آخر 24 ساعة.

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'

تم قطع استجابة المثال أدناه إلى مورد واحد غير متوافق للإيجاز. تحتوي الاستجابة التفصيلية على عدة أجزاء من البيانات حول المورد والنهج أو المبادرة والمهمة. لاحظ أنه يمكنك أيضاً رؤية معلمات التعيين التي تم تمريرها إلى تعريف النهج.

{
    "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
    "@odata.count": 15,
    "value": [{
        "@odata.id": null,
        "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
        "timestamp": "2018-05-19T04:41:09Z",
        "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Compute/virtualMachines/linux",
        "policyAssignmentId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Authorization/policyAssignments/37ce239ae4304622914f0c77",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
        "effectiveParameters": "",
        "ComplianceState": "NonCompliant",
        "subscriptionId": "{subscriptionId}",
        "resourceType": "/Microsoft.Compute/virtualMachines",
        "resourceLocation": "westus2",
        "resourceGroup": "RG-Tags",
        "resourceTags": "tbd",
        "policyAssignmentName": "37ce239ae4304622914f0c77",
        "policyAssignmentOwner": "tbd",
        "policyAssignmentParameters": "{\"tagName\":{\"value\":\"costCenter\"},\"tagValue\":{\"value\":\"Contoso-Test\"}}",
        "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags",
        "policyDefinitionName": "1e30110a-5ceb-460c-a204-c1c3969c6d62",
        "policyDefinitionAction": "deny",
        "policyDefinitionCategory": "tbd",
        "policySetDefinitionId": "",
        "policySetDefinitionName": "",
        "policySetDefinitionOwner": "",
        "policySetDefinitionCategory": "",
        "policySetDefinitionParameters": "",
        "managementGroupIds": "",
        "policyDefinitionReferenceId": ""
    }]
}

اعرض الأحداث

عند إنشاء مورد أو تحديثه، يتم إنشاء نتيجة تقييم النهج. تسمى النتائج أحداث النهج. استخدم URI التالي لعرض أحداث النهج الأخيرة المرتبطة بالاشتراك.

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01

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

{
    "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default",
    "@odata.count": 1,
    "value": [{
        "@odata.id": null,
        "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default/$entity",
        "NumAuditEvents": 16
    }]
}

لمزيد من المعلومات حول الاستعلام عن أحداث النهج، راجع المقالة المرجعية أحداث Azure Policy.

Azure CLI

تغطي مجموعة أوامر Azure CLI لـ Azure Policy معظم العمليات المتوفرة في REST أو Azure PowerShell. للحصول على القائمة الكاملة للأوامر المتوفرة، راجع Azure CLI - نظرة عامة على Azure Policy.

مثال: الحصول على ملخص الحالة للنهج المعينة الأعلى بأكبر عدد من الموارد غير المتوافقة.

az policy state summarize --top 1

يبدو الجزء العلوي من الرد مثل هذا المثال:

{
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
    "odataid": null,
    "policyAssignments": [{
            "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
            "policyDefinitions": [{
                "effect": "audit",
                "policyDefinitionGroupNames": [
                    ""
                ],
                "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
                "policyDefinitionReferenceId": "",
                "results": {
                    "nonCompliantPolicies": null,
                    "nonCompliantResources": 398,
                    "policyDetails": [{
                        "complianceState": "noncompliant",
                        "count": 1
                    }],
                    "policyGroupDetails": [{
                        "complianceState": "noncompliant",
                        "count": 1
                    }],
                    "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2020-07-14 14:01:22Z&$to=2020-07-15 14:01:22Z and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8' and PolicyDefinitionId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a'",
                    "resourceDetails": [{
                            "complianceState": "noncompliant",
                            "count": 398
                        },
                        {
                            "complianceState": "compliant",
                            "count": 4
                        }
                    ]
                }
            }],
    ...

مثال: الحصول على سجل الحالة لأحدث مورد تم تقييمه (الإعداد الافتراضي هو الطابع الزمني بترتيب تنازلي).

az policy state list --top 1
[
  {
    "complianceReasonCode": "",
    "complianceState": "Compliant",
    "effectiveParameters": "",
    "isCompliant": true,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/securitycenterbuiltin",
    "policyAssignmentName": "SecurityCenterBuiltIn",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "auditifnotexists",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/aa633080-8b72-40c4-a2d7-d00c03e80bed",
    "policyDefinitionName": "aa633080-8b72-40c4-a2d7-d00c03e80bed",
    "policyDefinitionReferenceId": "identityenablemfaforownerpermissionsmonitoring",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "security center",
    "policySetDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
    "policySetDefinitionName": "1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "",
    "resourceId": "/subscriptions/{subscriptionId}",
    "resourceLocation": "",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Resources/subscriptions",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.903433+00:00"
  }
]

مثال: الحصول على تفاصيل جميع موارد الشبكة الظاهرية غير المتوافقة.

az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
[
  {
    "complianceReasonCode": "",
    "complianceState": "NonCompliant",
    "effectiveParameters": "",
    "isCompliant": false,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
    "policyAssignmentName": "e0704696df5e4c3c81c873e8",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "audit",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionReferenceId": "",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "",
    "policySetDefinitionId": "",
    "policySetDefinitionName": "",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "RG-Tags",
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
    "resourceLocation": "westus2",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Network/virtualNetworks",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.901911+00:00"
  }
]

مثال: الحصول على الأحداث المتعلقة بموارد الشبكة الظاهرية غير المتوافقة والتي حدثت بعد تاريخ محدد.

az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2020-07-14T00:00:00Z'
[
  {
    "complianceReasonCode": "",
    "complianceState": "NonCompliant",
    "effectiveParameters": "",
    "isCompliant": false,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
    "policyAssignmentName": "e0704696df5e4c3c81c873e8",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "audit",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionReferenceId": "",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "",
    "policySetDefinitionId": "",
    "policySetDefinitionName": "",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "RG-Tags",
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
    "resourceLocation": "westus2",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Network/virtualNetworks",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.901911+00:00"
  }
]

Azure PowerShell

تتوفر وحدة Azure PowerShell النمطية لـ Azure Policy في معرض PowerShell كـ Az.PolicyInsights. باستخدام PowerShellGet، يمكنك تثبيت الوحدة باستخدام Install-Module -Name Az.PolicyInsights (تأكد من تثبيت أحدث إصدار من Azure PowerShell ):

# Install from PowerShell Gallery via PowerShellGet
Install-Module -Name Az.PolicyInsights

# Import the downloaded module
Import-Module Az.PolicyInsights

# Login with Connect-AzAccount if not using Cloud Shell
Connect-AzAccount

تحتوي الوحدة النمطية على أوامر cmdlets التالية:

  • Get-AzPolicyStateSummary
  • Get-AzPolicyState
  • Get-AzPolicyEvent
  • Get-AzPolicyRemediation
  • Remove-AzPolicyRemediation
  • Start-AzPolicyRemediation
  • Stop-AzPolicyRemediation

مثال: الحصول على ملخص الحالة للنهج المعينة الأعلى بأكبر عدد من الموارد غير المتوافقة.

PS> Get-AzPolicyStateSummary -Top 1

NonCompliantResources : 15
NonCompliantPolicies  : 1
PolicyAssignments     : {/subscriptions/{subscriptionId}/resourcegroups/RG-Tags/providers/micros
                        oft.authorization/policyassignments/37ce239ae4304622914f0c77}

مثال: الحصول على سجل الحالة لأحدث مورد تم تقييمه (الإعداد الافتراضي هو الطابع الزمني بترتيب تنازلي).

PS> Get-AzPolicyState -Top 1

Timestamp                  : 5/22/2018 3:47:34 PM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/networkInterfaces/linux316
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/networkInterfaces
ResourceLocation           : westus2
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd

مثال: الحصول على تفاصيل جميع موارد الشبكة الظاهرية غير المتوافقة.

PS> Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"

Timestamp                  : 5/22/2018 4:02:20 PM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/virtualNetworks
ResourceLocation           : westus2
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd

مثال: الحصول على الأحداث المتعلقة بموارد الشبكة الظاهرية غير المتوافقة والتي حدثت بعد تاريخ محدد، والتحويل إلى عنصر CSV، والتصدير إلى ملف.

$policyEvents = Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2020-09-19'
$policyEvents | ConvertTo-Csv | Out-File 'C:\temp\policyEvents.csv'

ناتج العنصر $policyEvents يشبه الناتج التالي:

Timestamp                  : 9/19/2020 5:18:53 AM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/virtualNetworks
ResourceLocation           : eastus
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd
TenantId                   : {tenantId}
PrincipalOid               : {principalOid}

يمكن استخدام الحقل PrincipalOid للحصول على مستخدم معين باستخدام Azure PowerShell cmdlet Get-AzADUser. استبدل {principalOid} بالرد الذي تحصل عليه من المثال السابق.

PS> (Get-AzADUser -ObjectId {principalOid}).DisplayName
Trent Baker

سجلات Azure Monitor

إذا كانت لديك مساحة عمل Log Analytics مع AzureActivity من Activity Log Analytics Solution مرتبطة باشتراكك، فيمكنك أيضاً عرض نتائج عدم الامتثال من تقييم الموارد الجديدة والمحدثة باستخدام استعلامات Kusto البسيطة والجدول AzureActivity. باستخدام التفاصيل في سجلات Azure Monitor، يمكن تكوين التنبيهات لمراقبة عدم الامتثال.

لقطة شاشة لسجلات Azure Monitor تعرض إجراءات Azure Policy في جدول AzureActivity.

Azure Resource Graph

يتم تخزين سجلات التوافق في Azure Resource Graph (ARG). يمكن تصدير البيانات من استعلامات ARG لتشكيل لوحات معلومات مخصصة استنادا إلى النطاقات والسياسات ذات الاهتمام. راجع نماذج استعلاماتنا لتصدير بيانات التوافق من خلال ARG.

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