Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja przechwytywania pakietów w usłudze Azure Network Watcher tworzy sesje przechwytywania w celu śledzenia ruchu przychodzącego i wychodzącego z maszyn wirtualnych. Plik przechwytywania może mieć zdefiniowany filtr do śledzenia tylko ruchu, który chcesz monitorować. Te dane są przechowywane w bloku przechowywania lub lokalnie na maszynie gościa.
Tę funkcję można uruchomić zdalnie z innych scenariuszy automatyzacji, takich jak z usługi Azure Functions. Aktywne przechwytywanie można uruchamiać na podstawie zdefiniowanych anomalii sieciowych. Inne zastosowania obejmują zbieranie statystyk sieciowych, uzyskiwanie informacji o włamaniach sieciowych i debugowanie komunikacji klienta/serwera.
Zasoby wdrażane na platformie Azure są stale uruchamiane. Trudno jest aktywnie monitorować stan wszystkich zasobów przez cały czas. Na przykład co się stanie, jeśli wystąpi problem o godzinie 2:00?
Korzystając z alertów i funkcji usługi Network Watcher z poziomu ekosystemu platformy Azure, możesz aktywnie reagować na dane i narzędzia, aby rozwiązać problemy w sieci.
Wymagania wstępne
- Najnowsza wersja programu Azure PowerShell.
- Istniejąca instancja usługi Network Watcher. Jeśli jeszcze go nie masz, utwórz instancję usługi Network Watcher.
- Istniejąca maszyna wirtualna w tym samym regionie co usługa Network Watcher z rozszerzeniem systemu Windows lub rozszerzeniem maszyny wirtualnej z systemem Linux.
Scenariusz
W tym przykładzie maszyna wirtualna ma większy ruch wychodzący niż zwykle i chcesz otrzymywać alerty. Możesz użyć podobnego procesu, aby utworzyć alerty dla dowolnego warunku.
Gdy zdarzenie wyzwoli alert, dane na poziomie pakietu ułatwiają analizowanie, dlaczego ruch wychodzący wzrósł. Możesz wykonać kroki, aby przywrócić oryginalną maszynę wirtualną.
W tym scenariuszu przyjęto założenie, że masz istniejące wystąpienie usługi Network Watcher i grupę zasobów z prawidłową maszyną wirtualną.
Oto przepływ pracy przechwytywania pakietów:
- Zdarzenie wyzwala alert na maszynie wirtualnej.
- Alerta wywołuje funkcję Azure.
- Funkcja platformy Azure przetwarza alert i uruchamia sesję przechwytywania pakietów usługi Network Watcher.
- Przechwytywanie pakietów jest uruchamiane na maszynie wirtualnej i zbiera dane.
- Plik przechwytywania pakietów jest przesyłany do konta pamięci masowej w celu przeglądu i diagnostyki.
Aby zautomatyzować ten proces, utworzysz i połączysz alert na maszynie wirtualnej, który zostanie wyzwolony po wystąpieniu zdarzenia. Utworzysz również funkcję w celu wywołania usługi Network Watcher.
Ten scenariusz:
- Tworzy funkcję platformy Azure, która uruchamia przechwytywanie pakietów.
- Tworzy regułę alertu na maszynie wirtualnej i konfiguruje regułę alertu w celu wywołania funkcji platformy Azure.
Tworzenie funkcji platformy Azure
Aby utworzyć funkcję Azure w celu przetworzenia alertu i utworzenia zrzutu pakietów, należy najpierw utworzyć aplikację funkcji:
Zaloguj się do portalu Azure.
W polu wyszukiwania w górnej części portalu wprowadź aplikacja funkcji. Wybierz Function App z wyników wyszukiwania.
Wybierz + Utwórz.
Na karcie Podstawy w sekcji Tworzenie aplikacji funkcji, wprowadź lub wybierz wartości dla następujących ustawień:
- W obszarze Project Details (Szczegóły projektu) wybierz subskrypcję, dla której chcesz utworzyć aplikację funkcji i grupę zasobów, która ma zawierać aplikację.
- W obszarze Szczegóły wystąpienia:
- Dla Nazwa aplikacji funkcji wprowadź nazwę aplikacji funkcji. Ta nazwa jest rozszerzona o .azurewebsites.net.
- W obszarze Czy chcesz wdrożyć kod lub obraz kontenera?, wybierz tryb publikowania: kod lub obraz kontenera.
- W polu Stos środowiska uruchomieniowego wybierz stos środowiska uruchomieniowego.
- W polu Wersja wybierz wersję stosu środowiska uruchomieniowego.
- W obszarze Region wybierz region, w którym chcesz utworzyć aplikację funkcji.
- W obszarze System operacyjny wybierz typ aktualnie używanego systemu operacyjnego. Platforma Azure rekomenduje typ systemu operacyjnego na podstawie wyboru stosu środowiska uruchomieniowego.
- W obszarze Hosting wybierz typ planu, którego chcesz użyć dla aplikacji funkcji. Wybierz jedną z poniższych opcji:
- Zużycie (bezserwerowe): w przypadku skalowania opartego na zdarzeniach dla najniższego kosztu.
- Functions Premium: w przypadku aplikacji bezserwerowych na poziomie przedsiębiorstwa ze skalowaniem opartym na zdarzeniach i izolacją sieci.
- Plan usługi App Service: w celu ponownego użycia zasobów obliczeniowych z istniejącego planu usługi App Service w Azure.
Wybierz pozycję Przejrzyj i utwórz , aby utworzyć aplikację.
Teraz możesz utworzyć funkcję:
W utworzonej aplikacji funkcji wybierz pozycję Funkcje, a następnie wybierz pozycję Utwórz , aby otworzyć okienko Tworzenie funkcji .
Dla Środowisko deweloperskie wybierz Opracowuj w portalu.
W obszarze Wybierz szablon wybierz Wyzwalacz HTTP.
W sekcji Szczegóły szablonu:
- W polu Nowa funkcja wprowadź nazwę funkcji.
- W obszarze Poziom autoryzacji wybierz pozycję Funkcja.
Wybierz Utwórz.
Przejdź do utworzonej funkcji i wybierz pozycję Kod i testowanie.
Zaktualizuj skrypt i wybierz pozycję Zapisz.
Konfigurowanie uwierzytelniania
Aby użyć poleceń cmdlet programu PowerShell, należy skonfigurować uwierzytelnianie w aplikacji funkcjonalnej. Aby skonfigurować uwierzytelnianie, należy skonfigurować zmienne środowiskowe i przekazać zaszyfrowany plik klucza do aplikacji funkcji.
Uwaga
Ten scenariusz zawiera tylko jeden przykład implementacji uwierzytelniania za pomocą usługi Azure Functions. Istnieją inne sposoby wykonania tej samej akcji.
Poniższy skrypt programu PowerShell tworzy plik klucza o nazwie PassEncryptKey.key. Zapewnia również zaszyfrowaną wersję podanego hasła. To hasło jest tym samym hasłem zdefiniowanym dla aplikacji Microsoft Entra, która jest używana do uwierzytelniania.
#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
Pobieranie wartości zmiennych środowiskowych
Skonfiguruj następujące zmienne środowiskowe, które są niezbędne do uzyskania dostępu do wartości uwierzytelniania:
AzureClientID
AzureTenant
AzureCredPassword
Jeśli masz już identyfikator aplikacji, użyj wartości AzureClientID
, AzureTenant
i AzureCredPassword
tej aplikacji. Jeśli go nie masz, przejdź do sekcji Przechowywanie zmiennych środowiskowych.
Identyfikator klienta platformy Azure
Identyfikator klienta jest identyfikatorem aplikacji w usłudze Microsoft Entra ID. Aby uzyskać identyfikator klienta:
Jeśli nie masz jeszcze aplikacji do użycia, uruchom następujące polecenie cmdlet, aby utworzyć aplikację:
$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
Uwaga
Hasło używane podczas tworzenia aplikacji powinno być tym samym hasłem utworzonym wcześniej podczas zapisywania pliku klucza.
W witrynie Azure Portal wybierz pozycję Subskrypcje. Wybierz subskrypcję do użycia, a następnie wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami).
Wybierz konto do użycia, a następnie wybierz pozycję Właściwości. Skopiuj identyfikator aplikacji.
AzureTenant
Pobierz identyfikator dzierżawy, uruchamiając następujący cmdlet programu PowerShell.
(Get-AzSubscription -SubscriptionName "<subscriptionName>").TenantId
AzureCredPassword (Hasło AzureCredPassword)
Wartość zmiennej środowiskowej AzureCredPassword
to wartość uzyskana z uruchamiania następującego przykładu programu PowerShell. Ten przykład jest taki sam, jak pokazano w poprzedniej sekcji Konfigurowanie uwierzytelniania . Potrzebna wartość to dane wyjściowe zmiennej $Encryptedpassword
. Ten wynik to hasło głównej jednostki usługi, które zaszyfrowałeś przy użyciu skryptu programu 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
Przechowywanie zmiennych środowiskowych
Aby przechowywać zmienne środowiskowe:
Przejdź do aplikacji funkcjonalnej. Wybierz pozycję Konfiguracje>Ustawienia aplikacji.
Dodaj zmienne środowiskowe i ich wartości do ustawień aplikacji, a następnie wybierz pozycję Zapisz.
Dodawanie programu PowerShell do funkcji
Teraz wykonaj wywołania usługi Network Watcher z poziomu funkcji platformy Azure. W zależności od wymagań implementacja tej funkcji może się różnić. Jednak ogólny przepływ kodu jest następujący:
- Przetwarzanie parametrów wejściowych.
- Zapytania dotyczące istniejących przechwytywań pakietów, aby zweryfikować limity i rozwiązać konflikty nazw.
- Utwórz przechwytywanie pakietów z wykorzystaniem odpowiednich parametrów.
- Monitoruj przechwytywanie pakietów okresowo, aż do jego zakończenia.
- Powiadom użytkownika o zakończeniu sesji przechwytywania pakietów.
W poniższym przykładzie przedstawiono kod programu PowerShell, którego można użyć w funkcji . Należy zastąpić wartości subscriptionId
, resourceGroupName
i 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
}
}
Jeśli używasz starego schematu, użyj następującego kodu programu 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
}
}
Konfigurowanie alertu na maszynie wirtualnej
Alerty można skonfigurować tak, aby powiadamiały osoby, gdy określona metryka przekroczy przypisany do niej próg. W tym przykładzie alert dotyczy metryki Całkowite wyjścia sieci, która jest wysyłana, ale możesz wyzwolić alert dla wielu innych metryk.
Tworzenie reguły alertu
Przejdź do istniejącej maszyny wirtualnej i dodaj regułę alertu. Na stronie Tworzenie reguły alertu wykonaj następujące kroki:
W okienku Wybierz sygnał wyszukaj nazwę sygnału i wybierz go. W tym przykładzie Network Out Total jest wybranym sygnałem. Określa liczbę bajtów wychodzących na wszystkich interfejsach sieciowych wykorzystywanych przez maszynę wirtualną.
Na karcie Warunki ustaw następujące wartości, a następnie wybierz pozycję Dalej: Akcje.
Ustawienie Wartość Próg Statyczny Typ agregacji Średnia Operator Większe niż Wartość progowa 3 Sprawdź każdy 1 minuta Okres retrospektywny 5 minut Na karcie Akcje wybierz pozycję Utwórz grupę akcji.
Na stronie Tworzenie grupy akcji wybierz wartości Subskrypcja, Grupa zasobów i Region. Wprowadź również nazwę grupy akcji i nazwę wyświetlaną, a następnie wybierz pozycję Dalej: Powiadomienia.
Na karcie Powiadomienia, w polu Typ akcji, wybierz Funkcja Azure.
W okienku Funkcja Azure wybierz Subskrypcję, Grupę zasobów, Aplikację funkcji i Funkcję Azure.
Na suwaku Włącz wspólny schemat alertu wybierz Nie. Następnie wybierz opcję OK.
Sprawdzanie wyników
Po tym, jak kryteria wywołują alert, usługa Network Watcher tworzy zrzut pakietów. Przejdź do usługi Network Watcher i wybierz pozycję Przechwytywanie pakietów. Na tej stronie możesz wybrać link do pliku, aby pobrać zrzut ruchu sieciowego.
Jeśli plik przechwytywania jest przechowywany lokalnie, możesz go uzyskać, logując się do maszyny wirtualnej.
Aby uzyskać instrukcje dotyczące pobierania plików z kont usługi Azure Storage, zobacz przewodnik Szybki start dotyczący biblioteki klienta usługi Azure Blob Storage dla platformy .NET. Możesz również użyć narzędzia Eksplorator usługi Azure Storage.
Po pobraniu przechwytywania można go wyświetlić za pomocą narzędzi takich jak Wireshark, które mogą odczytywać plik .cap.