Proaktivně monitorujte sítě pomocí výstrah a Azure Functions pomocí zachytávání paketů.
Funkce zachytávání paketů služby Azure Network Watcher vytváří relace zachytávání pro sledování provozu virtuálních počítačů a z virtuálních počítačů. Soubor pro zachytávání může mít filtr, který definujete, aby sledoval pouze provoz, který chcete monitorovat. Tato data jsou uložená v objektu blob úložiště nebo místně na hostovaném počítači.
Tuto funkci můžete spustit vzdáleně z jiných scénářů automatizace, například z Azure Functions. Můžete spouštět proaktivní zachytávání na základě definovaných síťových anomálií. Mezi další způsoby použití patří shromažďování statistik sítě, získávání informací o narušení sítě a ladění komunikace mezi klientem a serverem.
Prostředky nasazené v Azure běží nepřetržitě. Stav všech prostředků je obtížné aktivně monitorovat. Co se stane například v případě, že dojde k problému ve 2:00?
Pomocí upozornění a funkcí služby Network Watcher v ekosystému Azure můžete aktivně reagovat s daty a nástroji za účelem řešení problémů ve vaší síti.
Požadavky
- Nejnovější verze Azure PowerShellu
- Existující instance služby Network Watcher. Pokud ho ještě nemáte, vytvořte instanci služby Network Watcher.
- Existující virtuální počítač ve stejné oblasti jako Network Watcher s rozšířením Windows nebo rozšířením virtuálního počítače s Linuxem.
Scénář
V tomto příkladu má virtuální počítač více odchozích přenosů než obvykle a chcete být upozorněni. Podobný proces můžete použít k vytvoření výstrah pro libovolnou podmínku.
Když incident aktivuje výstrahu, data na úrovni paketů vám pomůžou analyzovat, proč se odchozí provoz zvýšil. Můžete provést kroky k vrácení virtuálního počítače do původního stavu.
Tento scénář předpokládá, že máte existující instanci služby Network Watcher a skupinu prostředků s platným virtuálním počítačem.
Tady je pracovní postup pro zachytávání paketů:
- Incident aktivuje na virtuálním počítači upozornění.
- Upozornění volá vaši funkci Azure.
- Vaše funkce Azure zpracuje výstrahu a spustí relaci zachytávání paketů služby Network Watcher.
- Zachytávání paketů běží na virtuálním počítači a shromažďuje data.
- Soubor zachytávání paketů se nahraje do účtu úložiště pro kontrolu a diagnostiku.
Pokud chcete tento proces automatizovat, vytvoříte a připojíte na virtuálním počítači výstrahu, která se aktivuje při výskytu incidentu. Vytvoříte také funkci pro volání služby Network Watcher.
Tento scénář:
- Vytvoří funkci Azure, která spustí zachytávání paketů.
- Vytvoří na virtuálním počítači pravidlo upozornění a nakonfiguruje pravidlo upozornění tak, aby volala funkci Azure.
Vytvoření funkce Azure
Pokud chcete vytvořit funkci Azure pro zpracování výstrahy a vytvoření zachytávání paketů, musíte nejprve vytvořit aplikaci funkcí:
Přihlaste se k portálu Azure.
Do vyhledávacího pole v horní části portálu zadejte aplikaci funkcí. Vevýsledcíchch
Vyberte + Vytvořit.
Na kartě Základy vytvoření aplikace funkcí zadejte nebo vyberte hodnoty pro následující nastavení:
- V části Podrobnosti projektu vyberte předplatné, pro které chcete vytvořit aplikaci funkcí a skupinu prostředků, která bude obsahovat aplikaci.
- V části Podrobnosti o instanci:
- Jako název aplikace funkcí zadejte název aplikace funkcí. Tento název je připojený pomocí .azurewebsites.net.
- Chcete nasadit kód nebo image kontejneru? vyberte režim publikování: Kód nebo image kontejneru.
- V případě zásobníku modulu runtime vyberte zásobník modulu runtime.
- Jako verzi vyberte verzi zásobníku modulu runtime.
- V části Oblast vyberte oblast, ve které chcete vytvořit aplikaci funkcí.
- V části Operační systém vyberte typ operačního systému, který aktuálně používáte. Azure doporučuje typ operačního systému na základě výběru zásobníku modulu runtime.
- V části Hostování vyberte typ plánu, který chcete použít pro aplikaci funkcí. Vyberte si z následujících možností:
- Spotřeba (bezserverová):: Pro škálování řízené událostmi za nejnižší cenu.
- Functions Premium: Pro bezserverové aplikace na podnikové úrovni s škálováním na základě událostí a izolací sítě.
- Plán služby App Service: Opětovné nasazení výpočetních prostředků z existujícího plánu služby Aplikace Azure Service.
Vyberte Zkontrolovat a vytvořit aplikaci.
Teď můžete vytvořit funkci:
V aplikaci funkcí, kterou jste vytvořili, vyberte Funkce a pak výběrem možnosti Vytvořit otevřete podokno Vytvořit funkci .
Pro Vývojové prostředí vyberte Vývoj na portálu.
V části Vybrat šablonu vyberte trigger HTTP.
V části Podrobnosti šablony:
- Do pole Nová funkce zadejte název funkce.
- Pro úroveň autorizace vyberte funkci.
Vyberte Vytvořit.
Přejděte na funkci, kterou jste vytvořili, a vyberte Kód + Test.
Aktualizujte skript a vyberte Uložit.
Konfigurace ověřování
Pokud chcete používat rutiny PowerShellu, musíte nakonfigurovat ověřování v aplikaci funkcí. Pokud chcete nakonfigurovat ověřování, musíte nakonfigurovat proměnné prostředí a nahrát soubor šifrovaného klíče do aplikace funkcí.
Poznámka:
Tento scénář poskytuje pouze jeden příklad implementace ověřování pomocí Azure Functions. Existují i jiné způsoby, jak provést stejnou akci.
Následující skript PowerShellu vytvoří soubor klíče s názvem PassEncryptKey.key. Poskytuje také zašifrovanou verzi zadaného hesla. Toto heslo je stejné heslo, které je definované pro aplikaci Microsoft Entra, která se používá k ověřování.
#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
Načtení hodnot pro proměnné prostředí
Nastavte následující proměnné prostředí, které jsou nezbytné pro přístup k hodnotám ověřování:
AzureClientID
AzureTenant
AzureCredPassword
Pokud již máte ID aplikace, použijte AzureClientID
hodnotu , AzureTenant
a AzureCredPassword
hodnoty této aplikace. Pokud ho nemáte, přejděte do části Uložit proměnné prostředí.
AzureClientID
ID klienta je ID aplikace v Microsoft Entra ID. Získání ID klienta:
Pokud ještě nemáte aplikaci, kterou chcete použít, vytvořte aplikaci spuštěním následující rutiny:
$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
Poznámka:
Heslo, které použijete při vytváření aplikace, by mělo být stejné heslo, které jste vytvořili dříve při uložení souboru klíče.
Na webu Azure Portal vyberte Předplatná. Vyberte předplatné, které chcete použít, a pak vyberte Řízení přístupu (IAM).
Zvolte účet, který chcete použít, a pak vyberte Vlastnosti. Zkopírujte ID aplikace.
AzureTenant
Id tenanta získáte spuštěním následující rutiny PowerShellu:
(Get-AzSubscription -SubscriptionName "<subscriptionName>").TenantId
AzureCredPassword
Hodnota proměnné prostředí je hodnota AzureCredPassword
, kterou získáte od spuštění následující ukázky PowerShellu. Tato ukázka je stejná jako předchozí část Konfigurace ověřování . Hodnota, kterou potřebujete, je výstupem $Encryptedpassword
proměnné. Tento výstup je heslo instančního objektu, které jste zašifrovali pomocí skriptu PowerShellu.
#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
Uložení proměnných prostředí
Uložení proměnných prostředí:
Přejděte do aplikace funkcí. Vyberte Nastavení aplikace Konfigurace>.
Přidejte proměnné prostředí a jejich hodnoty do nastavení aplikace a pak vyberte Uložit.
Přidání PowerShellu do funkce
Teď volání do služby Network Watcher z funkce Azure Functions proveďte. V závislosti na požadavcích se implementace této funkce může lišit. Obecný tok kódu je však následující:
- Zpracování vstupních parametrů
- Dotazování existujících zachytávání paketů za účelem ověření limitů a vyřešení konfliktů názvů
- Vytvořte zachytávání paketů s příslušnými parametry.
- Dotazování zachytávání paketů pravidelně, dokud se nedokončí.
- Upozorněte uživatele, že je relace zachytávání paketů dokončena.
Následující příklad je kód PowerShellu, který můžete použít ve funkci. Je třeba nahradit hodnoty pro subscriptionId
, resourceGroupName
a 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
}
}
Pokud používáte staré schéma, použijte následující kód PowerShellu:
# 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
}
}
Konfigurace výstrahy na virtuálním počítači
Výstrahy můžete nakonfigurovat tak, aby upozorňovat jednotlivce, když konkrétní metrika překročí prahovou hodnotu, kterou jste k ní přiřadili. V tomto příkladu se výstraha nachází na odesílané metrikě celkového počtu síťových odchozích dat, ale upozornění můžete aktivovat pro mnoho dalších metrik.
Vytvoření pravidla upozornění
Přejděte na existující virtuální počítač a přidejte pravidlo upozornění. Na stránce Vytvořit pravidlo upozornění proveďte následující kroky:
V podokně Vybrat signál vyhledejte název signálu a vyberte ho. V tomto příkladu je vybraným signálem součet síťových přenosů. Označuje počet bajtů na všech síťových rozhraních virtuálního počítače.
Na kartě Podmínky nastavte následující hodnoty a pak vyberte Další: Akce.
Nastavení Hodnota Prahová hodnota staticky. Typ agregace Průměr Operátor Je větší než Prahová hodnota 3 Zkontrolujte všechny 1 min. Období zpětného vyhledávání 5 minut Na kartě Akce vyberte Vytvořit skupinu akcí.
Na stránce Vytvořit skupinu akcí vyberte hodnoty Předplatné, Skupina prostředků a Oblast. Zadejte také název skupiny akcí a zobrazovaný název a pak vyberte Další: Oznámení.
Na kartě Oznámení jako typ akce vyberte funkci Azure Functions.
V podokně Funkce Azure vyberte hodnoty Předplatné, Skupina prostředků, Aplikace funkcí a Funkce Azure.
V části Povolit běžný posuvník schématu upozornění vyberte Ne. Pak vyberte OK.
Kontrola výsledků
Jakmile kritéria aktivují výstrahu, Network Watcher vytvoří zachytávání paketů. Přejděte do služby Network Watcher a vyberte Zachytávání paketů. Na této stránce můžete vybrat odkaz na soubor a stáhnout zachytávání paketů.
Pokud je soubor pro zachytávání uložený místně, můžete ho získat přihlášením k virtuálnímu počítači.
Pokyny ke stažení souborů z účtů úložiště Azure najdete v rychlém startu pro klientskou knihovnu Azure Blob Storage pro .NET. Můžete také použít nástroj Průzkumník služby Azure Storage.
Po stažení záznamu ho můžete zobrazit pomocí nástrojů, jako je Wireshark , které můžou číst soubor .cap .
Další krok
Přečtěte si, jak zobrazit zachytávání paketů v části Kontrola a analýza souborů zachytávání paketů služby Network Watcher.