Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Log alur kelompok keamanan jaringan (NSG) akan dihentikan pada 30 September 2027. Setelah 30 Juni 2025, Anda tidak akan lagi dapat membuat log alur NSG baru. Sebaiknya migrasikan ke log alur jaringan virtual, yang mengatasi batasan log alur NSG. Setelah tanggal penghentian, analitik lalu lintas yang diaktifkan untuk log alur NSG tidak akan lagi didukung, dan sumber daya log alur NSG yang ada di langganan Anda akan dihapus. Namun, rekaman log alur NSG yang ada tidak akan dihapus dari Azure Storage dan akan terus mengikuti kebijakan penyimpanan yang dikonfigurasi. Untuk informasi selengkapnya, lihat pengumuman resmi.
Dalam artikel ini, Anda mempelajari cara membaca sebagian log alur Azure Network Watcher secara selektif menggunakan PowerShell tanpa harus mengurai seluruh log. Log alur disimpan di akun penyimpanan dalam blob blok. Setiap log adalah blob blok terpisah yang dihasilkan setiap jam dan diperbarui dengan data terbaru setiap beberapa menit. Dengan menggunakan skrip yang disediakan dalam artikel ini, Anda dapat membaca data terbaru dari log alur tanpa harus mengunduh seluruh log.
Konsep yang dibahas dalam artikel ini tidak terbatas pada PowerShell dan berlaku untuk semua bahasa yang didukung oleh API Azure Storage.
Prasyarat
Sebuah akun Azure dengan langganan aktif. Buat akun secara gratis.
PowerShell terinstal pada komputer Anda. Untuk informasi selengkapnya, lihat Menginstal PowerShell di Windows, Linux, dan macOS. Artikel ini memerlukan modul Az PowerShell. Untuk informasi selengkapnya, lihat Cara menginstal Azure PowerShell. Untuk menemukan versi yang terinstal, jalankan
Get-Module -ListAvailable Az.Log aliran di satu atau lebih wilayah. Untuk informasi selengkapnya, lihat Membuat log alur grup keamanan jaringan atau Membuat log alur jaringan virtual.
Izin kontrol akses berbasis peran Azure (Azure RBAC) yang diperlukan untuk langganan log alur dan akun penyimpanan. Untuk informasi selengkapnya, lihat Izin RBAC Network Watcher.
Mengambil daftar pemblokiran
Di bagian ini, Anda menyiapkan variabel yang diperlukan untuk mengkueri blob log alur dan mencantumkan blok dalam blob blok CloudBlockBlob .
Perbarui skrip PowerShell dengan nilai yang valid untuk lingkungan Anda.
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
Variabel $blockList mengembalikan daftar blok dalam blob. Setiap blok blob berisi paling tidak dua blok. Blok pertama memiliki panjang 12 byte dan berisi tanda kurung buka log JSON. Blok lainnya adalah tanda kurung penutup dan memiliki panjang 2 byte. Contoh log berikut memiliki tujuh entri individual di dalamnya. Semua entri baru dalam log ditambahkan ke akhir tepat sebelum blok akhir.
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
Membaca blok blob
Di bagian ini, Anda membaca $blocklist variabel untuk mengambil data. Dalam contoh berikut, kami melakukan iterasi melalui daftar blok untuk membaca byte dari setiap blok dan menyimpan dalam sebuah array. Gunakan metode DownloadRangeToByteArray untuk mengambil data.
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
Sekarang, array $valuearray berisi nilai string dari setiap blok. Untuk memverifikasi entri, dapatkan nilai kedua hingga terakhir dari array dengan menjalankan $valuearray[$valuearray.Length-2]. Anda tidak memerlukan nilai terakhir karena ini adalah tanda kurung penutup.
Hasil nilai ini diperlihatkan dalam contoh berikut:
{
"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"
]
}
]
}
]
}
}