限制来自 Azure 数据资源管理器群集的出站访问
限制群集的出站访问对于降低数据外泄等风险非常重要。 恶意参与者可能会为存储帐户创建外部表并提取大量数据。 可以通过定义标注策略来控制群集级别的出站访问。 通过管理标注策略,可允许对指定 SQL、存储或其他端点的出站访问。
本文将介绍标注策略的扩展,使你能够进一步限制来自群集的标注。
标注策略的类型
标注策略可分为以下几种:
- 不可变标注策略:这些是群集的标准策略。 它们是预配置的,无法修改。
- 群集标注策略:这些策略可以使用标注策略命令进行修改。
先决条件
运行标注策略命令
登录到 Azure 数据资源管理器 Web UI。
在左侧菜单中,选择“查询”,然后连接到群集。
在查询窗口中,运行以下查询以检查群集上的不可变标注策略列表:
.show cluster policy callout
下面显示了不可变标注策略的一个示例。 请注意,列表中有几个默认规则允许调用其他服务,例如外部数据。
[
{
"CalloutType":"kusto",
"CalloutUriRegex":"[a-z0-9]{3,22}\\.(\\w+\\.)?kusto(mfa)?\\.chinacloudapi\\.cn/?$",
"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\\.chinacloudapi\\.cn/?$",
"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 数据资源管理器 API 使用 Azure CLI 或任何其他工具运行以下命令来执行此操作。
使用带有更新的 ARM 模板的 Azure CLI 触发 ARM 部署:
名为“template.json”的示例 ARM 模板文件,其属性 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"
在受限条件下将 FQDN 添加到标注
如果要允许对特定 FQDN 的出站访问,可以将其添加到群集的 allowedFqdnList
列表中。 可以通过对 Azure 数据资源管理器群集的 ARM 模板进行更改来执行此操作。
使用带有更新的 ARM 模板的 Azure CLI 触发 ARM 部署:
名为“template.json”的示例 ARM 模板文件,其属性 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
通过将 FQDN 添加到允许列表中,将能够对指定的 FQDN 添加标注。 可以通过执行以下命令来检查部署结果:
.show cluster policy callout | project Policy=parse_json(Policy) | mv-expand Policy | where Policy.CalloutType == "sql"
注意
为 Azure 数据资源管理器设置了一组默认策略,以与其内部存储层进行通信。 它们不带有数据外泄的风险。