Docs 菜单
Docs 主页
/ /
Atlas App Services
/

Edge Server权限指南 - 预览

在此页面上

  • Edge Server权限
  • 所有边缘服务器
  • 特定Edge Server
  • 客户端权限
  • 字段级权限

Edge Server数据访问受以下方面的交集控制:

  • 基于角色的权限

  • 用户身份验证

  • 用于将数据同步到Edge Server实例的查询

  • 如果使用Atlas Device SDK ,则用于与客户端同步数据的查询

Edge Server支持文档和字段级别基于角色的权限。 本页探讨高级Edge Server和客户端权限配置,并提供示例说明基本权限原则。

相关文档:

  • 如果您不熟悉 Atlas 中基于角色的权限,请在基于角色的权限中了解权限引擎的概述

  • 有关如何定义角色和权限的信息,请参阅定义角色和权限。

  • Edge Server使用Device Sync在Edge Server实例和Atlas之间同步数据。 Edge Server和客户端角色必须使用与Device Sync兼容的权限。

Edge Server实例是一个用户,类似于其他传入客户端连接。 Edge Server必须通过Atlas进行身份验证,并且它有自己的权限来确定实例可以读写哪些数据。

您可以配置规则,使其普遍应用服务中的所有边缘服务器。 或者,您可以使用更精细的规则来指定Edge Server实例可以写入的数据子集。

您可以通过指定Edge Server applyWhen规则表达式 (其中 %%user_type 为 )来创建适用于所有edge 实例的角色:

{
"name": "edgeServerRole",
"apply_when": {
"%%user.type": "edge"
},
...customize the permissions for all Edge Server instances...
}

示例,如果您的数据集不包含敏感数据(例如天气服务),您可以添加一个角色,声明边缘服务器可以读取和写入所有数据:

{
"name": "readAndWriteAll",
"apply_when": {
"%%user.type": "edge"
},
"document_filters": {
"read": true,
"write": true
},
"insert": true,
"delete": true,
"search": true,
"read": true,
"write": true
}

在某些情况下,业务逻辑意味着您只想将数据的子集同步到给定的Edge Server实例。 示例,在以下情况下,您可能希望将Edge Server限制为数据的子集:

  • 数据集包含 PII 或其他敏感数据,不应同步到每个Edge Server实例

  • 这是一个大型数据集,您不想将其同步到资源有限的设备

  • Edge Server托管是不可信硬件,应具有完成任务所需的最少数据

  • 出于法律或监管目的,数据受到地区限制,并且您只想同步与Edge Server地区相关的数据

您可以使用权限来筛选特定实例对数据子集的访问权限。 或者,您可以使用权限将Edge Server实例配置为读取数据,但不能写入数据。

由于每个Edge Server实例都是一个用户,因此您可以使用Edge Server的 user_id 为给定实例配置权限。 您可以使用Edge Server 规则表达式 创建一个角色,以限制与特定 实例同步的数据,其中 %%user_id 是 的Edge Server user_id。您可以从Edge Server user_idEdge Server实例详细信息 AdminAPI 列表边缘服务器 端点获取 实例 。

您可以使用 user_id 将Edge Server实例限制为只能读取和写入自己的文档。

例如,如果Edge Server实例代表医疗保健诊所,您可能只想同步与该诊所患者相关的数据。

在此示例中,每个文档都有一个 facility_id 属性,其值为Edge Server的 user_id。 此角色意味着Edge Server只能读取和写入 facility_id 与其自身 user_id 匹配的文档。

{
"name": "facilityItemsOnly",
"apply_when": {
"%%user.type": "edge"
},
"document_filters": {
"write": {
"facility_id": "%%user.id"
},
"read": {
"facility_id": "%%user.id"
},
},
"read": true,
"write": true,
"insert": true,
"delete": true,
"search": true
}

您可以将Edge Server实例配置为能够读取所有数据,但只能写入自己的数据。 例如,在零售环境中, Edge Server实例可能代表商店库存系统。 您可能希望商店能够在所有库存中Atlas Search某一商品,但只销售自己库存中的商品。

{
"name": "readAllWriteOnlyStoreItems",
"apply_when": {
"%%user.type": "edge"
},
"document_filters": {
"write": {
"store_id": "%%user.id"
},
"read": true
},
"read": true,
"write": true,
"insert": true,
"delete": true,
"search": true
}

连接到Edge Server实例的客户端具有自己的权限。 您可以将Edge Server实例的权限视为Atlas中的数据与客户端可写入数据之间的过滤。

在类似于上述边缘服务器实例示例的医疗保健环境中,边缘Edge Server实例只能读取和写入与其自身设施相关的数据。 然后,第二个角色可以进一步限制连接客户端的权限。 例如,机构中的患者只能查看自己的数据。

您可以在roles数组中将这些角色表示为独立的角色。

规则引擎会按照您指定角色的顺序对每个角色的apply_when表达式求值。 第一个apply_when表达式计算结果为true的角色将成为分配的角色。 如果没有角色匹配,则拒绝访问权限。

在此示例中, PatientRecords数据库具有Visits集合。 这两个角色决定了Edge Server实例可以同步哪些文档,以及连接到该实例的单个客户端可以同步哪些文档:

  • facilityItemsOnly 角色筛选同步到Edge Server实例的项目。 同步到设施的唯一项目是 facility_id 与Edge Server实例 user_id 匹配的记录。

  • patientOwnRecordsOnly角色筛选可同步到已连接客户端设备的项目。 唯一同步到已连接客户端的项目是其中patient_id为客户端user_id的访问。

{
"collection": "Visits",
"database": "PatientRecords",
"roles": [
{
"name": "facilityItemsOnly",
"apply_when": {
"%%user.type": "edge"
},
"document_filters": {
"write": {
"facility_id": "%%user.id"
},
"read": {
"facility_id": "%%user.id"
},
},
"insert": true,
"delete": true,
"search": true,
"read": true,
"write": true
},
{
"name": "patientOwnRecordsOnly",
"apply_when": {},
"document_filters": {
"write": {
"patient_id": "%%user.id"
},
"read": {
"patient_id": "%%user.id"
}
},
"read": true,
"write": true,
"insert": true,
"delete": true,
"search": true
}
]
}

重要

角色顺序很重要

在此示例中,roles大量中的第一项是Edge Server角色,其 apply_when表达式仅适用于Edge Server 。 当客户端评估角色时,第一个角色的客户端端评估结果为false ,因此它会继续执行下一个角色。 如果第一个条目是客户端角色,且 apply_when表达式为空,则对于Edge Server ,该角色的计算结果为 true。 由于Edge Server的 user_id 永远不会与 patient_id 匹配,因此没有文档会同步到Edge Server 。

如果您有许多不同类型的客户端,并且每个客户端都有权访问权限数据的子集,则可以定义许多不同的客户端角色。 示例,在医疗保健环境中,您可以使用不同的角色:

  • 患者:仅访问权限自己的医疗记录和解决账单信息。

  • 账单专家:提供对所有患者地址和账单信息的访问权限,但不包括医疗记录。

  • 医生:提供所有患者医疗记录的访问权限,但不提供地址和账单信息。

显示三种不同角色(患者、计费专家和医生)可用的不同数据的文档。
点击放大

Edge Server还支持字段级权限,从而确定对文档中特定字段的读取或写入访问权限。 您可以为Edge Server实例、连接到Edge Server实例的客户端或两者定义字段级权限。

后退

将 MongoDB API 与边缘服务器结合使用