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
- Azure PowerShell versi terbaru.
- Contoh instans Network Watcher yang ada. Jika Anda belum memilikinya, buat instans Network Watcher.
- Komputer virtual yang ada di wilayah yang sama dengan Network Watcher dengan ekstensi Windows atau ekstensi komputer virtual Linux.
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:
- Insiden memicu pemberitahuan pada VM Anda.
- Pemberitahuan memanggil fungsi Azure Anda.
- Fungsi Azure Anda memproses pemberitahuan dan memulai sesi pengambilan paket Network Watcher.
- Pengambilan paket berjalan pada VM dan mengumpulkan data.
- 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:
Masuk ke portal Azure.
Di kotak pencarian di bagian atas portal, masukkan aplikasi fungsi. Pilih Aplikasi Fungsi dari hasil pencarian.
Pilih + Buat.
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.
Pilih Tinjau + buat untuk membuat aplikasi.
Sekarang Anda dapat membuat fungsi:
Di aplikasi fungsi yang Anda buat, pilih Fungsi, lalu pilih Buat untuk membuka panel Buat fungsi .
Untuk Lingkungan pengembangan, pilih Kembangkan di portal.
Di bagian Pilih templat, pilih Pemicu HTTP.
Di bagian Detail templat:
- Untuk Fungsi Baru, masukkan nama fungsi.
- Untuk Tingkat otorisasi, pilih Fungsi.
Pilih Buat.
Buka fungsi yang Anda buat dan pilih Kode + Uji.
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:
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.
Di portal Microsoft Azure, pilih Langganan. Pilih langganan yang akan digunakan, lalu pilih Access Control (IAM).
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:
Buka aplikasi fungsi. Pilih Pengaturan Aplikasi Konfigurasi>.
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:
- Parameter input proses.
- Kueri pengambilan paket yang sudah ada untuk memverifikasi batas dan mengatasi konflik nama.
- Buat pengambilan paket dengan parameter yang sesuai.
- Polling pengambilan paket secara berkala sampai selesai.
- 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
, , resourceGroupName
dan 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:
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.
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 Pada tab Tindakan , pilih Buat grup tindakan.
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.
Pada tab Pemberitahuan , untuk Jenis tindakan, pilih Azure Function.
Pada panel Azure Function , pilih nilai Langganan, Grup sumber daya, Aplikasi fungsi, dan Fungsi Azure.
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.