在网络观察程序中删除网络安全组流日志存储 blob
重要
2027 年 9 月 30 日,网络安全组 (NSG) 流日志将停用。 在此停用过程中,从 2025 年 6 月 30 日起,你将无法再创建新的 NSG 流日志。 建议迁移到虚拟网络流日志,从而克服 NSG 流日志的限制。 自停用日期之后,将不再支持使用 NSG 流日志启用的流量分析,并且订阅中的现有 NSG 流日志资源将被删除。 但是,不会删除 NSG 流日志记录,并将继续遵循其各自的保留策略。 有关详细信息,请查看官方公告。
如果需要从存储帐户中手动删除流日志,可以使用下面的 PowerShell 脚本。 此脚本仅删除比用户指定的现有保留策略旧的存储 blob。
将以下脚本复制并保存到某个位置,例如当前工作目录。
# This powershell script deletes all NSG flow log blobs that should not be retained anymore as per configured retention policy.
# While configuring NSG flow logs on Azure portal, the user configures the retention period of NSG flow log blobs in
# their storage account (in days).
# This script reads all blobs and deletes blobs that are not to be retained (outside retention window)
# if the retention days are zero; all blobs are retained forever and hence no blobs are deleted.
#
#
param (
[string] [Parameter(Mandatory=$true)] $SubscriptionId,
[string] [Parameter(Mandatory=$true)] $Location,
[switch] [Parameter(Mandatory=$false)] $Confirm
)
Connect-AzAccount -Environment AzureChinaCloud
$SubId = Get-AzSubscription| Where-Object {$_.Id.contains($SubscriptionId.ToLower())}
if ($SubId.Count -eq 0)
{
Write-Error 'The SubscriptionId does not exist' -ErrorAction Stop
}
Set-AzContext -SubscriptionId $SubscriptionId
$NsgList = Get-AzNetworkSecurityGroup | Where-Object {$_.Location -eq $Location}
$NW = Get-AzNetworkWatcher | Where-Object {$_.Location -eq $Location}
$FlowLogsList = @()
foreach ($Nsg in $NsgList)
{
# Query Flow Log Status which are enabled
$NsgFlowLog = Get-AzNetworkWatcherFlowLogStatus -NetworkWatcher $NW -TargetResourceId $Nsg.Id | Where-Object {$_.Enabled -eq "True"}
if ($NsgFlowLog.Count -gt 0)
{
$FlowLogsList += $NsgFlowLog
Write-Output ('Enabled NSG found: ' + $NsgFlowLog.TargetResourceId)
}
}
foreach ($Psflowlog in $FlowLogsList)
{
$RetentionDays = $Psflowlog.RetentionPolicy.Days
if ($RetentionDays -le 0)
{
continue
}
$Strings = $Psflowlog.StorageId -split '/'
$RGName = $Strings[4]
$StorageAccountName = $Strings[-1]
$Key = (Get-AzStorageAccountKey -ResourceGroupName $RGName -Name $StorageAccountName).Value[1]
$StorageAccount = New-AzStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $Key
$ContainerName = 'insights-logs-networksecuritygroupflowevent'
$BLobsList = Get-AzStorageBlob -Container $ContainerName -Context $StorageAccount.Context
$TargetBLobsList = $BLobsList | Where-Object {$_.Name.contains($Psflowlog.TargetResourceId.ToUpper())}
$RetentionDate = Get-Date
$RetentionDate = $RetentionDate.AddDays(-1*$RetentionDays)
$RetentionDateInUTC = $RetentionDate.ToUniversalTime()
foreach ($Blob in $TargetBLobsList)
{
$BlobLastModifietedDTinUTC = [datetime]$Blob.LastModified.UtcDateTime
if ($BlobLastModifietedDTinUTC -ge $RetentionDateInUTC)
{
Write-Output ($Blob.Name + '===>' + $BlobLastModifietedDTinUTC + ' ===> RETAINED')
continue
}
if ($Confirm)
{
Write-Output (Blob to be deleted: $Blob.Name)
$Confirmation = Read-Host "Are you sure you want to remove this blob (Y/N)?"
}
if ((-not $Confirm) -or ($Confirmation -eq 'Y'))
{
Write-Output ($Blob.Name + '===>' + $BlobLastModifietedDTinUTC + ' ===> DELETED')
Remove-AzStorageBlob -Container $ContainerName -Context $StorageAccount.Context -Blob $Blob.Name
}
else
{
Write-Output ($Blob.Name + '===>' + $BlobLastModifietedDTinUTC + ' ===> RETAINED')
}
}
}
Write-Output ('Retention policy for all NSGs evaluated and completed successfully')
根据需要在脚本中输入以下参数:
SubscriptionId [必需]:要从中删除 NSG 流日志 blob 的订阅 ID。
Location [必需]:要为其删除 NSG 流日志 blob 的 NSG 的区域位置字符串。 可以在 Azure 门户上或 GitHub 上查看此信息。
备注
必须修改从 GitHub 存储库“azure-quickstart-templates”下载或引用的模板或脚本,以契合 Azure 中国云环境。 例如,替换某些终结点(将“blob.core.windows.net”替换为“blob.core.chinacloudapi.cn”,将“cloudapp.azure.com”替换为“cloudapp.chinacloudapi.cn”);必要时更改某些不受支持的位置、VM 映像、VM 大小、SKU 以及资源提供程序的 API 版本。
在本文中,需要在由世纪互联环境运营的 Azure 中国
regions.go
regionMap 对象中插入以下列表。"chinaeast": "China East",
"chinaeast2": "China East 2",
"chinanorth": "China North",
"chinanorth2": "China North 2",
"chinanorth3": "China North 3",
Confirm [可选]:如果要手动确认每个存储 blob 的删除,请传递 confirm 标志。
运行保存的脚本,如以下示例中所示,其中脚本文件保存为 Delete-NsgFlowLogsBlobs.ps1:
.\Delete-NsgFlowLogsBlobs.ps1 -SubscriptionId <subscriptionId> -Location <location> -Confirm
- 客户可以使用 Azure 逻辑应用或 Azure 自动化自动运行脚本
- 如需详细了解 NSG 日志记录,请参阅网络安全组 (NSG) 的 Azure Monitor 日志。