Composer 中的 ThingWorx 模型定义 > 安全 > 安全建模的最佳做法
安全建模的最佳做法
在 ThingWorx 中设置安全模型是模型开发的最关键步骤之一,可确保用户对模型中的资产具有正确的访问权限,以及在每个步骤中考虑安全性影响。管理 Edge 安全性是该过程的一个重要方面。在 ThingWorx 中,您将通过以下方式对远程事物设置细化权限:
创建代表远程事物的唯一用户
将用户分配到正确的组织
在唯一的用户上下文中创建唯一的应用程序密钥
* 
如果您要使用应用程序中的 文件上载功能,请注意,文件上载允许具有适当访问权限的用户将任何类型的文件内容上载到系统。PTC 无法保证上载的文件是否为安全文件,以及输入是否来自受信任的用户。
该主题的信息旨在提供有关在模型中设置安全性的禁忌,以及设置模型以使其尽可能安全的最佳做法的提示。
管理 Edge 安全性
管理 Edge 安全性是保护模型的一个重要方面 (首先进行模型构建,然后进行安全部署)。Edge 是 ThingWorx (Composer) 中的建模环境与外部数据源之间的障碍。在 ThingWorx 中,可通过多种方式来管理 Edge 安全性,包括使用 TLS/SSL 通信在 Edge 和平台之间进行通信。使用 TLS/SSL 会产生以下结果:
远程事物使用证书验证服务器。
使用 TLS 对通信进行加密。
应用程序密钥可以向平台验证远程事物,与应用程序密钥关联的用户上下文可以限制平台内的访问。
建议避免的做法
尽管您可以采取一些步骤使 Edge 尽可能安全,但有一些做法可能会降低整个系统的安全性。这些实践包括:
不建议关闭 SSL。即使在移动电话上,某些网络的安全架构中也存在已知的缺陷。
使用具有已知且容易受到攻击的哈希的证书。
请勿使用 MD5、SHA1 等等。请使用 NIST 推荐的证书。
请勿在开发环境之外使用自签名证书。
在多个设备上使用相同的应用程序密钥。使用应用程序密钥对连接进行身份验证。如果应用程序密钥在所有设备中不是唯一的,则难以在所有连接中审计模拟连接或恶意连接。
使用具有广泛权限的应用程序密钥。这可能导致为资产授予其不应具有的访问权限。
建议使用的做法
使用受信任的证书颁发机构。
使用客户端证书授权 - 相互 TLS。
* 
系统集成方负责实施此技术。有关实施的详细信息,请参阅 C SDK 用户指南
使用应用程序密钥。在设置应用程序密钥和 ThingWorx 用户时,请始终授予最少量的权限。这不是向应用程序密钥分配管理员组成员的最佳做法。
设置模型
为了充分保护您的应用程序,使用以下原则提供保护始终是一种最佳做法:
授予最少量权限
深度防御
保护默认值
1. 设置组织
为 Edge 设备构建安全模型的第一步是使用 组织正确设置条目的可见性。组织可以为具有适当的应用程序访问权限的用户提供系统范围的可见性设置。
2. 设置用户组
设置用户组以基于用户角色开发访问控制功能。
* 
ThingWorx 提供多个预定义用户组。有关详细信息,请参阅 用户组
3. 设置用户
用户可以提供细化的数据访问权限。组织和用户组设置完成后,应为平台上每个唯一允许的实体创建一个用户。从 Edge 角度来说,这意味着为每个即将连接到平台的 Edge 设备创建一个用户。
4. 设置应用程序密钥
应用程序密钥用于获取平台的安全访问权限,并链接到用户上下文以确定权限。应该为每个即将连接的 Edge 设备创建一个应用程序密钥。对于应用程序密钥和用户/设备,比例应为 1:1。
5. 设置远程事物:可见性、设计时和运行时权限
创建远程事物后,要设置的第一个安全上下文为 可见性。可见性会影响组织和组织单位。
下一步,设置设计时权限。设计时权限应仅授予想要修改应用程序中的行为和模型的受信任用户。通常,这意味着用户/设备将没有设计时权限,原因在于设备应该不能修改其自身行为。
最后,为代表设备的用户设置运行时权限,以便设备可以在功能上为应用程序提供更好的运行环境。运行时权限对于细节来说十分重要。将运行时权限设置为最小值,因此用户只能访问事物。如有必要,可以对属性设置更多细节。
设置模型的其他提示
最佳做法为移除生产环境中的所有设计时权限,以避免业务关键应用程序中可能的回归。所有设计都应在沙盒内实施和验证,然后在应用程序成功验证后,将其部署到生产环境。
用户、应用程序密钥和远程事物可以使用编程的方式创建,但是,为了实现此功能而创建的任何服务都应该严格控制在应用程序的安全模型之内,并遵守上一部分中所述的指导原则。
如果两个 Edge 事物通过同一 EMS 或 SDK 进行连接,则无法为每个 Edge 事物分配一个应用程序密钥。如果这些设备的权限模型需要进行分离,则建议通过单独的 SDK 连接这些设备,以便为每个连接端点提供单独的安全上下文。
如果某些应用程序需要每个远程事物的多个数据源,或者,如果多个用户从混搭访问同一事物的不同数据源,则可以针对单个属性和服务设置运行时权限。
使用任何 数据存储类型实体 (Wiki、博客、数据表、流和值流) 时,建议为 平台子系统 GetDefaultDataPersistenceProviderName 服务提供服务执行权限。用户在系统中必须至少有一个持久化方案提供工具的可见性权限,才能创建新的数据存储类型事物。