Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
De stroomlogs van de Network Security Group (NSG) gaan met pensioen op 30 september 2027. Omdat de functie met pensioen gaat, ondersteunt deze het niet langer het aanmaken van nieuwe NSG-flowlogs. Migratie naar virtuele netwerkstroomlogs, die de beperkingen van NSG-stroomlogs aanpakken. Na de pensioendatum ondersteunt Azure geen verkeersanalyse meer ingeschakeld voor NSG-flowlogs en verwijdert bestaande NSG-flowlogbronnen in je abonnementen. Azure verwijdert echter geen bestaande NSG-flowlogrecords uit Azure Storage, en ze blijven hun geconfigureerde retentiebeleid volgen. Zie de officiële aankondiging voor meer informatie.
In dit artikel leert u hoe u selectief gedeelten van Azure Network Watcher-stroomlogboeken kunt lezen met behulp van PowerShell zonder dat u het hele logboek hoeft te parseren. Stroomlogboeken worden opgeslagen in een opslagaccount in block blobs. Elk logboek is een afzonderlijke blok-blob die elk uur wordt gegenereerd en elke paar minuten wordt bijgewerkt met de meest recente gegevens. Met behulp van het script in dit artikel kunt u de meest recente gegevens uit de stroomlogboeken lezen zonder dat u het hele logboek hoeft te downloaden.
De concepten die in dit artikel worden besproken, zijn niet beperkt tot PowerShell en zijn van toepassing op alle talen die worden ondersteund door de Azure Storage-API's.
Vereisten
Een Azure-account met een actief abonnement. Maak gratis een account.
PowerShell is geïnstalleerd op uw computer. Zie PowerShell installeren in Windows, Linux en macOS voor meer informatie. Voor dit artikel is de Az PowerShell-module vereist. Zie Azure PowerShell installeren voor meer informatie. Voer
Get-Module -ListAvailable Azuit om te zien welke versie is geïnstalleerd.Stroomlogs in één of meer regio's. Zie Stroomlogboeken voor virtuele netwerken maken voor meer informatie.
Benodigde azure RBAC-machtigingen (op rollen gebaseerd toegangsbeheer) voor de abonnementen van stroomlogboeken en opslagaccounts. Zie Network Watcher RBAC-machtigingen voor meer informatie.
De blokkeringslijst ophalen
In deze sectie stelt u de variabelen in die nodig zijn om een query uit te voeren op de blob van het stroomlogboek en de blokken in de blok-blob CloudBlockBlob weer te geven.
Werk het PowerShell-script bij met geldige waarden voor uw omgeving.
function Get-VNetFlowLogCloudBlockBlob {
[CmdletBinding()]
param (
[string] [Parameter(Mandatory=$true)] $subscriptionId,
[string] [Parameter(Mandatory=$true)] $region,
[string] [Parameter(Mandatory=$true)] $VNetFlowLogName,
[string] [Parameter(Mandatory=$true)] $storageAccountName,
[string] [Parameter(Mandatory=$true)] $storageAccountResourceGroup,
[string] [Parameter(Mandatory=$true)] $macAddress,
[datetime] [Parameter(Mandatory=$true)] $logTime
)
process {
# Retrieve the primary storage account key to access the virtual network flow logs
$StorageAccountKey = (Get-AzStorageAccountKey -ResourceGroupName $storageAccountResourceGroup -Name $storageAccountName).Value[0]
# Setup a new storage context to be used to query the logs
$ctx = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $StorageAccountKey
# Container name used by virtual network flow logs
$ContainerName = "insights-logs-flowlogflowevent"
# Name of the blob that contains the virtual network flow log
$BlobName = "flowLogResourceID=/$($subscriptionId.ToUpper())_NETWORKWATCHERRG/NETWORKWATCHER_$($region.ToUpper())_$($VNetFlowLogName.ToUpper())/y=$($logTime.Year)/m=$(($logTime).ToString("MM"))/d=$(($logTime).ToString("dd"))/h=$(($logTime).ToString("HH"))/m=00/macAddress=$($macAddress)/PT1H.json"
# Gets the storage blog
$Blob = Get-AzStorageBlob -Context $ctx -Container $ContainerName -Blob $BlobName
# Gets the block blog of type 'Microsoft.Azure.Storage.Blob.CloudBlob' from the storage blob
$CloudBlockBlob = [Microsoft.Azure.Storage.Blob.CloudBlockBlob] $Blob.ICloudBlob
#Return the Cloud Block Blob
$CloudBlockBlob
}
}
function Get-VNetFlowLogBlockList {
[CmdletBinding()]
param (
[Microsoft.Azure.Storage.Blob.CloudBlockBlob] [Parameter(Mandatory=$true)] $CloudBlockBlob
)
process {
# Stores the block list in a variable from the block blob.
$blockList = $CloudBlockBlob.DownloadBlockListAsync()
# Return the Block List
$blockList
}
}
$CloudBlockBlob = Get-VNetFlowLogCloudBlockBlob -subscriptionId "yourSubscriptionId" -region "yourVNetFlowLogRegion" -VNetFlowLogName "yourVNetFlowLogName" -storageAccountName "yourStorageAccountName" -storageAccountResourceGroup "yourStorageAccountRG" -macAddress "0022485D8CF8" -logTime "07/09/2023 03:00"
$blockList = Get-VNetFlowLogBlockList -CloudBlockBlob $CloudBlockBlob
De $blockList variabele retourneert een lijst met de blokken in de blob. Elke blok-blob bevat ten minste twee blokken. Het eerste blok heeft een lengte van 12 bytes en bevat de openingshaakjes van het JSON-log. Het andere blok is de sluitende vierkante haken en heeft een lengte van 2 bytes. Het volgende voorbeeldlogboek bevat zeven afzonderlijke vermeldingen. Alle nieuwe vermeldingen in het logboek worden direct vóór het laatste blok toegevoegd aan het einde.
Name Length Committed
---- ------ ---------
ZDk5MTk5N2FkNGE0MmY5MTk5ZWViYjA0YmZhODRhYzY= 12 True
NzQxNDA5MTRhNDUzMGI2M2Y1MDMyOWZlN2QwNDZiYzQ= 2685 True
ODdjM2UyMWY3NzFhZTU3MmVlMmU5MDNlOWEwNWE3YWY= 2586 True
ZDU2MjA3OGQ2ZDU3MjczMWQ4MTRmYWNhYjAzOGJkMTg= 2688 True
ZmM3ZWJjMGQ0ZDA1ODJlOWMyODhlOWE3MDI1MGJhMTc= 2775 True
ZGVkYTc4MzQzNjEyMzlmZWE5MmRiNjc1OWE5OTc0OTQ= 2676 True
ZmY2MjUzYTIwYWIyOGU1OTA2ZDY1OWYzNmY2NmU4ZTY= 2777 True
Mzk1YzQwM2U0ZWY1ZDRhOWFlMTNhYjQ3OGVhYmUzNjk= 2675 True
ZjAyZTliYWE3OTI1YWZmYjFmMWI0MjJhNzMxZTI4MDM= 2 True
De blob lezen
In deze sectie leest u de $blocklist variabele om de gegevens op te halen. In het volgende voorbeeld doorlopen we de bloklijst om de bytes van elk blok te lezen en op te slaan in een matrix. Gebruik de methode DownloadRangeToByteArray om de gegevens op te halen.
function Get-VNetFlowLogReadBlock {
[CmdletBinding()]
param (
[System.Array] [Parameter(Mandatory=$true)] $blockList,
[Microsoft.Azure.Storage.Blob.CloudBlockBlob] [Parameter(Mandatory=$true)] $CloudBlockBlob
)
$blocklistResult = $blockList.Result
# Set the size of the byte array to the largest block
$maxvalue = ($blocklistResult | Measure-Object Length -Maximum).Maximum
Write-Host "Max value is ${maxvalue}"
# Create an array to store values in
$valuearray = @()
# Define the starting index to track the current block being read
$index = 0
# Loop through each block in the block list
for($i=0; $i -lt $blocklistResult.count; $i++)
{
# Create a byte array object to story the bytes from the block
$downloadArray = New-Object -TypeName byte[] -ArgumentList $maxvalue
# Download the data into the ByteArray, starting with the current index, for the number of bytes in the current block. Index is increased by 3 when reading to remove preceding comma.
$CloudBlockBlob.DownloadRangeToByteArray($downloadArray,0,$index, $($blockListResult[$i].Length)) | Out-Null
# Increment the index by adding the current block length to the previous index
$index = $index + $blockListResult[$i].Length
# Retrieve the string from the byte array
$value = [System.Text.Encoding]::ASCII.GetString($downloadArray)
# Add the log entry to the value array
$valuearray += $value
}
#Return the Array
$valuearray
}
$valuearray = Get-VNetFlowLogReadBlock -blockList $blockList -CloudBlockBlob $CloudBlockBlob
De $valuearray matrix bevat nu de tekenreekswaarde van elk blok. Als u de vermelding wilt controleren, haalt u de op één na laatste waarde van de tabel op met behulp van $valuearray[$valuearray.Length-2]. U hebt de laatste waarde niet nodig omdat dit het sluitende haakje is.
De resultaten van deze waarde worden weergegeven in het volgende voorbeeld:
{
"time": "2023-07-09T03:59:30.2837112Z",
"flowLogVersion": 4,
"flowLogGUID": "abcdef01-2345-6789-0abc-def012345678",
"macAddress": "0022485D8CF8",
"category": "FlowLogFlowEvent",
"flowLogResourceID": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/NETWORKWATCHERRG/PROVIDERS/MICROSOFT.NETWORK/NETWORKWATCHERS/NETWORKWATCHER_EASTUS/FLOWLOGS/MYVNET-MYRESOURCEGROUP-FLOWLOG",
"targetResourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNet",
"operationName": "FlowLogFlowEvent",
"flowRecords": {
"flows": [
{
"aclID": "00000000-1234-abcd-ef00-c1c2c3c4c5c6",
"flowGroups": [
{
"rule": "BlockHighRiskTCPPortsFromInternet",
"flowTuples": [
"1688875131557,45.119.212.87,192.168.0.4,53018,3389,6,I,D,NX,0,0,0,0"
]
},
{
"rule": "Internet",
"flowTuples": [
"1688875103311,35.203.210.145,192.168.0.4,56688,52113,6,I,D,NX,0,0,0,0",
"1688875119073,162.216.150.87,192.168.0.4,50111,9920,6,I,D,NX,0,0,0,0",
"1688875119910,205.210.31.253,192.168.0.4,54699,1801,6,I,D,NX,0,0,0,0",
"1688875121510,35.203.210.49,192.168.0.4,49250,33013,6,I,D,NX,0,0,0,0",
"1688875121684,162.216.149.206,192.168.0.4,49776,1290,6,I,D,NX,0,0,0,0",
"1688875124012,91.148.190.134,192.168.0.4,57963,40544,6,I,D,NX,0,0,0,0",
"1688875138568,35.203.211.204,192.168.0.4,51309,46956,6,I,D,NX,0,0,0,0",
"1688875142490,205.210.31.18,192.168.0.4,54140,30303,6,I,D,NX,0,0,0,0",
"1688875147864,194.26.135.247,192.168.0.4,53583,20232,6,I,D,NX,0,0,0,0"
]
}
]
}
]
}
}