На Azure, как я могу найти IP-адрес службы приложений, чтобы создать правило брандмауэра для него на Azure SQL?

Вопрос или проблема

Я создал сервер Azure SQL, установив параметр «Разрешить службам и ресурсам Azure доступ к этому серверу» на нет. У меня есть приложение ASP.Net, работающее как App Service, и я хочу разрешить ему доступ к базе данных на SQL сервере.

Судя по информации здесь, IP-адрес App Service является статическим (если только приложение не удалено и не создано заново), поэтому это кажется разумным решением на уровне безопасности, требуемом для моих данных.

Как мне узнать IP-адрес, с которого App Service будет обращаться к SQL серверу, чтобы я мог создать правило брандмауэра?

Обновление: Я думал, что решил эту проблему: в разделе Сеть после прокрутки вниз, в поле Исходящий трафик отображается список IP-адресов. Создание правила брандмауэра с одним из них действительно позволяет App Service подключиться к базе данных на сервере. Но это кажется временным, так как на следующий день база данных недоступна.

Так что я все еще ищу ответ.

Спасибо!

Вы не указали, каким образом/в каком контексте вы хотите это сделать или какую-то автоматизацию, кроме упоминания использования интерфейса Portal GUI.

Используя команду модуля Az PowerShell Get-AzWebApp, вы получаете два разных свойства, которые выглядят релевантными, OutboundIpAddresses и PossibleOutboundIpAddresses. Я предполагаю, что вам нужно последнее (в Portal, я полагаю, оно называется Additional Outbound IP addresses); затем вы можете передать их в New-AzSqlServerFirewallRule. (Правила брандмауэра SqlServer определяются в другом формате «диапазона», к сожалению, поэтому вам, вероятно, придется просто создать одну запись с тем же IP для начала и конца для каждого адреса.)

Если вы используете Bicep, что сработало для меня, так это создание модуля (файла) рядом с вашим основным файлом .Bicep, что-то вроде SQLFirewallAddressArray.bicep

param sqlServerName string
param outboundIPs array
param envname string


resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' existing = {
  name: sqlServerName
}


resource SqlServerAppFirewall 'Microsoft.Sql/servers/firewallRules@2024-05-01-preview' = [
  for address in outboundIPs: {
    parent: sqlServer
    name: '${envname}_${address}'
    properties: {
      startIpAddress: address
      endIpAddress: address
    }
  }
]

Затем вызовите его из вашего исходного .bicep, что-то вроде (где appService — это имя вашего ресурса)

var outboundIps = split(appService.properties.possibleOutboundIpAddresses, ',')
var appserviceName = appService.name
module SQLFirewall_AppServiceAddresses 'SQLFirewallAddressArray.bicep' = {
  name: 'SQLFirewall_AppServiceRules'
  params: {
    sqlServerName: sqlServerName
    envname: appserviceName
    outboundIPs: outboundIps
  }
}

Ответ или решение

Для решения текущей задачи предоставим подробный ответ, как можно определить IP-адрес приложения на платформе Azure App Service для создания правила брандмауэра на сервере Azure SQL. Ваша цель заключается в том, чтобы ограничить доступ к базе данных только для вашего приложения, отключив настройку «Разрешить службам и ресурсам Azure обращаться к этому серверу». Изложим данную задачу с использованием подхода TEA (Теория, Пример, Применение).

Теория

Azure предоставляет возможности для определения IP-адресов, которые используются вашими приложениями при выходе в интернет или обращении к внешним сервисам, таким как Azure SQL Database. Это необходимо для настройки правил брандмауэра, чтобы обеспечить безопасное и контролируемое подключение к данным. Поскольку настройка безопасности баз данных является критически важным аспектом, знание и управление выходными IP-адресами ваших приложений играют ключевую роль.

В Azure App Service у вас есть два важных набора выхода: Основные выходные IP-адреса и Дополнительные выходные IP-адреса. Основные IP-адреса обычно остаются постоянными и не меняются при обновлениях или изменений в вашем приложении (при условии отсутствия удаления и повторного создания ресурса). Дополнительные IP-адреса могут изменяться, если ваша аппликация использует назначения из пула ресурсов.

Пример

Ваш текущий подход к определению IP-адресов через вкладку Networking в портале Azure может действительно дать первоначальные данные. Как указано ранее, это дает вам список адресов в разделе "Outbound traffic". Однако важно заметить, что эти данные не всегда стабильны, особенно если вы используете дополнительные выходные IP-адреса, которые могут меняться.

Для более точного определения IP-адресов и их управления можно использовать инструмент Azure PowerShell или ресурсы Bicep:

  1. Azure PowerShell: Команда Get-AzWebApp позволит вам получить как текущие, так и потенциальные выходные IP-адреса через параметры OutboundIpAddresses и PossibleOutboundIpAddresses. Это поможет автоматически обновлять правила брандмауэра через New-AzSqlServerFirewallRule. Поскольку для каждого IP нужно задавать отдельное правило, вам нужно будет указать одинаковые значения стартового и конечного IP.

  2. Bicep: Используйте Bicep для автоматизации создания правил брандмауэра. Этот инструмент позволяет описывать настройки инфраструктуры Azure декларативным языком. Здесь вам пригодится подход модульного разбиения, некоторые примеры которого приведены выше.

Например:

param sqlServerName string
param outboundIPs array
param envname string

resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' existing = {
  name: sqlServerName
}

resource SqlServerAppFirewall 'Microsoft.Sql/servers/firewallRules@2024-05-01-preview' = [
  for address in outboundIPs: {
    parent: sqlServer
    name: '${envname}_${address}'
    properties: {
      startIpAddress: address
      endIpAddress: address
    }
  }
]

Применение

  1. Проверка IP-адресов через PowerShell: Запустите PowerShell и используйте команду Get-AzWebApp для получения списка выходных IP. Убедитесь, что вы авторизированы в правильном аккаунте Azure и правильном окружении.

  2. Создание правил брандмауэра: Используйте полученные IP-адреса для создания или обновления правил брандмауэра SQL Server через New-AzSqlServerFirewallRule. Это гарантирует, что только ваше приложение имеет доступ к серверу.

  3. Автоматизация с помощью Bicep: Если у вас есть сложные сценарии развертывания, например, неоднократные обновления инфраструктуры, автоматически создавайте и обновляйте настройки через файлы Bicep. Это поможет в упрощении процесса и избежании человеческих ошибок.

  4. Поддержка и аудит: Регулярно проверяйте выходные IP-адреса, особенно если вы наблюдаете проблемы с доступом. Обновление или изменения в приложении могут приводить к изменению дополнительных IP.

Благодаря использованию этих инструментов вы обеспечите безопасность вашего приложения и базы данных, а также сможете надлежащим образом контролировать потенциальные изменения и риски. Также рекомендуется регулярно проверять документацию Azure, так как инструменты и их возможности могут обновляться.

Оцените материал
Добавить комментарий

Капча загружается...