使用 Azure IoT DPS IP 连接筛选器

安全性是任何 IoT 解决方案的重要方面。 作为安全配置的一部分,有时需要显式指定设备可从其连接的 IP 地址。 使用 Azure IoT 中心设备预配服务的 IP 筛选器 功能(DPS)可以配置用于拒绝或接受来自特定 IPv4 地址的流量的规则。

何时使用

某些情况下,阻止来自某些 IP 地址的连接到 DPS 终结点非常有用。以下是两个特定的用例:

  • DPS 应仅接收来自指定 IP 地址范围的流量,并拒绝其他所有内容。 例如,将 DPS 与 Azure Express Route 配合使用,在 DPS 实例与设备之间创建专用连接。

  • 需要拒绝来自 DPS 管理员标识为可疑 IP 地址的流量。

IP 筛选器规则限制

如果启用了 IP 筛选,请注意以下限制:

  • 可能无法使用 Azure 门户管理注册。 如果发生这种情况,可以将一台或多台计算机的 IP 地址添加到 ipFilterRules DPS 实例中,并从这些计算机使用 Azure CLI、PowerShell 或服务 API 来管理注册。

    如果想要使用 IP 筛选仅允许访问所选 IP 地址,则很可能发生这种情况。 在这种情况下,将规则配置为启用某些地址或地址范围,以及阻止所有其他地址的默认规则(0.0.0.0/0)。 此默认规则将阻止 Azure 门户执行管理 DPS 实例上的注册等作。 有关详细信息,请参阅本文后面的 IP 筛选器规则评估

筛选器规则的应用方式

IP 筛选器规则在 DPS 实例级别应用。 因此,IP 筛选器规则适用于使用任何受支持的协议从设备和后端应用建立的所有连接。

来自与 DPS 实例中拒绝 IP 规则匹配的 IP 地址的任何连接尝试都会收到未经授权的 401 状态代码和说明。 响应消息未提及 IP 规则。

重要

拒绝 IP 地址可以防止其他 Azure 服务与 DPS 实例交互。

默认设置

默认情况下,IP 筛选处于禁用状态, 公共网络访问 设置为 “所有网络”。 此默认设置意味着 DPS 接受来自任何 IP 地址的连接,或符合接受 0.0.0.0/0 IP 地址范围的规则。

IoT DPS 默认 IP 筛选器设置。

添加 IP 筛选器规则

若要添加 IP 筛选器规则,请执行以下操作:

  1. 转到 Azure 门户

  2. 在门户页面的左侧菜单中,选择“所有资源”。

  3. 选择你的设备预配服务。

  4. 在左侧的 “设置” 菜单中,选择“ 网络”。

  5. “公用网络访问”下,选择“所选 IP 范围

  6. 选择“ + 添加 IP 筛选器规则”。

    将 IP 筛选器规则添加到 IoT DPS。

  7. 填写以下字段:

    领域 DESCRIPTION
    名称 长度为 128 个字符的唯一不区分大小写的字母数字字符串。 仅接受 ASCII 7 位字母数字字符和 {'-', ':', '/', '\', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '''} 字符。
    地址范围 CIDR 表示法中的单个 IPv4 地址或 IP 地址块。 例如,在 CIDR 表示法中,192.168.100.0/22 表示从 192.168.100.0 到 192.168.103.255 的 1024 个 IPv4 地址。
    行动 选择 “允许 ”或 “阻止”。

    选择“添加 IP 筛选器规则”后。

  8. 选择“保存”。 应会看到一个警报,通知你更新正在进行。

    有关保存 IP 筛选器规则的通知。

    备注

    当达到最多 100 个 IP 筛选器规则时,将禁用“添加 IP 筛选器规则”。

编辑 IP 筛选器规则

编辑现有规则:

  1. 选择要更改的 IP 筛选器规则数据。

    编辑 IP 筛选器规则。

  2. 作出更改。

  3. 选择“保存”。

删除 IP 筛选器规则

删除 IP 筛选器规则:

  1. 选择要删除的 IP 规则行上的删除图标。

    删除 IoT DPS IP 筛选器规则。

  2. 选择“保存”

IP 筛选器规则评估

按顺序应用 IP 筛选器规则。 匹配 IP 地址的首条规则决定接受或拒绝的动作。

例如,如果要接受范围 192.168.100.0/22 中的地址并拒绝其他所有地址,网格中的第一个规则应接受地址范围 192.168.100.0/22。 下一个规则应使用范围 0.0.0.0/0 拒绝所有地址。

若要更改 IP 筛选器规则的顺序,请执行以下作:

  1. 选择要移动的规则。

  2. 将规则拖放到所需位置。

  3. 选择“保存”

使用 Azure 资源管理器模板更新 IP 筛选器规则

可通过两种方式更新 DPS IP 筛选器:

  1. 调用 IoT 中心资源 REST API 方法。 若要了解如何使用 REST 更新 IP 筛选器规则,请参阅 IpFilterRuleIoT 中心资源 - 更新方法“定义”部分

  2. 使用 Azure 资源管理器模板。 有关如何使用资源管理器模板的指导,请参阅 Azure 资源管理器模板。 以下示例演示如何使用 Azure 资源管理器模板创建、编辑和删除 DPS IP 筛选器规则。

    备注

    Azure CLI 和 Azure PowerShell 目前不支持 DPS IP 筛选器规则更新。

添加 IP 筛选器规则

以下模板示例创建一个名为“AllowAll”的新 IP 筛选器规则,该规则接受所有流量。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": {
        "iotDpsName": {
            "type": "string",
            "defaultValue": "[resourceGroup().name]",
            "minLength": 3,
            "metadata": {
                "description": "Specifies the name of the IoT DPS service."
            }
        }, 
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
                "description": "Location for Iot DPS resource."
            }
        }        
    }, 
    "variables": {
        "iotDpsApiVersion": "2020-01-01"
    }, 
    "resources": [
        {
            "type": "Microsoft.Devices/provisioningServices",
            "apiVersion": "[variables('iotDpsApiVersion')]",
            "name": "[parameters('iotDpsName')]",
            "location": "[parameters('location')]",
            "sku": {
                "name": "S1",
                "tier": "Standard",
                "capacity": 1
            },
            "properties": {
                "IpFilterRules": [
                    {
                        "FilterName": "AllowAll",
                        "Action": "Accept",
                        "ipMask": "0.0.0.0/0"
                    }
                ]
            }            
        }
    ]
}

根据要求更新模板的 IP 筛选器规则属性。

特征 DESCRIPTION
FilterName 提供 IP 筛选器规则的名称。 这必须是长度为 128 个字符的唯一不区分大小写的字母数字字符串。 仅接受 ASCII 7 位字母数字字符和 {'-', ':', '/', '\', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '''} 字符。
行动 接受的值是 “接受”“拒绝”,用于 IP 筛选器规则的动作。
ipMask 提供单个 IPv4 地址或者以 CIDR 表示法提供一个 IP 地址块。 例如,在 CIDR 表示法中,192.168.100.0/22 表示从 192.168.100.0 到 192.168.103.255 的 1024 个 IPv4 地址。

更新 IP 筛选器规则

以下模板示例更新前面显示的名为“AllowAll”的 IP 筛选器规则,以拒绝所有流量。

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",  
    "contentVersion": "1.0.0.0",  
    "parameters": { 
        "iotDpsName": { 
            "type": "string", 
            "defaultValue": "[resourceGroup().name]", 
            "minLength": 3, 
            "metadata": { 
                "description": "Specifies the name of the IoT DPS service." 
            } 
        },  
        "location": { 
            "type": "string", 
            "defaultValue": "[resourceGroup().location]", 
            "metadata": { 
                "description": "Location for Iot DPS resource." 
            } 
        }        
    },  
    "variables": { 
        "iotDpsApiVersion": "2020-01-01" 
    },  
    "resources": [ 
        { 
            "type": "Microsoft.Devices/provisioningServices", 
            "apiVersion": "[variables('iotDpsApiVersion')]", 
            "name": "[parameters('iotDpsName')]", 
            "location": "[parameters('location')]", 
            "sku": { 
                "name": "S1", 
                "tier": "Standard", 
                "capacity": 1 
            }, 
            "properties": { 
                "IpFilterRules": [ 
                    { 
                        "FilterName": "AllowAll", 
                        "Action": "Reject", 
                        "ipMask": "0.0.0.0/0" 
                    } 
                ] 
            }             
        } 
    ] 
}

删除 IP 筛选器规则

以下模板示例删除 DPS 实例的所有 IP 筛选器规则。

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",  
    "contentVersion": "1.0.0.0",  
    "parameters": { 
        "iotDpsName": { 
            "type": "string", 
            "defaultValue": "[resourceGroup().name]", 
            "minLength": 3, 
            "metadata": { 
                "description": "Specifies the name of the IoT DPS service." 
            } 
        },  
        "location": { 
            "type": "string", 
            "defaultValue": "[resourceGroup().location]", 
            "metadata": { 
                "description": "Location for Iot DPS resource." 
            } 
        }        
    },  
    "variables": { 
        "iotDpsApiVersion": "2020-01-01" 
    },  
    "resources": [ 
        { 
            "type": "Microsoft.Devices/provisioningServices", 
            "apiVersion": "[variables('iotDpsApiVersion')]", 
            "name": "[parameters('iotDpsName')]", 
            "location": "[parameters('location')]", 
            "sku": { 
                "name": "S1", 
                "tier": "Standard", 
                "capacity": 1 
            }, 
            "properties": { 
            }             
        } 
    ] 
}

后续步骤

若要进一步探索管理 DPS,请参阅: