使用 Azure IoT DPS IP 连接筛选器

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

何时使用

在两个具体用例中,可以阻止从特定 IP 地址到 DPS 终结点的连接:

  • DPS 只能从指定范围的 IP 地址接收流量并拒绝任何其他流量。 例如,将 DPS 与 Azure Express Route 配合使用,以在 DPS 实例与设备之间创建专用连接。

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

IP 筛选器规则限制

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

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

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

筛选器规则的应用方式

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

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

重要

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

默认设置

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

IoT DPS default IP filter settings.

添加 IP 筛选器规则

添加 IP 筛选器规则:

  1. 转到 Azure 门户

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

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

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

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

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

    Add an IP filter rule to an IoT DPS.

  7. 填写以下字段:

    字段 说明
    名称 是不区分大小写的唯一字母数字字符串,长度不超过 128 个字符。 只接受 ASCII 7 位字母数字字符以及以下字符:{'-', ':', '/', '\', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '''}
    地址范围 单个 IPv4 地址或者以 CIDR 表示法表示的一个 IP 地址块。 例如,在 CIDR 表示法中,192.168.100.0/22 表示从 192.168.100.0 到 192.168.103.255 的 1024 个 IPv4 地址。
    操作 选择“允许”或“阻止” 。

    After selecting Add an IP Filter rule.

  8. 选择“保存”。 随后应会看到一条警报,告知更新正在进行。

    Notification about saving an IP filter rule.

    注意

    当存在的 IP 筛选规则达到最大数目 100 时,“+ 添加 IP 筛选规则”选项被禁用。

编辑 IP 筛选器规则

编辑现有规则:

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

    Edit an IP filter rule.

  2. 作出更改。

  3. 选择“保存”。

删除 IP 筛选器规则

删除 IP 筛选器规则:

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

    Delete an IoT DPS IP filter rule.

  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 筛选器规则,请参阅 IoT 中心资源 - 更新方法“定义”部分中的 IpFilterRule

  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 筛选器规则属性。

属性 说明
FilterName 提供 IP 筛选器规则的名称。 此项必须是不区分大小写的唯一字母数字字符串,长度不超过 128 个字符。 只接受 ASCII 7 位字母数字字符以及以下字符:{'-', ':', '/', '\', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '''}
操作 接受的值为“Accept”或“Reject”(充当 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,请参阅: