Memantau jaringan secara proaktif dengan pemberitahuan dan Azure Functions dengan menggunakan pengambilan paket

Fitur pengambilan paket Azure Network Watcher membuat sesi pengambilan untuk melacak lalu lintas masuk dan keluar dari komputer virtual (VM). File pengambilan dapat memiliki filter yang Anda tentukan untuk melacak hanya lalu lintas yang ingin Anda pantau. Data ini disimpan dalam blob penyimpanan atau secara lokal di komputer tamu.

Anda dapat memulai kemampuan ini dari jarak jauh dari skenario otomatisasi lain, seperti dari Azure Functions. Anda dapat menjalankan pengambilan proaktif berdasarkan anomali jaringan yang ditentukan. Penggunaan lain termasuk mengumpulkan statistik jaringan, mendapatkan informasi tentang penyusupan jaringan, dan men-debug komunikasi klien/server.

Sumber daya yang disebarkan di Azure berjalan terus menerus. Sulit untuk secara aktif memantau status semua sumber daya setiap saat. Misalnya, apa yang terjadi jika masalah terjadi pada pukul 02.00?

Dengan menggunakan pemberitahuan dan fungsi Network Watcher dari dalam ekosistem Azure, Anda dapat secara proaktif merespons dengan data dan alat untuk menyelesaikan masalah di jaringan Anda.

Prasyarat

Skenario

Dalam contoh ini, komputer virtual memiliki lebih banyak lalu lintas keluar dari biasanya dan Anda ingin diberi tahu. Anda dapat menggunakan proses serupa untuk membuat pemberitahuan untuk kondisi apa pun.

Saat insiden memicu pemberitahuan, data tingkat paket membantu Anda menganalisis mengapa lalu lintas keluar meningkat. Anda dapat mengambil langkah-langkah untuk mengembalikan komputer virtual ke keadaan aslinya.

Skenario ini mengasumsikan bahwa Anda memiliki instans Network Watcher dan grup sumber daya yang ada dengan komputer virtual yang valid.

Berikut adalah alur kerja untuk pengambilan paket:

  1. Insiden memicu pemberitahuan pada VM Anda.
  2. Pemberitahuan memanggil fungsi Azure Anda.
  3. Fungsi Azure Anda memproses pemberitahuan dan memulai sesi pengambilan paket Network Watcher.
  4. Pengambilan paket berjalan pada VM dan mengumpulkan data.
  5. File pengambilan paket diunggah ke akun penyimpanan untuk ditinjau dan didiagnosis.

Untuk mengotomatiskan proses ini, Anda membuat dan menyambungkan pemberitahuan pada VM Anda untuk dipicu saat insiden terjadi. Anda juga membuat fungsi untuk memanggil Network Watcher.

Skenario ini:

  • Membuat fungsi Azure yang memulai pengambilan paket.
  • Membuat aturan pemberitahuan pada komputer virtual dan mengonfigurasi aturan pemberitahuan untuk memanggil fungsi Azure.

Buat fungsi Azure

Untuk membuat fungsi Azure untuk memproses pemberitahuan dan membuat pengambilan paket, Anda harus terlebih dahulu membuat aplikasi fungsi:

  1. Masuk ke portal Azure.

  2. Di kotak pencarian di bagian atas portal, masukkan aplikasi fungsi. Pilih Aplikasi Fungsi dari hasil pencarian.

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

  3. Pilih + Buat.

  4. Pada tab Dasar dari Buat Aplikasi Fungsi, masukkan atau pilih nilai untuk pengaturan berikut ini:

    • Di bawah Detail Proyek, pilih langganan yang ingin Anda buat aplikasi fungsi dan grup sumber daya untuk berisi aplikasi.
    • Di bawah Detail Instans:
      • Untuk Nama Aplikasi Fungsi, masukkan nama aplikasi fungsi. Nama ini ditambahkan dengan .azurewebsites.net.
      • Untuk Apakah Anda ingin menyebarkan kode atau gambar kontainer?, pilih mode penerbitan: Gambar kode atau Kontainer.
      • Untuk Tumpukan runtime, pilih tumpukan runtime.
      • Untuk Versi, pilih versi tumpukan runtime.
      • Untuk Wilayah, pilih wilayah tempat Anda ingin membuat aplikasi fungsi.
    • Di bawah Sistem operasi, pilih jenis sistem operasi yang saat ini Anda gunakan. Azure merekomendasikan jenis sistem operasi berdasarkan pilihan tumpukan runtime Anda.
    • Di bawah Hosting, pilih jenis paket yang ingin Anda gunakan untuk aplikasi fungsi. Pilih dari opsi berikut:
      • Konsumsi (Tanpa Server): Untuk penskalaan berbasis peristiwa dengan biaya terendah.
      • Functions Premium: Untuk aplikasi tingkat perusahaan tanpa server dengan penskalaan berbasis peristiwa dan isolasi jaringan.
      • Paket App Service: Untuk menggunakan kembali komputasi dari paket Azure App Service yang ada.

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

  5. Pilih Tinjau + buat untuk membuat aplikasi.

Sekarang Anda dapat membuat fungsi:

  1. Di aplikasi fungsi yang Anda buat, pilih Fungsi, lalu pilih Buat untuk membuka panel Buat fungsi .

    Screenshot of the Create function pane.

  2. Untuk Lingkungan pengembangan, pilih Kembangkan di portal.

  3. Di bagian Pilih templat, pilih Pemicu HTTP.

  4. Di bagian Detail templat:

    • Untuk Fungsi Baru, masukkan nama fungsi.
    • Untuk Tingkat otorisasi, pilih Fungsi.
  5. Pilih Buat.

  6. Buka fungsi yang Anda buat dan pilih Kode + Uji.

    Screenshot of the Code + Test page for a function.

  7. Perbarui skrip dan pilih Simpan.

Mengonfigurasi autentikasi

Untuk menggunakan cmdlet PowerShell, Anda harus mengonfigurasi autentikasi di aplikasi fungsi. Untuk mengonfigurasi autentikasi, Anda harus mengonfigurasi variabel lingkungan dan mengunggah file kunci terenkripsi ke aplikasi fungsi.

Catatan

Skenario ini hanya menyediakan satu contoh cara menerapkan autentikasi dengan Azure Functions. Ada cara lain untuk melakukan tindakan yang sama.

Skrip PowerShell berikut membuat file kunci yang disebut PassEncryptKey.key. Ini juga menyediakan versi terenkripsi dari kata sandi yang disediakan. Kata sandi ini adalah kata sandi yang sama yang ditentukan untuk aplikasi Microsoft Entra yang digunakan untuk autentikasi.

#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

Mengambil nilai untuk variabel lingkungan

Siapkan variabel lingkungan berikut, yang diperlukan untuk mengakses nilai untuk autentikasi:

  • AzureClientID
  • AzureTenant
  • AzureCredPassword

Jika Anda sudah memiliki ID aplikasi, gunakan nilai , AzureTenant, dan AzureCredPassword aplikasi tersebutAzureClientID. Jika Anda tidak memilikinya, lanjutkan ke bagian Simpan variabel lingkungan.

AzureClientID

ID klien adalah ID aplikasi di MICROSOFT Entra ID. Untuk mendapatkan ID klien:

  1. Jika Anda belum memiliki aplikasi untuk digunakan, jalankan cmdlet berikut untuk membuat aplikasi:

    $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
    

    Catatan

    Kata sandi yang Anda gunakan saat membuat aplikasi harus berupa kata sandi yang sama dengan yang Anda buat sebelumnya saat menyimpan file kunci.

  2. Di portal Microsoft Azure, pilih Langganan. Pilih langganan yang akan digunakan, lalu pilih Access Control (IAM).

  3. Pilih akun yang akan digunakan, lalu pilih Properti. Salin ID aplikasi.

AzureTenant

Dapatkan ID penyewa dengan menjalankan cmdlet PowerShell berikut:

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

AzureCredPassword

Nilai AzureCredPassword variabel lingkungan adalah nilai yang Anda dapatkan dari menjalankan sampel PowerShell berikut. Sampel ini sama dengan yang diperlihatkan bagian Autentikasi Konfigurasi sebelumnya. Nilai yang Anda butuhkan adalah output variabel $Encryptedpassword . Output ini adalah kata sandi perwakilan layanan yang Anda enkripsi dengan menggunakan skrip 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

Menyimpan variabel lingkungan

Untuk menyimpan variabel lingkungan:

  1. Buka aplikasi fungsi. Pilih Pengaturan Aplikasi Konfigurasi>.

    Screenshot of the tab for application settings.

  2. Tambahkan variabel lingkungan dan nilainya ke pengaturan aplikasi, lalu pilih Simpan.

Menambahkan PowerShell ke fungsi

Sekarang, lakukan panggilan ke Network Watcher dari dalam fungsi Azure. Bergantung pada persyaratan, implementasi fungsi ini dapat bervariasi. Namun, aliran umum kode adalah sebagai berikut:

  1. Parameter input proses.
  2. Kueri pengambilan paket yang sudah ada untuk memverifikasi batas dan mengatasi konflik nama.
  3. Buat pengambilan paket dengan parameter yang sesuai.
  4. Polling pengambilan paket secara berkala sampai selesai.
  5. Beri tahu pengguna bahwa sesi pengambilan paket selesai.

Contoh berikut adalah kode PowerShell yang bisa Anda gunakan dalam fungsi . Anda perlu mengganti nilai untuk subscriptionId, , resourceGroupNamedan 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 
    } 
} 

Gunakan kode PowerShell berikut jika Anda menggunakan skema lama:

# 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 
    } 
}                               

Mengonfigurasi pemberitahuan pada VM

Anda dapat mengonfigurasi pemberitahuan untuk memberi tahu individu saat metrik tertentu melewati ambang batas yang Anda tetapkan padanya. Dalam contoh ini, pemberitahuan ada pada metrik Total Jaringan Keluar yang dikirim, tetapi Anda dapat memicu pemberitahuan untuk banyak metrik lainnya.

Membuat aturan pemberitahuan

Buka komputer virtual yang ada dan tambahkan aturan pemberitahuan. Pada halaman Buat aturan Pemberitahuan, lakukan langkah-langkah berikut:

  1. Pada panel Pilih sinyal , cari nama sinyal dan pilih. Dalam contoh ini, Total Jaringan Keluar adalah sinyal yang dipilih. Ini menunjukkan jumlah byte keluar pada semua antarmuka jaringan oleh komputer virtual.

  2. Pada tab Kondisi , atur nilai berikut, lalu pilih Berikutnya: Tindakan.

    Pengaturan Nilai
    Ambang Statis
    Jenis agregasi Rata-rata
    Operator Lebih dari
    Nilai ambang batas 3
    Periksa setiap 1 menit
    Periode lookback 5 menit
  3. Pada tab Tindakan , pilih Buat grup tindakan.

  4. Pada halaman Buat grup tindakan, pilih nilai Langganan, Grup sumber daya, dan Wilayah . Masukkan juga nama grup tindakan dan nama tampilan, lalu pilih Berikutnya: Pemberitahuan.

  5. Pada tab Pemberitahuan , untuk Jenis tindakan, pilih Azure Function.

  6. Pada panel Azure Function , pilih nilai Langganan, Grup sumber daya, Aplikasi fungsi, dan Fungsi Azure.

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

  7. Di Aktifkan penggerak skema pemberitahuan umum, pilih Tidak. Kemudian pilih OK.

Meninjau hasil

Setelah kriteria memicu pemberitahuan, Network Watcher membuat pengambilan paket. Buka Network Watcher dan pilih Pengambilan paket. Pada halaman ini, Anda dapat memilih tautan file untuk mengunduh pengambilan paket.

Jika file pengambilan disimpan secara lokal, Anda bisa mendapatkannya dengan masuk ke komputer virtual.

Untuk petunjuk tentang mengunduh file dari akun penyimpanan Azure, lihat mulai cepat untuk pustaka klien Azure Blob Storage untuk .NET. Anda juga dapat menggunakan alat Azure Storage Explorer .

Setelah mengunduh pengambilan, Anda dapat melihatnya dengan menggunakan alat seperti Wireshark yang dapat membaca file .cap .

Langkah selanjutnya

Pelajari cara melihat pengambilan paket Anda dengan membaca Memeriksa dan menganalisis file pengambilan paket Network Watcher.