مراقبة الشبكات بشكل استباقي باستخدام التنبيهات وAzure Functions باستخدام التقاط الحزمة

تنشئ ميزة التقاط الحزمة في Azure Network Watcher جلسات التقاط لتتبع نسبة استخدام الشبكة داخل وخارج الأجهزة الظاهرية (VMs). يمكن أن يحتوي ملف الالتقاط على عامل تصفية تحدده لتعقب نسبة استخدام الشبكة التي تريد مراقبتها فقط. يتم تخزين هذه البيانات في كائن ثنائي كبير الحجم للتخزين أو محليا على جهاز الضيف.

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

يتم تشغيل الموارد التي يتم نشرها في Azure بشكل مستمر. من الصعب مراقبة حالة جميع الموارد بنشاط في جميع الأوقات. على سبيل المثال، ماذا يحدث إذا حدثت مشكلة في الساعة 2:00 صباحا؟

باستخدام تنبيهات ووظائف Network Watcher من داخل نظام Azure البنائي، يمكنك الاستجابة بشكل استباقي بالبيانات والأدوات لحل المشكلات في شبكتك.

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

السيناريو

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

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

يفترض هذا السيناريو أن لديك مثيلاً موجوداً لـ Network Watcher ومجموعة موارد مع جهاز ظاهري صالح.

فيما يلي سير العمل لالتقاط الحزمة:

  1. يؤدي الحادث إلى تشغيل تنبيه على الجهاز الظاهري الخاص بك.
  2. يستدعي التنبيه دالة Azure.
  3. تعالج وظيفة Azure التنبيه وتبدأ جلسة التقاط حزمة مراقب الشبكة.
  4. يتم تشغيل التقاط الحزمة على الجهاز الظاهري ويجمع البيانات.
  5. يتم تحميل ملف التقاط الحزمة إلى حساب تخزين للمراجعة والتشخيص.

لأتمتة هذه العملية، يمكنك إنشاء تنبيه وتوصيله على الجهاز الظاهري ليتم تشغيله عند وقوع الحادث. يمكنك أيضا إنشاء دالة لاستدعاء Network Watcher.

هذا السيناريو:

  • ينشئ وظيفة Azure التي تبدأ التقاط الحزمة.
  • يقوم بإنشاء قاعدة تنبيه على جهاز ظاهري وتكوين قاعدة التنبيه لاستدعاء وظيفة Azure.

إنشاء وظيفة Azure

لإنشاء دالة Azure لمعالجة التنبيه وإنشاء التقاط حزمة بيانات، تحتاج أولا إلى إنشاء تطبيق دالة:

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. في مربع البحث أعلى المدخل، أدخل function app. حدد Function App من نتائج البحث.

    Screenshot that shows how to search for function apps in the Azure portal.

  3. حدد + إنشاء.

  4. في علامة التبويب Basics في Create Function App، أدخل قيم الإعدادات التالية أو حددها:

    • ضمن تفاصيل المشروع، حدد الاشتراك الذي تريد إنشاء تطبيق الوظائف له ومجموعة الموارد لاحتواء التطبيق.
    • ضمن تفاصيل المثيل:
      • بالنسبة إلى Function App name، أدخل اسم تطبيق الوظائف. يتم إلحاق هذا الاسم ب .azurewebsites.net.
      • بالنسبة إلى هل تريد نشر التعليمات البرمجية أو صورة الحاوية؟، حدد وضع النشر: التعليمات البرمجية أو صورة الحاوية.
      • بالنسبة إلى مكدس وقت التشغيل، حدد مكدس وقت التشغيل.
      • بالنسبة للإصدار، حدد إصدار مكدس وقت التشغيل.
      • بالنسبة للمنطقة، حدد المنطقة التي تريد إنشاء تطبيق الوظائف فيها.
    • ضمن نظام التشغيل، حدد نوع نظام التشغيل الذي تستخدمه حاليا. توصي Azure بنوع نظام التشغيل استنادا إلى تحديد مكدس وقت التشغيل.
    • ضمن Hosting، حدد نوع الخطة التي تريد استخدامها لتطبيق الوظائف. اختر من الخيارات التالية:
      • الاستهلاك (بلا خادم): للتحجيم المستند إلى الحدث بأقل تكلفة.
      • Functions Premium: للتطبيقات بلا خادم على مستوى المؤسسة مع التحجيم المستند إلى الحدث وعزل الشبكة.
      • خطة App Service: لإعادة استخدام الحوسبة من خطة Azure App Service الحالية.

    Screenshot of the Create Function App page in the Azure portal.

  5. حدد Review + create لإنشاء التطبيق.

الآن يمكنك إنشاء دالة:

  1. في تطبيق الوظائف الذي قمت بإنشائه، حدد Functions، ثم حدد Create لفتح جزء Create function .

    Screenshot of the Create function pane.

  2. بالنسبة لـ بيئة التطوير، حدد تطوير في المدخل.

  3. ضمن تحديد قالب، حدد مشغل HTTP.

  4. في قسم تفاصيل القالب:

    • بالنسبة للدالة الجديدة، أدخل اسم الدالة.
    • بالنسبة إلى مستوى التخويل، حدد Function.
  5. حدد إنشاء.

  6. انتقل إلى الدالة التي قمت بإنشائها وحدد Code + Test.

    Screenshot of the Code + Test page for a function.

  7. قم بتحديث البرنامج النصي وحدد Save.

تكوين المصادقة

لاستخدام PowerShell cmdlets، يجب تكوين المصادقة في تطبيق الوظائف. لتكوين المصادقة، يجب عليك تكوين متغيرات البيئة وتحميل ملف مفتاح مشفر إلى تطبيق الوظيفة.

إشعار

يوفر هذا السيناريو مثالا واحدا فقط لكيفية تنفيذ المصادقة باستخدام Azure Functions. هناك طرق أخرى للقيام بنفس الإجراء.

يقوم برنامج PowerShell النصي التالي بإنشاء ملف مفتاح يسمى PassEncryptKey.key. كما يوفر نسخة مشفرة من كلمة المرور المتوفرة. كلمة المرور هذه هي نفس كلمة المرور المعرفة لتطبيق Microsoft Entra المستخدم للمصادقة.

#Variables
$keypath = "C:\temp\PassEncryptKey.key"
$AESKey = New-Object Byte[] 32
$Password = "<insert a password here>"

#Keys
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey) 
Set-Content $keypath $AESKey

#Get encrypted password
$secPw = ConvertTo-SecureString -AsPlainText $Password -Force
$AESKey = Get-content $KeyPath
$Encryptedpassword = $secPw | ConvertFrom-SecureString -Key $AESKey
$Encryptedpassword

استرجاع قيم متغيرات البيئة

إعداد متغيرات البيئة التالية، الضرورية للوصول إلى قيم المصادقة:

  • AzureClientID
  • AzureTenant
  • AzureCredPassword

إذا كان لديك بالفعل معرف تطبيق، فاستخدم AzureClientIDAzureTenantقيم و و AzureCredPassword لهذا التطبيق. إذا لم يكن لديك واحد، فانتقل إلى قسم Store the environment variables .

AzureClientID

معرف العميل هو معرف تطبيق في معرف Microsoft Entra. للحصول على معرف العميل:

  1. إذا لم يكن لديك بالفعل تطبيق لاستخدامه، فقم بتشغيل cmdlet التالي لإنشاء تطبيق:

    $app = New-AzADApplication -DisplayName "ExampleAutomationAccount_MF" -HomePage "https://exampleapp.com" -IdentifierUris "https://exampleapp1.com/ExampleFunctionsAccount" -Password "<same password as defined earlier>"
    New-AzADServicePrincipal -ApplicationId $app.ApplicationId
    Start-Sleep 15]
    New-AzRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $app.ApplicationId
    

    إشعار

    يجب أن تكون كلمة المرور التي تستخدمها عند إنشاء التطبيق هي نفس كلمة المرور التي قمت بإنشائها سابقا عند حفظ ملف المفتاح.

  2. في مدخل Microsoft Azure، حدد Subscriptions. حدد الاشتراك المراد استخدامه، ثم حدد Access control (IAM).

  3. اختر الحساب الذي تريد استخدامه، ثم حدد Properties. نسخ معرف التطبيق.

AzureTenant

احصل على معرف المستأجر عن طريق تشغيل PowerShell cmdlet التالي:

(Get-AzSubscription -SubscriptionName "<subscriptionName>").TenantId

AzureCredPassword

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

#Variables
$keypath = "C:\temp\PassEncryptKey.key"
$AESKey = New-Object Byte[] 32
$Password = "<insert a password here>"

#Keys
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey) 
Set-Content $keypath $AESKey

#Get encrypted password
$secPw = ConvertTo-SecureString -AsPlainText $Password -Force
$AESKey = Get-content $KeyPath
$Encryptedpassword = $secPw | ConvertFrom-SecureString -Key $AESKey
$Encryptedpassword

تخزين متغيرات البيئة

لتخزين متغيرات البيئة:

  1. انتقل إلى تطبيق الوظيفة. حدد Configurations>Application settings.

    Screenshot of the tab for application settings.

  2. أضف متغيرات البيئة وقيمها إلى إعدادات التطبيق، ثم حدد Save.

إضافة PowerShell إلى الوظيفة

الآن، قم بإجراء استدعاءات إلى Network Watcher من داخل وظيفة Azure. اعتماداً على المتطلبات، يمكن أن يختلف تنفيذ هذه الوظيفة. ومع ذلك، فإن التدفق العام للشفرة هو كما يلي:

  1. معلمات إدخال العملية.
  2. استعلام عن حزم الحزم الموجودة للتحقق من الحدود وحل تعارض الأسماء.
  3. إنشاء التقاط حزمة مع المعلمات المناسبة.
  4. استطلع التقاط الحزمة بشكل دوري حتى تكتمل.
  5. قم بإعلام المستخدم بأن جلسة التقاط الحزمة قد اكتملت.

المثال التالي هو تعليمة PowerShell البرمجية التي يمكنك استخدامها في الدالة . تحتاج إلى استبدال قيم subscriptionIdو resourceGroupNameو.storageAccountName

# Input bindings are passed in via parameter block 
param($Request, $TriggerMetadata) 

$essentials = $Request.body.data.essentials
$alertContext = $Request.body.data.alertContext 


# Storage account ID to save captures in 
$storageaccountid = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}" 

# Packet capture variables 
$packetCaptureName = "PSAzureFunction" 
$packetCaptureLimit = 100
$packetCaptureDuration = 30 

# Credentials 
# Set the credentials in the configurations
$tenant = $env:AzureTenant 
$pw = $env:AzureCredPassword 
$clientid = $env:AzureClientId 
$password = ConvertTo-SecureString $pw -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($clientid, $password)

Connect-AzAccount -ServicePrincipal -Tenant $tenant -Credential $credential #-WarningAction SilentlyContinue | out-null

if ($alertContext.condition.allOf.metricNamespace -eq "Microsoft.Compute/virtualMachines") { 

    # Get the VM firing this alert 
    $vm = Get-AzVM -ResourceId $essentials.alertTargetIDs[0] 

    # Get the Network Watcher instance in the VM's region 
    $networkWatcher = Get-AzNetworkWatcher -Location $vm.Location  

    # Get existing packet captures 
    $packetCaptures = Get-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher 

    # Remove an existing packet capture created by the function (if it exists) 
    $packetCaptures | ForEach-Object { if ($_.Name -eq $packetCaptureName) 
        {  
            Remove-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName $packetCaptureName 
        } 
    } 
  
    # Initiate packet capture on the VM that fired the alert 
    if ($packetCaptures.Count -lt $packetCaptureLimit) { 
        Write-Output "Initiating Packet Capture" 
        New-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -TargetVirtualMachineId $vm.Id -PacketCaptureName $packetCaptureName -StorageAccountId $storageaccountid -TimeLimitInSeconds $packetCaptureDuration 
    } 
} 

استخدم التعليمات البرمجية PowerShell التالية إذا كنت تستخدم المخطط القديم:

# Input bindings are passed in via parameter block 
param($Request, $TriggerMetadata)
$details = $Request.RawBody | ConvertFrom-Json


# Process alert request body 
$requestBody = $Request.Body.data

# Storage account ID to save captures in 
$storageaccountid = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}" 

# Packet capture variables 
$packetCaptureName = "PSAzureFunction" 
$packetCaptureLimit = 100
$packetCaptureDuration = 30 

# Credentials 
# Set the credentials in the configurations
$tenant = $env:AzureTenant 
$pw = $env:AzureCredPassword 
$clientid = $env:AzureClientId 

$password = ConvertTo-SecureString $pw -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($clientid, $password)

Connect-AzAccount -ServicePrincipal -Tenant $tenant -Credential $credential #-WarningAction SilentlyContinue | out-null

if ($requestBody.context.resourceType -eq "Microsoft.Compute/virtualMachines") { 

    # Get the VM firing this alert 
    $vm = Get-AzVM -ResourceGroupName $requestBody.context.resourceGroupName -Name $requestBody.context.resourceName 

    # Get the Network Watcher instance in the VM's region 
    $networkWatcher = Get-AzNetworkWatcher -Location $vm.Location  

    # Get existing packet captures 
    packetCaptures = Get-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher 

    # Remove an existing packet capture created by the function (if it exists) 
    $packetCaptures | ForEach-Object { if ($_.Name -eq $packetCaptureName) 
        {  
            Remove-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName $packetCaptureName 
        } 
    } 

    # Initiate packet capture on the VM that fired the alert 
    if ($packetCaptures.Count -lt $packetCaptureLimit) { 
        Write-Output "Initiating Packet Capture" 
        New-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -TargetVirtualMachineId $requestBody.context.resourceId -PacketCaptureName $packetCaptureName -StorageAccountId $storageaccountid -TimeLimitInSeconds $packetCaptureDuration 
    } 
}                               

تكوين تنبيه على جهاز ظاهري VM

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

أنشئ قاعدة التنبيه

انتقل إلى جهاز ظاهري موجود وأضف قاعدة تنبيه. في صفحة إنشاء قاعدة تنبيه، اتبع الخطوات التالية:

  1. في جزء تحديد إشارة ، ابحث عن اسم الإشارة وحددها. في هذا المثال، الشبكة خارج الإجمالي هي الإشارة المحددة. يشير إلى عدد وحدات البايت على جميع واجهات الشبكة بواسطة الجهاز الظاهري.

  2. في علامة التبويب الشروط ، قم بتعيين القيم التالية، ثم حدد التالي: الإجراءات.

    الإعداد القيمة
    الحد ثابت
    نوع التجميع المتوسط
    العامل أكبر من
    قيمة الحد 3
    تحقق من كل دقيقة واحدة
    فترة البحث 5 دقائق
  3. في علامة التبويب Actions ، حدد Create an action group.

  4. في صفحة إنشاء مجموعة إجراءات، حدد قيم الاشتراك ومجموعة الموارد والمنطقة. أدخل أيضا اسم مجموعة الإجراءات واسم العرض، ثم حدد التالي: الإعلامات.

  5. في علامة التبويب Notifications، لنوع الإجراء، حدد Azure Function.

  6. في جزء Azure Function ، حدد قيم Subscription وResource group و Function app وAzure Function .

    Screenshot of the page for creating an action group and the pane for details about an Azure function.

  7. في تمكين شريط تمرير مخطط التنبيه الشائع، حدد لا. ثم حدد موافق.

مراجعة النتائج

بعد أن تقوم المعايير بتشغيل تنبيه، يقوم Network Watcher بإنشاء التقاط حزمة بيانات. انتقل إلى Network Watcher وحدد التقاط الحزمة. في هذه الصفحة، يمكنك تحديد ارتباط الملف لتنزيل التقاط الحزمة.

إذا تم تخزين ملف الالتقاط محليا، يمكنك الحصول عليه عن طريق تسجيل الدخول إلى الجهاز الظاهري.

للحصول على إرشادات حول تنزيل الملفات من حسابات تخزين Azure، راجع التشغيل السريع لمكتبة عميل Azure Blob Storage ل .NET. يمكنك أيضا استخدام أداة Azure Storage Explorer .

بعد تنزيل الالتقاط، يمكنك عرضه باستخدام أدوات مثل Wireshark التي يمكنها قراءة ملف .cap .

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

تعرف على كيفية عرض التقاطات الحزمة الخاصة بك عن طريق قراءة فحص وتحليل ملفات التقاط حزمة Network Watcher.