Hálózatok proaktív monitorozása riasztásokkal és Azure Functions-funkciókkal csomagrögzítéssel
Az Azure Network Watcher csomagrögzítési funkciója rögzítési munkameneteket hoz létre a virtuális gépek (virtuális gépek) bejövő és kimenő forgalmának nyomon követéséhez. A rögzítési fájl rendelkezhet olyan szűrővel, amelyet úgy határoz meg, hogy csak a figyelni kívánt forgalmat kövesse nyomon. Ezeket az adatokat egy tárolóblobban vagy helyileg a vendéggépen tárolja a rendszer.
Ezt a képességet távolról is elindíthatja más automatizálási forgatókönyvekből, például az Azure Functionsből. Proaktív rögzítéseket futtathat meghatározott hálózati rendellenességek alapján. Más felhasználási módok közé tartozik a hálózati statisztikák összegyűjtése, a hálózati behatolásokkal kapcsolatos információk lekérése, valamint az ügyfél-/kiszolgálói kommunikáció hibakeresése.
Az Azure-ban üzembe helyezett erőforrások folyamatosan futnak. Nehéz mindig aktívan figyelni az összes erőforrás állapotát. Mi történik például, ha a probléma hajnali 2:00-kor jelentkezik?
Az Azure-ökoszisztémából származó Network Watcher-riasztások és -funkciók használatával proaktív módon válaszolhat az adatokkal és eszközökkel a hálózat problémáinak megoldásához.
Előfeltételek
- Az Azure PowerShell legújabb verziója.
- A Network Watcher egy meglévő példánya. Ha még nincs ilyenje, hozzon létre egy Network Watcher-példányt.
- Egy meglévő virtuális gép ugyanabban a régióban, mint a Network Watcher, windowsos vagy Linux rendszerű virtuálisgép-bővítménnyel.
Eset
Ebben a példában egy virtuális gép a szokásosnál több kimenő forgalommal rendelkezik, és riasztást szeretne kapni. Hasonló eljárással riasztásokat hozhat létre bármilyen feltételhez.
Amikor egy incidens riasztást aktivál, a csomagszintű adatok segítenek elemezni, hogy miért nőtt a kimenő forgalom. A virtuális gép eredeti állapotának visszaállításához lépéseket is elvégezhet.
Ez a forgatókönyv feltételezi, hogy rendelkezik a Network Watcher meglévő példányával és egy érvényes virtuális géppel rendelkező erőforráscsoporttal.
A csomagrögzítés munkafolyamata:
- Egy incidens riasztást indít el a virtuális gépen.
- A riasztás meghívja az Azure-függvényt.
- Az Azure-függvény feldolgozza a riasztást, és elindít egy Network Watcher-csomagrögzítési munkamenetet.
- A csomagrögzítés a virtuális gépen fut, és adatokat gyűjt.
- A csomagrögzítési fájl feltöltése egy tárfiókba felülvizsgálat és diagnosztizálás céljából.
A folyamat automatizálásához létre kell hoznia és csatlakoztatnia kell egy riasztást a virtuális gépen, amely az incidens bekövetkezésekor aktiválódik. A Network Watcher meghívásához is létre kell hoznia egy függvényt.
Ez a forgatókönyv:
- Létrehoz egy Azure-függvényt, amely elindít egy csomagrögzítést.
- Létrehoz egy riasztási szabályt egy virtuális gépen, és konfigurálja a riasztási szabályt az Azure-függvény meghívására.
Azure-függvény létrehozása
Ahhoz, hogy létrehozhasson egy Azure-függvényt a riasztás feldolgozásához és egy csomagrögzítés létrehozásához, először létre kell hoznia egy függvényalkalmazást:
Jelentkezzen be az Azure Portalra.
A portál tetején található keresőmezőbe írja be a függvényalkalmazást. Válassza a függvényalkalmazást a keresési eredmények közül.
Válassza a +Létrehozás lehetőséget.
A Függvényalkalmazás létrehozása alapbeállítások lapján adja meg vagy válassza ki az alábbi beállítások értékeit:
- A Projekt részletei csoportban válassza ki azt az előfizetést, amelyhez létre szeretné hozni a függvényalkalmazást és az alkalmazást tartalmazó erőforráscsoportot.
- A Példány részletei csoportban:
- A függvényalkalmazás neveként adja meg a függvényalkalmazás nevét. Ez a név hozzá van fűzve a .azurewebsites.net.
- Kód vagy tárolórendszerkép üzembe helyezéséhez válassza ki a közzététel módját: Kód vagy tárolórendszerkép.
- Futtatókörnyezeti verem esetén válasszon ki egy futtatókörnyezeti vermet.
- Verzió esetén válassza ki a futtatókörnyezeti verem verzióját.
- Régió esetén válassza ki azt a régiót, amelyben létre szeretné hozni a függvényalkalmazást.
- Az Operációs rendszer területen válassza ki a jelenleg használt operációs rendszer típusát. Az Azure a futtatókörnyezeti verem kiválasztása alapján javasolja az operációs rendszer típusát.
- Az Üzemeltetés területen válassza ki a függvényalkalmazáshoz használni kívánt csomag típusát. Válasszon a következő lehetőségek közül:
- Használat (kiszolgáló nélküli):: Eseményvezérelt skálázáshoz a legalacsonyabb költség érdekében.
- Functions Premium: Nagyvállalati szintű, kiszolgáló nélküli, eseményalapú skálázással és hálózatelkülönítéssel rendelkező alkalmazásokhoz.
- App Service-csomag: A számítás egy meglévő Azure-alkalmazás szolgáltatáscsomagból való újrafelhasználására szolgál.
Az alkalmazás létrehozásához válassza a Véleményezés + létrehozás lehetőséget .
Most már létrehozhat egy függvényt:
A létrehozott függvényalkalmazásban válassza a Függvények lehetőséget, majd a Létrehozás lehetőséget a Függvény létrehozása panel megnyitásához.
A Fejlesztési környezet mezőben válassza a Fejlesztés a portálon lehetőséget.
A Sablon kiválasztása területen válassza a HTTP-eseményindítót.
A Sablon részletei szakaszban:
- Új függvény esetén adja meg a függvény nevét.
- Az engedélyezési szinthez válassza a Függvény lehetőséget.
Válassza a Létrehozás lehetőséget.
Nyissa meg a létrehozott függvényt, és válassza a Code + Test lehetőséget.
Frissítse a szkriptet, és válassza a Mentés lehetőséget.
Hitelesítés konfigurálása
A PowerShell-parancsmagok használatához konfigurálnia kell a hitelesítést a függvényalkalmazásban. A hitelesítés konfigurálásához konfigurálnia kell a környezeti változókat, és fel kell töltenie egy titkosított kulcsfájlt a függvényalkalmazásba.
Feljegyzés
Ez a forgatókönyv csak egy példát mutat be arra, hogyan implementálhatja a hitelesítést az Azure Functions használatával. Ugyanez a művelet más módon is elvégezhető.
A következő PowerShell-szkript létrehoz egy PassEncryptKey.key nevű kulcsfájlt. Emellett a megadott jelszó titkosított verzióját is biztosítja. Ez a jelszó ugyanaz a jelszó, amely a Hitelesítéshez használt Microsoft Entra-alkalmazáshoz van definiálva.
#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
Környezeti változók értékeinek lekérése
Állítsa be a következő környezeti változókat, amelyek a hitelesítéshez szükséges értékek eléréséhez szükségesek:
AzureClientID
AzureTenant
AzureCredPassword
Ha már rendelkezik alkalmazásazonosítóval, használja az AzureClientID
alkalmazás , AzureTenant
és AzureCredPassword
értékeit. Ha nincs ilyenje, lépjen a Környezeti változók tárolása szakaszra.
AzureClientID
Az ügyfél-azonosító egy alkalmazás azonosítója a Microsoft Entra-azonosítóban. Az ügyfélazonosító lekérése:
Ha még nincs használandó alkalmazás, futtassa a következő parancsmagot egy alkalmazás létrehozásához:
$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
Feljegyzés
Az alkalmazás létrehozásakor használt jelszónak meg kell egyeznie a kulcsfájl mentésekor korábban létrehozott jelszóval.
Az Azure Portalon válassza az Előfizetések lehetőséget. Válassza ki a használni kívánt előfizetést, majd válassza a Hozzáférés-vezérlés (IAM) lehetőséget.
Válassza ki a használni kívánt fiókot, majd válassza a Tulajdonságok lehetőséget. Másolja ki az alkalmazásazonosítót.
AzureTenant
Kérje le a bérlőazonosítót a következő PowerShell-parancsmag futtatásával:
(Get-AzSubscription -SubscriptionName "<subscriptionName>").TenantId
AzureCredPassword
A környezeti változó értéke az AzureCredPassword
az érték, amelyet a következő PowerShell-minta futtatásából kap. Ez a minta ugyanaz, mint amit az előző Hitelesítés konfigurálása szakasz mutatott. A szükséges érték a változó kimenete $Encryptedpassword
. Ez a kimenet a Szolgáltatásnév jelszava, amelyet a PowerShell-szkripttel titkosított.
#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
A környezeti változók tárolása
A környezeti változók tárolása:
Nyissa meg a függvényalkalmazást. Válassza a Konfigurációk>alkalmazásbeállítások lehetőséget.
Adja hozzá a környezeti változókat és azok értékeit az alkalmazás beállításaihoz, majd válassza a Mentés lehetőséget.
PowerShell hozzáadása a függvényhez
Most az Azure-függvényen belül kezdeményezz hívásokat a Network Watcherbe. A követelményektől függően ennek a függvénynek a megvalósítása eltérő lehet. A kód általános folyamata azonban a következő:
- Bemeneti paraméterek feldolgozása.
- Meglévő csomagrögzítések lekérdezése a korlátok ellenőrzéséhez és a névütközések feloldásához.
- Hozzon létre egy csomagrögzítést a megfelelő paraméterekkel.
- A csomagrögzítést rendszeres időközönként lekérdezheti, amíg be nem fejeződik.
- Értesítse a felhasználót a csomagrögzítési munkamenet befejezéséről.
Az alábbi példa a függvényben használható PowerShell-kód. A ( és storageAccountName
) értékeket subscriptionId
resourceGroupName
cserélje le.
# 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
}
}
Használja a következő PowerShell-kódot, ha a régi sémát használja:
# 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
}
}
Riasztás konfigurálása virtuális gépen
Riasztásokat konfigurálhat az egyének értesítésére, ha egy adott metrika átlépi a hozzá rendelt küszöbértéket. Ebben a példában a riasztás az elküldött Network Out Total metrikáján található, de számos más metrikához is aktiválhatja a riasztást.
A riasztási szabály létrehozása
Lépjen egy meglévő virtuális gépre, és adjon hozzá egy riasztási szabályt. A Riasztási szabály létrehozása lapon hajtsa végre a következő lépéseket:
A Jel kiválasztása panelen keresse meg a jel nevét, és jelölje ki. Ebben a példában a Hálózat végösszege a kijelölt jel. A virtuális gép által az összes hálózati adapteren kimenő bájtok számát jelöli.
A Feltételek lapon állítsa be a következő értékeket, majd válassza a Tovább: Műveletek lehetőséget.
Beállítás Érték Küszöb Statikus Összesítés típusa Átlag Operátor Nagyobb mint Küszöbérték 3 Ellenőrizze az összes 1 perc Visszatekintési időszak 5 perc A Műveletek lapon válassza a Műveletcsoport létrehozása lehetőséget.
A Műveletcsoport létrehozása lapon válassza ki az Előfizetés, az Erőforráscsoport és a Régió értéket. Adja meg a műveletcsoport nevét és a megjelenítendő nevet is, majd válassza a Tovább: Értesítések lehetőséget.
Az Értesítések lap művelettípusához válassza az Azure-függvényt.
Az Azure-függvény panelen válassza ki az Előfizetés, az Erőforráscsoport, a Függvényalkalmazás és az Azure-függvény értékeit.
A riasztási séma általános csúszkáinak engedélyezése területen válassza a Nem lehetőséget. Ezután válassza az OK gombra.
Az eredmények áttekintése
Miután a feltételek riasztást aktiváltak, a Network Watcher létrehoz egy csomagrögzítést. Nyissa meg a Network Watchert, és válassza a Csomagrögzítés lehetőséget. Ezen a lapon kiválaszthatja a fájlhivatkozást a csomagrögzítés letöltéséhez.
Ha a rögzítési fájl helyileg van tárolva, a virtuális gépre való bejelentkezéssel szerezheti be.
A fájlok Azure Storage-fiókokból való letöltésével kapcsolatos utasításokért tekintse meg a .NET-hez készült Azure Blob Storage ügyfélkódtár rövid útmutatóját. Az Azure Storage Explorer eszközt is használhatja.
A rögzítés letöltése után olyan eszközökkel tekintheti meg, mint a Wireshark , amelyek beolvashatnak egy .cap-fájlt .
Következő lépés
Megtudhatja, hogyan tekintheti meg a csomagrögzítéseket a Network Watcher csomagrögzítési fájljainak vizsgálatával és elemzésével.