Вопрос или проблема
Я создал сервер 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:
-
Azure PowerShell: Команда
Get-AzWebApp
позволит вам получить как текущие, так и потенциальные выходные IP-адреса через параметрыOutboundIpAddresses
иPossibleOutboundIpAddresses
. Это поможет автоматически обновлять правила брандмауэра черезNew-AzSqlServerFirewallRule
. Поскольку для каждого IP нужно задавать отдельное правило, вам нужно будет указать одинаковые значения стартового и конечного IP. -
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
}
}
]
Применение
-
Проверка IP-адресов через PowerShell: Запустите PowerShell и используйте команду
Get-AzWebApp
для получения списка выходных IP. Убедитесь, что вы авторизированы в правильном аккаунте Azure и правильном окружении. -
Создание правил брандмауэра: Используйте полученные IP-адреса для создания или обновления правил брандмауэра SQL Server через
New-AzSqlServerFirewallRule
. Это гарантирует, что только ваше приложение имеет доступ к серверу. -
Автоматизация с помощью Bicep: Если у вас есть сложные сценарии развертывания, например, неоднократные обновления инфраструктуры, автоматически создавайте и обновляйте настройки через файлы Bicep. Это поможет в упрощении процесса и избежании человеческих ошибок.
-
Поддержка и аудит: Регулярно проверяйте выходные IP-адреса, особенно если вы наблюдаете проблемы с доступом. Обновление или изменения в приложении могут приводить к изменению дополнительных IP.
Благодаря использованию этих инструментов вы обеспечите безопасность вашего приложения и базы данных, а также сможете надлежащим образом контролировать потенциальные изменения и риски. Также рекомендуется регулярно проверять документацию Azure, так как инструменты и их возможности могут обновляться.