你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 数字孪生安全性
本文介绍 Azure 数字孪生安全最佳做法。 其内容涵盖角色和权限、托管标识、使用 Azure 专用链接进行专用网络访问、服务标记、静态数据加密和跨源资源共享 (CORS)。
为确保安全,Azure 数字孪生支持对部署中的特定数据、资源和操作进行精确的访问控制。 它通过称为 Azure 基于角色的访问控制 (Azure RBAC) 的粒度角色和权限管理策略来实现此功能。
Azure 数字孪生还支持静态数据加密。
Azure RBAC 中的角色和权限
Azure RBAC 通过与 Microsoft Entra ID 集成提供给 Azure 数字孪生。
可使用 Azure RBAC 授予对安全主体的权限,该主体可以是用户、组或应用程序服务主体。 安全主体通过 Microsoft Entra ID 进行身份验证,并返回 OAuth 2.0 令牌。 此令牌可用于对 Azure 数字孪生实例的访问请求进行授权。
身份验证和授权
使用 Microsoft Entra ID 时,访问过程分为两步。 当某个安全主体(用户、组或应用程序)尝试访问 Azure 数字孪生时,请求必须经过身份验证并获得授权。
- 首先,验证安全主体的身份并返回 OAuth 2.0 令牌。
- 接下来,将该令牌作为请求的一部分传递给 Azure 数字孪生服务,用于授权访问指定的资源。
身份验证步骤要求应用程序请求在运行时包含 OAuth 2.0 访问令牌。 如果应用程序在 Azure 实体(例如 Azure Functions 应用)中运行,则它可以使用托管标识来访问资源。 阅读下一部分中有关托管标识的详细信息。
授权步骤要求将一个 Azure 角色分配给安全主体。 分配给安全主体的角色确定了该主体拥有的权限。 Azure 数字孪生提供 Azure 角色,其中包含对 Azure 数字孪生资源的权限集。 这些角色在本文后面介绍。
若要了解有关 Azure 中支持的角色和角色分配的详细信息,请参阅 Azure RBAC 文档中的了解不同角色 。
使用托管标识进行身份验证
Azure 资源的托管标识是一项跨 Azure 功能,可便于用户创建与其中运行应用程序代码的部署关联的安全标识。 然后可以将该标识与访问控制角色进行关联来授予自定义权限,以便访问应用程序所需的特定 Azure 资源。
借助托管标识,Azure 平台可管理此运行时标识。 对于标识本身或需要访问的资源,都不需要在应用程序代码或配置中存储和保护访问密钥。 在 Azure 应用服务应用程序内运行的 Azure 数字孪生客户端应用不需要处理 SAS 规则和密钥,也不需要处理任何其他访问令牌。 客户端应用只需要 Azure 数字孪生命名空间的终结点地址。 当应用连接时,Azure 数字孪生会将托管实体的上下文绑定到客户端。 与托管标识关联后,Azure 数字孪生客户端可以执行所有授权操作。 然后,通过将托管实体与 Azure 数字孪生 Azure 角色关联进行授权(如下所述)。
授权:Azure 数字孪生的 Azure 角色
Azure 提供了两个 Azure 内置角色,用于授权对 Azure 数字孪生数据平面 API 的访问。 可以按名称或 ID 引用角色:
内置角色 | 说明 | ID |
---|---|---|
Azure 数字孪生数据所有者 | 提供对 Azure 数字孪生资源的完全访问权限 | bcd981a7-7f74-457b-83e1-cceb9e632ffe |
Azure 数字孪生数据读者 | 提供对 Azure 数字孪生资源的只读访问权限 | d57506d4-4c8d-48b1-8587-93c323f6a5a3 |
可以采用两种方式分配角色:
- 在 Azure 门户中通过 Azure 数字孪生的访问控制 (IAM) 窗格(请参阅使用 Azure 门户分配 Azure 角色)
- 通过 CLI 命令添加或删除角色
有关将角色分配到 Azure 数字孪生实例的详细步骤,请参阅设置实例和身份验证。 有关如何定义内置角色的详细信息,请参阅 Azure RBAC 文档中的了解角色定义。
还可以为实例创建自定义 Azure 角色。 这样,就可以授予单个数据区域中特定操作的权限,包括孪生体、命令、关系、事件路由、作业、模型和查询。 有关 Azure 中的自定义角色的详细信息,请参阅 Azure 自定义角色。
自动化角色
在自动化方案中引用角色时,建议按 ID 而非名称来引用它们。 这些名称在不同的版本中可能不同,但 ID 不会,因此在自动化中可以更稳定地引用 ID。
提示
如果使用 cmdlet(如 New-AzRoleAssignment
(reference))分配角色,则可以使用 -RoleDefinitionId
参数传递 ID,而非 -RoleDefinitionName
传递角色名。
权限范围
向安全主体分配 Azure 角色之前,请确定安全主体应具有的访问权限的范围。 最佳做法规定,最好只授予最小的可能范围。
以下列表描述可以限定 Azure 数字孪生资源访问权限范围的等级。
- 模型:对此资源的操作决定了对上传于 Azure 数字孪生的模型的控制。
- 查询数字孪生图:对此资源的操作决定了在 Azure 数字孪生图内对数字孪生体运行查询操作的功能。
- 数字孪生体:对此资源的操作控制了在孪生图中对数字孪生体可执行的 CRUD 操作。
- 数字孪生体关系:对此资源的操作控制了在孪生图中对数字孪生体间关系可执行的 CRUD 操作。
- 事件路由:对此资源的操作确定了从 Azure 数字孪生到终结点服务(如事件中心、事件网格或服务总线)执行路由事件的权限。
权限疑难解答
如果用户尝试执行其角色不允许的操作,则可能会收到服务请求错误,显示为 403 (Forbidden)
。 有关详细信息和故障排除步骤,请参阅排查 Azure 数字孪生服务请求失败的问题:“403 (禁止访问)”错误。
用于访问其他资源的托管标识
为 Azure 数字孪生实例设置 Microsoft Entra ID 托管标识可让实例轻松访问其他受 Microsoft Entra 保护的资源,如 Azure Key Vault。 标识由 Azure 平台托管,无需预配或轮换任何机密。 有关 Microsoft Entra ID 中的托管标识的详细信息,请参阅 Azure 资源的托管标识。
Azure 数字孪生支持两种类型的托管标识:系统分配和用户分配。
可以使用其中任一托管标识类型向自定义终结点进行身份验证。 针对事件中心和服务总线目标的终结点和死信事件的 Azure 存储容器终结点,Azure 数字孪生支持基于标识的身份验证。 托管标识目前不支持用于事件网格终结点。
有关如何为可用于路由事件的 Azure 数字孪生终结点启用托管标识的说明,请参阅终结点选项:基于标识的身份验证。
使用受信任的 Microsoft 服务将事件路由到事件中心和服务总线终结点
Azure 数字孪生可以使用这些资源的公共终结点连接到事件中心和服务总线终结点,以发送事件数据。 但是,如果这些资源绑定到 VNet,则默认情况下会阻止与资源的连接。 因此,此配置可防止 Azure 数字孪生将事件数据发送到资源。
若要解决此问题,请通过“受信任的 Microsoft 服务”选项启用从 Azure 数字孪生实例到事件中心或服务总线资源的连接(请参阅事件中心的受信任 Microsoft 服务和服务总线的受信任 Microsoft服务)。
需要完成以下步骤才能启用受信任的 Microsoft 服务连接。
- Azure 数字孪生实例必须使用系统分配的托管标识。 这样,其他服务就可以将实例查找为受信任的 Microsoft 服务。 有关在实例上设置系统托管标识的说明,请参阅为实例启用托管标识。
- 预配系统分配的托管标识后,请为实例的托管标识授予访问事件中心或服务总线终结点的权限(事件网格中不支持此功能)。 有关分配适当角色的说明,请参阅将 Azure 角色分配给标识。
- 对于具有防火墙配置的事件中心和服务总线终结点,请确保启用“允许受信任的 Microsoft 服务绕过此防火墙”设置。
使用 Azure 专用链接进行专用网络访问
使用 Azure 专用链接服务,可以通过 Azure 虚拟网络 (VNet) 中的专用终结点访问 Azure 资源(例如 Azure 事件中心、Azure 存储和 Azure Cosmos DB)以及 Azure 托管的客户服务和合作伙伴服务。
同样,可以使用 Azure 数字孪生实例的专用访问终结点,以允许位于虚拟网络中的客户端通过专用链接对该实例进行安全的 REST API 访问。 通过为 Azure 数字孪生实例配置专用访问终结点,可以保护 Azure 数字孪生实例,消除曝光危险。 此外,它还有助于避免 Azure 虚拟网络 (VNet) 数据外泄。
专用访问终结点使用 Azure VNet 地址空间的 IP 地址。 专用网络上的客户端与 Azure 数字孪生之间的网络流量将通过 VNet 以及 Microsoft 主干网络上的专用链接,因此不会在公共 Internet 公开。
通过为 Azure 数字孪生实例配置专用访问终结点,可以保护 Azure 数字孪生实例,消除曝光危险,以及避免 VNet 数据外泄。
有关如何为 Azure 数字孪生设置专用链接的说明,请参阅使用专用链接启用专用访问。
注意
使用 Azure 专用链接进行专用网络访问适用于通过其其余 API 访问 Azure 数字孪生。 此功能不适用于使用 Azure 数字孪生的事件路由功能的流出量方案。
设计注意事项
为 Azure 数字孪生使用专用链接时,需要考虑以下几个因素:
- 定价:有关定价详细信息,请参阅 Azure 专用链接定价。
- 区域可用性:支持 Azure 数字孪生的所有 Azure 区域均支持 Azure 数字孪生的专用链接。
- Azure Digital Twins Explorer:Azure Digital Twins Explorer 无法访问已禁用公共访问的 Azure 数字孪生实例。 但是,你可以使用 Azure 函数在云中私下部署 Azure Digital Twins Explorer 代码库。 有关如何执行此操作的说明,请参阅 Azure Digital Twins Explorer:在云中运行。
- 每个 Azure 数字孪生实例的最大专用终结点数:10 个
- 其他限制:有关专用链接限制的信息,请参阅 Azure 专用链接文档:限制。
服务标记
服务标记代表给定 Azure 服务中的一组 IP 地址前缀。 Microsoft 会管理服务标记包含的地址前缀,并在地址更改时自动更新服务标记,从而尽量减少频繁更新网络安全规则所需的复杂操作。 有关服务标记的详细信息,请参阅虚拟网络标记。
可以使用服务标记来定义对网络安全组或 Azure 防火墙的网络访问控制,方法是在创建安全规则时使用服务标记替换特定的 IP 地址。 通过在规则的相应源或目标字段中指定服务标记名称(在本方案中为 AzureDigitalTwins),可允许或拒绝相应服务的流量。
下面是 AzureDigitalTwins 服务标记的详细信息。
标记 | 目的 | 可以使用入站还是出站连接? | 可以支持区域范围? | 是否可与 Azure 防火墙一起使用? |
---|---|---|---|---|
AzureDigitalTwins | Azure 数字孪生 注意:此标记或此标记所涵盖的 IP 地址可用于限制对事件路由配置的终结点的访问。 |
入站 | 否 | 是 |
使用服务标记访问事件路由终结点
下面是在 Azure 数字孪生中使用服务标记访问事件路由终结点的步骤。
首先,下载显示有 Azure IP 范围和服务标记的 JSON 文件引用:AZURE IP 范围和服务标记。
在 JSON 文件中查找 "AzureDigitalTwins" IP 范围。
请参阅有关连接到终结点的外部资源的文档(例如,事件网格、事件中心、服务总线或死信事件的 Azure 存储),查看如何为资源设置 IP 筛选器。
使用步骤 2中的 IP 范围为外部资源设置 IP 筛选器。
根据需要定期更新 IP 范围。 此范围可能会随时间而变化,因此最好定期检查并在需要时刷新它们。 更新频率会有所不同,但最好每周检查一次。
静态数据加密
Azure 数字孪生对写入数据中心的静态数据和传输中的数据进行加密,并在你访问数据时解密。 使用 Microsoft 管理的加密密钥进行加密。
跨源资源共享 (CORS)
Azure 数字孪生目前不支持跨域资源共享 (CORS)。 因此,如果从浏览器应用、API 管理 (APIM) 接口或 Power Apps 连接器中调用 REST API,则可能出现策略错误。
若要解决此错误,可以执行下列某种操作:
- 去除消息中的 CORS 标头
Access-Control-Allow-Origin
。 此标头指示是否可以共享响应。 - 或者,创建 CORS 代理,并通过它请求 Azure 数字孪生 REST API。
后续步骤
请参阅设置实例和身份验证,了解这些概念的实际应用。
请参阅编写应用验证码,了解如何从客户端应用程序代码着手与这些概念交互。
详细了解 Azure RBAC。