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

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ů:

  1. Incident aktivuje na virtuálním počítači upozornění.
  2. Upozornění volá vaši funkci Azure.
  3. Vaše funkce Azure zpracuje výstrahu a spustí relaci zachytávání paketů služby Network Watcher.
  4. Zachytávání paketů běží na virtuálním počítači a shromažďuje data.
  5. 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í:

  1. Přihlaste se k portálu Azure.

  2. Do vyhledávacího pole v horní části portálu zadejte aplikaci funkcí. Vevýsledcíchch

    Snímek obrazovky znázorňující, jak hledat aplikace funkcí na webu Azure Portal

  3. Vyberte + Vytvořit.

  4. 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.

    Snímek obrazovky se stránkou Vytvořit aplikaci funkcí na webu Azure Portal

  5. Vyberte Zkontrolovat a vytvořit aplikaci.

Teď můžete vytvořit funkci:

  1. V aplikaci funkcí, kterou jste vytvořili, vyberte Funkce a pak výběrem možnosti Vytvořit otevřete podokno Vytvořit funkci .

    Snímek obrazovky s podoknem Vytvořit funkci

  2. Pro Vývojové prostředí vyberte Vývoj na portálu.

  3. V části Vybrat šablonu vyberte trigger HTTP.

  4. V části Podrobnosti šablony:

    • Do pole Nová funkce zadejte název funkce.
    • Pro úroveň autorizace vyberte funkci.
  5. Vyberte Vytvořit.

  6. Přejděte na funkci, kterou jste vytvořili, a vyberte Kód + Test.

    Snímek obrazovky se stránkou Code + Test pro funkci

  7. 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 AzureClientIDhodnotu , AzureTenanta 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:

  1. 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.

  2. Na webu Azure Portal vyberte Předplatná. Vyberte předplatné, které chcete použít, a pak vyberte Řízení přístupu (IAM).

  3. 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í:

  1. Přejděte do aplikace funkcí. Vyberte Nastavení aplikace Konfigurace>.

    Snímek obrazovky s kartou pro nastavení aplikace

  2. 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í:

  1. Zpracování vstupních parametrů
  2. Dotazování existujících zachytávání paketů za účelem ověření limitů a vyřešení konfliktů názvů
  3. Vytvořte zachytávání paketů s příslušnými parametry.
  4. Dotazování zachytávání paketů pravidelně, dokud se nedokončí.
  5. 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, resourceGroupNamea 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:

  1. 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.

  2. 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
  3. Na kartě Akce vyberte Vytvořit skupinu akcí.

  4. 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í.

  5. Na kartě Oznámení jako typ akce vyberte funkci Azure Functions.

  6. V podokně Funkce Azure vyberte hodnoty Předplatné, Skupina prostředků, Aplikace funkcí a Funkce Azure.

    Snímek obrazovky se stránkou pro vytvoření skupiny akcí a podokna s podrobnostmi o funkci Azure

  7. 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.