Ограничение исходящего доступа из кластера Azure Data Explorer
Ограничение исходящего доступа из кластера важно для снижения таких рисков, как, например, кража данных. Злоумышленник может создать внешнюю таблицу для учетной записи хранения и извлечь большие объемы данных. Вы можете управлять исходящим доступом на уровне кластера, определив политики внешних вызовов. Управление политиками внешних вызовов позволяет разрешить исходящий доступ к указанным SQL, хранилищу или другим конечным точкам.
В этой статье вы узнаете, как использовать расширения для политик внешних вызовов, позволяющих дополнительно ограничить вызовы из кластера.
Типы политик внешних вызовов
Политики внешних вызовов можно разделить следующим образом:
- Неизменяемые политики внешних вызовов: Это стандартные политики кластера. Они предварительно настроены и не могут быть изменены.
- Политики внешних вызовов кластера: Это политики, которые можно изменить с помощью команд политики внешних вызовов.
Предварительные требования
- Подписка Azure. Создайте бесплатную учетную запись Azure.
- Кластер и база данных Azure Data Explorer. Создайте кластер и базу данных.
Команды запуска политики внешних вызовов
Войдите в пользовательский веб-интерфейс Azure Data Explorer.
В меню слева выберите Запрос и подключитесь к кластеру.
В окне запроса выполните следующий запрос, чтобы проверить список неизменяемых политик внешних вызовов в кластере:
.show cluster policy callout
Ниже показан пример неизменяемых политик внешних вызовов. Обратите внимание, что в списке есть несколько правил по умолчанию, которые позволяют выполнять внешние вызовы к другим службам, таким как внешние данные.
[
{
"CalloutType":"kusto",
"CalloutUriRegex":"[a-z0-9]{3,22}\\.(\\w+\\.)?kusto(mfa)?\\.windows\\.net/?$",
"CanCall":true
},
{
"CalloutType":"kusto",
"CalloutUriRegex":"//[a-z0-9]{3,22}\\.[a-z0-9-]{1,50}\\.(kusto\\.azuresynapse|kustodev\\.azuresynapse-dogfood)\\.net/?$",
"CanCall":true
},
{
"CalloutType":"kusto",
"CalloutUriRegex":"^https://([A-Za-z0-9]+\\.)?(ade|adx)\\.(int\\.)?(applicationinsights|loganalytics|monitor)\\.(io|azure(\\.com|\\.us|\\.cn))/",
"CanCall":true
},
{
"CalloutType":"sql",
"CalloutUriRegex":"[a-z0-9][a-z0-9\\-]{0,61}[a-z0-9]?\\.database\\.windows\\.net/?$",
"CanCall":true
},
{
"CalloutType":"sql",
"CalloutUriRegex":"[a-z0-9-]{0,61}?(-ondemand)?\\.sql\\.azuresynapse(-dogfood)?\\.net/?$",
"CanCall":true
},
{
"CalloutType":"external_data",
"CalloutUriRegex":".*",
"CanCall":true
},
{
"CalloutType":"azure_digital_twins",
"CalloutUriRegex":"[A-Za-z0-9\\-]{3,63}\\.api\\.[A-Za-z0-9]+\\.digitaltwins\\.azure\\.net/?$",
"CanCall":true
}
]
Очистка списка неизменяемых политик внешних вызовов
Чтобы ограничить исходящий доступ из кластера, необходимо очистить список неизменяемых политик внешних вызовов. Для этого выполните следующую команду с помощью Azure CLI или любых других средств, вызвав API-интерфейсы Azure Data Explorer.
Активируйте развертывание ARM с помощью Azure CLI с обновленным шаблоном ARM:
Пример файла шаблона ARM с именем template.json и свойством restrictOutboundNetworkAccess, установленным на значение Включено:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", ... "resources": [ { "type": "Microsoft.Kusto/Clusters", "apiVersion": "2021-02-01", ... "properties": { ... "restrictOutboundNetworkAccess": "Enabled", ... } } ... ] }
Пример вызова с помощью Azure CLI, ссылающегося на шаблон выше.
# Replace the <...> placeholders with the correct values az deployment group create --name RestrictOutboundAccess --resource-group <resource group> --template-file ./template.json
При обновлении свойства кластера
restrictOutboundNetworkAccess
удаляются все неизменяемые политики в кластере. Это предотвращает инициирование внешних вызовов для других служб, как показано в следующем примере.Выполните следующую команду еще раз и убедитесь, что она возвращает пустой список:
.show cluster policy callout | where EntityType == "Cluster immutable policy"
Добавление полных доменных имен во внешние вызовы при ограниченных условиях
Если вы хотите разрешить исходящий доступ к определенному полному доменному имени, его можно добавить в список allowedFqdnList
вашего кластера. Это можно сделать, внося изменения в шаблон ARM кластера Data Explorer Azure.
Активируйте развертывание ARM с помощью Azure CLI с обновленным шаблоном ARM:
Пример файла шаблона ARM с именем template.json и свойством allowedFqdnList, установленным на ["some.sql.azuresynapse.net", "..."]:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", ... "resources": [ { "type": "Microsoft.Kusto/Clusters", "apiVersion": "2021-02-01", ... "properties": { ... "restrictOutboundNetworkAccess": "Enabled", "allowedFqdnList": ["some.sql.azuresynapse.net", "..."] ... } } ... ] }
Пример вызова с помощью Azure CLI, ссылающегося на шаблон выше.
# Replace the <...> placeholders with the correct values az deployment group create --name ConfigureAllowedFqdnList --resource-group <resource group> --template-file ./template.json
Добавив полное доменное имя в список разрешенных, вы сможете выполнять вызовы к указанному полному домену. Вы можете проверить результат развертывания, выполнив следующую команду:
.show cluster policy callout | project Policy=parse_json(Policy) | mv-expand Policy | where Policy.CalloutType == "sql"
Примечание
Существует набор политик по умолчанию для Azure Data Explorer для взаимодействия с внутренним уровнем хранения. Они не создают риска кражи данных.