Управление брандмауэром Azure и виртуальными сетями с помощью PowerShell

Используя портал Azure, мы можем легко управлять и настройками в любой учетной записи хранения Azure, и у нас есть краткий обзор шагов, необходимых для настройки, в следующем разделе этой статьи. Однако мы сосредоточимся на создании Runbook с помощью службы автоматизации Azure для настройки всех учетных записей хранения в любой данной подписке. Все учетные записи хранения будут настроены на использование всех существующих виртуальных сетей в целях их безопасности, а также статических общедоступных IP-адресов.
Идея автоматизации состоит в том, чтобы показать, как вы можете обеспечить соблюдение требований, используя свои бизнес-требования в этой области.
Проверка функции брандмауэра и виртуальной сети с помощью портала Azure
Войдите на портал Azure, выберите нужную учетную запись хранения, щелкните Брандмауэры и виртуальные сети. В новой колонке, которая открывается справа, мы можем включить ее, выбрав «Выбранные сети», а затем добавить новые или существующие виртуальные сети в учетную запись хранения. В разделе добавьте IP-адреса (все они должны быть общедоступными), которые могут получить доступ к этой учетной записи хранения.
Хотя это не является обязательным требованием, поскольку мы можем включить его автоматически со стороны учетной записи хранения, мы всегда можем настроить нужную виртуальную сеть для поддержки конечных точек службы, добавив ее и выбрав подсети, которые будут поддерживаться.
При добавлении новой виртуальной сети в любой данной учетной записи хранения мы можем увидеть, будут ли настроены . Когда отображается , процесс добавления этой конкретной подсети также установит ее на стороне виртуальной сети.
Использование скрипта
Первым шагом является создание простого файла JSON, содержащего две части информации: и . Мы собираемся сохранить этот файл JSON в учетной записи хранения, которую будем использовать в качестве репозитория нашей автоматизации Azure.
В Azure Runbook мы создадим токен SAS для доступа к учетной записи хранения на один час. Затем мы собираемся загрузить файл PublicIPs.json на компьютер, на котором выполняется Runbook службы автоматизации Azure.
В начале сценария мы загрузим все необходимые общедоступные IP-адреса и определим конечную точку, определив эти две первые строки кода. После этого мы сохраняем всю виртуальную сеть в одном и том же геополитическом регионе (в нашем случае Канада состоит из Центральной и Восточной Канады) в переменной $VNETs.
$JSONPublicIPs = Get-Content -Raw -Path ((Get-Location).Path + «PublicIPs.json») | ConvertFrom-Json
$vEndPoint = "Microsoft.Хранилище"
$VNETs = Get-AzVirtualNetwork | где { ($_.Location -eq "canadacentral") -или ($_.location -eq "canadaeast")}
Следующий фрагмент кода — прохождение по виртуальным сетям, поиск их и их настройка для поддержки конечных точек службы хранилища Azure.
ForEach ($SingleVNET в $VNET){
$Subnets = Get-AzVirtualNetwork -Name $SingleVNET.Name | Get-азвиртуалнетворксубнетконфиг
ForEach ($SingleSubnet в $Subnets){
$tmp = Set-AzVirtualNetworkSubnetConfig -Name $SingleSubnet.Name -VirtualNetwork $SingleVNET -AddressPrefix $SingleSubnet.AddressPrefix -ServiceEndpoint $vEndPoint
}
Msgbox «Обновление виртуальной сети:» $SingleVNET.Name 0
$tmp = $SingleVNET | Set — азвиртуалнетворк
}
Теперь, когда все виртуальные сети поддерживают конечные точки учетных записей хранения, на первом этапе мы будем хранить все учетные записи хранения в переменной с именем $StorageAccounts. Мы собираемся искать все учетные записи хранения в нашем геополитическом регионе, учетную запись хранения, поддерживающую автоматизацию Azure, и любую учетную запись хранения, используемую системой (если учетная запись хранения содержит тег ms-resource-usage, мы пропустим его)..
$StorageAccounts = Get-AzStorageAccount | Where-Object { (($_.Tags.Keys -notcontains «ms-resource-usage») -and (($_.Location -eq «canadacentral») -or ($_.Location -eq «canadaeast»)) ) -and ($_.StorageAccountName -ne 'devopsstgaccount') }
Сценарий состоит из двух . В первом мы собираемся включить брандмауэр и настроить все IP-адреса, которые мы собираем из файла JSON. Код также проверяет наличие недопустимых записей в файлах JSON и очищает неиспользуемые записи.
ForEach ($SingleStorageAccount в $StorageAccounts){
Msgbox «Обновление учетной записи хранения:» $SingleStorageAccount.StorageAccountName 0
$tmp = Update-AzStorageAccountNetworkRuleSet -ResourceGroupName $SingleStorageAccount.ResourceGroupName -Name $SingleStorageAccount.StorageAccountName -DefaultAction Deny
If ($tmp) {Msgbox «Учетная запись хранения (действие по умолчанию):» «Настроено на запрет (требуется при использовании виртуальной сети» 0}
$tmp = Update-AzStorageAccountNetworkRuleSet -ResourceGroupName $SingleStorageAccount.ResourceGroupName -Name $SingleStorageAccount.StorageAccountName -IPRule $JSONPublicIPs -ErrorVariable tmpErrorVar -ErrorAction SilentlyContinue
Если ($tmp) {
Msgbox «Учетная запись хранения (Действие с общедоступными IP-адресами):» «Все IP-адреса из PublicIPs.json были опубликованы» 0
} Еще {
Если ($tmpErrorVar) {
If ($tmpErrorVar[0].Exception.Message.Contains(“networkAcls.virtualNetworkRules[*].id(unique)”)) {
Msgbox «Учетная запись хранения (Действие с общедоступными IP-адресами):» «В списке есть повторяющиеся записи. Проверьте файл JSON» 2
}
Если ($tmpErrorVar[0].Exception.Message.Contains(“networkAcls.ipRule[*].value”)) {
Msgbox «Учетная запись хранения (Действие с общедоступными IP-адресами):» «В файле JSON указаны неправильные IP-адреса/подсети». 2
}
}
}
Второй этап скрипта заключается в циклическом просмотре всех учетных записей хранения, и для каждой учетной записи хранения все виртуальные сети/подсети будут проверены на соответствие учетной записи хранения, и если их еще нет, они будут добавлены.
ForEach ($SingleStorageAccount в $StorageAccounts){
Msgbox «Обновления виртуальной сети для следующей учетной записи хранения: » $SingleStorageAccount.StorageAccountName 0
$tmpSTGRules = $нуль
$tmpStgRules = Get-AzStorageAccountNetworkRuleSet -ResourceGroupName $SingleStorageAccount.ResourceGroupName -Name $SingleStorageAccount.StorageAccountName
ForEach ($SingleVNET в $VNET){
$Subnets = Get-AzVirtualNetwork -Name $SingleVNET.Name | Get-азвиртуалнетворксубнетконфиг
ForEach ($SingleSubnet в $Subnets){
Если ($tmpSTGRules.VirtualNetworkRules.Count -ne 0) {
If ($tmpStgRules.virtualNetworkRules.VirtualNetworkResourceId.Contains($SingleSubnet.Id) -eq $False) {
$tmpOperation = Add-AzStorageAccountNetworkRule -ResourceGroupName $SingleStorageAccount.ResourceGroupName -Name $SingleStorageAccount.StorageAccountName -VirtualNetworkResourceId $SingleSubnet.Id -ErrorVariable tmpErrorVar -ErrorAction SilentlyContinue
}
} Еще{
$tmpOperation = Add-AzStorageAccountNetworkRule -ResourceGroupName $SingleStorageAccount.ResourceGroupName -Name $SingleStorageAccount.StorageAccountName -VirtualNetworkResourceId $SingleSubnet.Id -ErrorVariable tmpErrorVar -ErrorAction SilentlyContinue
}
}
}
Управление брандмауэрами Azure и виртуальными сетями: настройка и теги
В этой статье мы рассмотрели процесс управления брандмауэрами и виртуальными сетями Azure в учетной записи хранения, а также способы использования службы автоматизации Azure для обеспечения безопасности всей подписки. В зависимости от вашей среды вы можете настроить безопасность виртуальных сетей или учетных записей хранения, которые будут настроены сценарием. Мы можем сделать это эффективно, управляя запросом в учетной записи хранения и переменными виртуальной сети. Имейте в виду, что теги — ваши друзья при автоматизации. Вы даже можете создать логику для чтения тега учетной записи хранения, чтобы определить, какая виртуальная сеть может быть связана.
Вы можете проверить весь файл сценария здесь.