ThingWorx 审计消息
本主题在以下部分中提供了有关 ThingWorx 审计消息的详细信息。单击某一章节标题可显示相应内容。再次单击标题可隐藏此内容。
审计消息类型 
审计子系统将在 ThingWorx Platform 中为不同的活动生成消息。这些消息分为以下常规类型:
对对象进行的更改 - 审计更改,例如创建、删除或修改实体。实体可能是事物或非事物,例如子系统或组织。
对用户进行的更改 - 审计更改,例如创建或修改用户或应用程序密钥。如需了解有关安全上下文中切换审计的信息,请参阅下一部分。
对对象执行的操作 - 对实体执行的审计操作。例如,对“事物”执行的远程会话活动 (隧道)。
对系统执行的操作 - 在审计中,消息不存在任何目标对象,例如用户登录和导入/导出操作。
审计操作 - 调用审计服务触发审计消息并将消息添加到审计日志。
审计消息包含审计条目,其中提供有关活动的信息。
审计安全上下文的切换 
自 ThingWorx Platform v.8.5 起,审计子系统会在安全上下文从一个用户切换到另一个用户时以及在将安全上下文提升到超级用户时进行审计。有关安全上下文切换的一个示例可在调用 ThingWorx 扩展 API 的 SecurityContext.createUserContext(User anotherUser) 方法时出现。此方法允许扩展或脚本切换到其他用户的安全上下文。ThingWorx 扩展 API 的 SecurityContext.createSuperUserContext() 方法可让扩展或脚本切换到系统超级用户的安全上下文,从而使扩展代码能够访问超级用户有权访问的所有实体。
安全上下文的更改通常发生在 ThingWorx Platform 内部,以便启用不同的功能来访问可能对标准用户不可见的服务和实体。因此,系统并不会审计所有安全上下文更改。系统仅会审计故意进行更改且可能显现出安全漏洞的安全上下文。
这些消息属于 SECURITY_CONFIGURATION 类别。用于切换安全上下文的审计消息如下:
audit.securityContext.SuperUser
User _currentUser__switched context to SuperUser within the Entity Context of __thingName__.
audit.SecurityContext.Changed
User __currentUser__ switched context to __username__within the Entity Context of __thingName__.
审计条目 
每个审计条目包含两个部分 (审计类别密钥和审计消息密钥):
审计类别密钥是用于指定与审计消息相关联的功能区域或类别的本地化标记。此密钥为 STRING。有关类别列表,请参阅 审计类别
审计消息密钥是指向审计消息文本的本地化标记。此密钥为 STRING
每个部分的值从相应的内置事件定义或实例中提取。
审计消息自变量 
审计消息可提供用于生成本地化文本消息和执行操作的实体名称的参数。替换名称/值对的 ValueCollection 用于生成本地化文本消息。此信息从事件实例的 eventData 字段检索。ThingWorx 实体 (例如,事物或用户) 与审计消息相关联,其中包括执行作为审计消息主题的操作的人员或事物。
审计类别 
所有审计条目都与审计类别相关联。审计类别使筛选审计数据变得十分容易,并可查看特定操作类别的活动趋势。
每个审计条目都具有单一类别,类别将存储为具有审计条目的字符串。显示的审计类别字符串已本地化。根据用户的首选区域设置,以适合的语言显示审计类别。
在 ThingWorx Composer 的本地化标记表格中,每个类别和每个消息均有一个本地化标记。在启用/禁用类别和消息时,这些标记也被称为 CategoryKeyMessageKey
以下是一个本地化表格示例,其中显示了审计类别以及消息的本地化标记名称和值:
下表简要介绍了每个类别的已审计操作并提供了相应示例。该表还为类别和消息提供了本地化标记 (或“键”)。
审计类别、已审计事件及其键 (本地化标记)
类别
说明
示例
类别键和消息键
ANALYTICS
与分析实体相关的操作。ThingWorx Analytics 执行的操作。
“数据分析定义”的创建、编辑、删除操作。
ThingWorx Analytics 中的其他操作。
类别键:audit.AuditCategory.Analytics
AUDIT
供内部审计子系统使用。
默认情况下处于启用状态。
启用对审计服务执行的追踪,因为其中可能包含敏感数据。审计消息将返回执行该服务的 USERNAME。默认情况下,审计的服务如下所示:
ArchiveAuditHistory
ArchiveAuditHistoryDirectPersistence
PurgeAuditData
ExportAuditData
ExportOnlineAuditData
CleanUpOfflineAudit
默认情况下,不会审计以下服务:
QueryAuditHistory
QueryAuditHistoryWithQueryCriteria
QueryAuditHistoryContextConstrained
GetAuditEntryCount
类别键:audit.AuditCategory.Audit
消息键:
audit.Audit.ExecutedService.ArchiveAuditHistory
audit.Audit.ExecutedService.ArchiveAuditHistoryDirectPersistence
audit.Audit.ExecutedService.PurgeAuditData
audit.Audit.ExecutedService.ExportAuditData
audit.Audit.ExecutedService.ExportOnlineAuditData
audit.Audit.ExecutedService.CleanUpOfflineAudit
audit.Audit.ExecutedService.Query AuditHistory
audit.Audit.ExecutedService.GetAuditEntryCount
AUTHENTICATION
与身份验证相关的操作。
成功和失败的用户登录、用户退出登录、与使用“应用程序密钥”相关的错误。例如:Login successful for user: Administrator
Logout 条目用于追踪用户退出登录操作。此条目是用户最初退出登录 ThingWorx Composer 时生成的。此用户名将包括在审计消息中。
LoginSucceeded 条目用于追踪成功的用户登录操作。此用户名将包括在审计消息中。
LoginFailed 条目用于追踪失败的用户登录操作。此用户名将包括在审计消息中。
ApplicationKeySucceeded 条目用于追踪使用应用程序密钥进行的成功验证。此用户名将包括在审计消息中。
ApplicationKeyFailed 条目用于追踪使用应用程序密钥进行的失败验证。此用户名将包括在审计消息中。
类别键:audit.AuditCategory.Authentication
消息键
com.thingworx.things.security.SecurityMonitorThing.Logout.Audit
com.thingworx.things.security.SecurityMonitorThing.LoginSucceeded.Audit
com.thingworx.things.security.SecurityMonitorThing.LoginFailed.Audit
com.thingworx.things.security.SecurityMonitorThing.ApplicationKeySucceeded.Audit
com.thingworx.things.security.SecurityMonitorThing.ApplicationKeyFailed.Audit
COLLABORATION
与“协作”实体相关的操作。
博客和 Wiki 的创建、编辑和删除操作。
类别键:audit.AuditCategory.Collaboration
DATA_MANAGEMENT
与管理或使用数据相关的操作。
数据的删除操作。
类别键:audit.AuditCategory.DataManagement
DATA_STORAGE
“数据存储”实体及相关子系统的相关操作。
数据表、流和其他数据存储实体的创建、编辑和删除操作。
类别键:audit.AuditCategory.DataStorage
DEVICE_COMMUNICATION
与 Edge 设备通信相关的操作。
将审计 WSCommunicationSubsystemCloseWebSocketSessions 服务。有关此服务的详细信息,请参阅主题“WebSocketCommunications 子系统”的“服务”部分
* 
对于有关将代理和 SCM 包部署至代理的远程会话的审计消息,其各自的审计类别 REMOTE_ACCESSSCM 为相关操作提供了审计消息。
类别键:audit.AuditCategory.DeviceCommunication
FILE_TRANSFER
与文件上载和下载相关的操作和事件。
针对文件传输:成功完成传输、取消传输以及在传输过程中生成错误。
类别键:audit.AuditCategory.FileTransfer
IMPORT_EXPORT
与在 ThingWorx 中执行的数据导入和导出相关的操作。
模型和数据导入/导出操作。
扩展的导入。
类别键:audit.AuditCategory.ImportExport
LIFECYCLE
与事物特定事件相关的操作,例如 ThingEnable
在事物上调用相应的服务时,会生成诸如 ThingEnableThingDisable 等事件。默认情况下会禁用 ThingStart 事件的审计,因为加载将在 ThingWorx Platform 启动和重新启动期间进行。
类别键:audit.AuditCategory.Lifecycle
消息键:
com.thingworx.things.Thing.ThingStart.Audit
audit.EntityLifecycle.Enable
audit.EntityLifecycle.Disable
与所有实体 (包括事物组) 相关的创建和删除操作
审计的操作和消息如下所示:
用户 X 新建事物组 Y - 审计消息为“已创建 type "name"”。
用户 X 删除事物组 Y - 审计消息为“已删除 type "name"”。
用户 X 删除事物组 Y 的所有子成员 - 审计消息为“已删除 typename 的所有子成员”。
类别键:audit.LifeCycle
消息键:
audit.LifeCycle.Created
audit.LifeCycle.Deleted
audit.LifeCycle.DeletedAll
THINGGROUPMEMBERSHIPS
与事物组成员资格相关的添加操作
审计的操作和审计消息如下所示:
用户 X 添加事物 123 作为事物组 Y 的子成员 - 审计消息为“已添加事物 thingName 作为事物组 thingGroupName 的子成员”
用户 X 添加事物组 ABC 作为事物组 Y 的子成员 - 审计消息为“已添加事物组 thingGroupName1 作为事物组 thingGroupName2 的子成员”
类别键:audit.ThingGroupMemberships
消息键:
com.thingworx.thinggroups.ThingGroup.AddedThingAsChildMember
com.thingworx.thinggroups.ThingGroup.AddedThingGroupAsChildMember
与事物组成员资格相关的删除操作
审计的操作和审计消息如下所示:
用户 X 删除作为事物组 Y 子成员的事物 123 - 审计消息为“已将事物 thingName 从事物组 thingGroupName 子成员中删除”
用户 X 删除作为事物组 Y 子成员的事物组 ABC - 审计消息为“已将事物组 thingGroupName1 从事物组 thingGroupName2 的子成员中删除”
用户 X 删除事物组 Y 的所有子成员 (事物和/或事物组) - 审计消息为“已删除事物组 thingGroupName 的所有子成员”
类别键:audit.ThingGroupMemberships
消息键:
com.thingworx.thinggroups.ThingGroup.DeletedThingAsChildMember
com.thingworx.thinggroups.ThingGroup.DeletedThingGroupAsChildMember
com.thingworx.thinggroups.ThingGroup.DeletedAllChildMembers
MODELING
与“建模”实体相关的操作。创建实体时,系统会生成一条审计消息,其中包含分配给新实体的所有者。请注意,实体的所有者会被自动设置为创建该实体的用户名。
无论使用何种方法创建实体,系统都会生成审计消息:
在 Composer 中通过调用 PUT
通过调用 Create API、Clone API 或 SetOwner API
任何有权查看审计子系统的用户都可以查看有关所有权更改的报告。
有关事物、事物模板、事物形态、数据形状、网络、项目、模型和标记的创建、编辑、删除操作。
审计消息的格式为:
"Created <Source Type> <Source> with owner <username of owner>."
其中:
Source Type 为所创建实体的类型。例如,事物。
Source 为新实体的名称。
owner 显示了执行创建操作的用户的 username
类别键:audit.AuditCategory.Modeling
消息键为:audit.EntityLifecycle.Create
REMOTE_ACCESS
与远程访问 (隧道) 相关的操作。
用户会话开始 - 审计消息包括会话的用户 ID 和开始时间。
用户会话结束 - 审计消息包括会话的用户 ID、结束时间和总时间。
类别键:audit.AuditCategory.RemoteAccess
SCM (软件内容管理)
与包、部署和配置更改相关的操作。
创建、编辑、发布和删除包。创建、开始、转变和删除部署。包括测试和实际部署、为测试部署指定的资产以及包安装的成功或失败。用于自动清除和并发部署的配置更改。
当用户直接启动部署时,包部署信息将包括用户 ID。当部署由平台启动时,SYSTEM 将作为部署包的实体列出。
类别键:audit.AuditCategory.SoftwareManagement
SECURITY_CONFIGURATION
与安全实体和权限相关的操作,包括用户、用户组、事物组、组织、应用程序密钥、目录服务和身份验证器。
每当实体的所有权发生更改时,都会生成审计消息。可通过 Composer、API 调用或导入实体 XML 文件来更改所有者
以下情况不会生成所有权审计消息:
审计子系统已禁用。
实体已在未更改所有权的情况下更新。
SetOwner API 调用设置的所有者与实体的所有者相同。
有关用户、用户组、事物组、组织、应用程序密钥、目录服务、身份验证器的创建、编辑和删除操作。
启用对用户组更改的跟踪。只要将用户或用户组添加为另一个用户组的成员,就会生成 audit.Groups.Added 条目。只要将用户或用户组从用户组中移除,就会生成 audit.Groups.Removed 实体。
实体权限更改 (所有实体类型)。请参阅上述部分,审计安全上下文的切换
所有权更改审计消息的常规格式如下:
"Owner for <Source Type> <Source> changed from <original owner username> to <new owner username>."
其中:
Source Type 是所有者已更改的实体的类型。例如,事物。
Source 是所有者已更改的实体的名称。
original owner username 显示了执行更改操作的用户的 username
new owner username 是新所有者的 username
类别键:audit.AuditCategory.SecurityConfiguration
消息键:
audit.Groups.Added
audit.Groups.Removed
audit.entity.ownership.change
管理员启用和禁用用户管理子系统中的事物组可见性权限委派
审计的操作和审计消息如下所示:
管理员启用用户管理子系统中的事物组可见性权限委派 - 审计消息为“事物组可见性权限委派已启用。”
管理员禁用用户管理子系统中的事物组可见性权限委派 - 审计消息为“事物组可见性权限委派已禁用。”
类别键:audit.AuditCategory.SecurityConfiguration
消息键:
com.thingworx.thinggroups.ThingGroup.VisibilityPermissionDelegationEnabled
com.thingworx.thinggroups.ThingGroup.VisibilityPermissionDelegationDisabled
SYSTEM
与系统实体相关的操作。
有关本地化表、资源、子系统和日志的创建、编辑和删除操作。
子系统配置更改和操作,包括启动、停止和重新启动。子系统相关的所有条目归为此类别,且不会出现在其他任何类别中。
* 
重新启动操作会生成两条或三条审计消息,具体取决于调用重新启动操作时子系统的状态。如果子系统的状态为 RUNNING,则会写入三条消息,重新启动、停止和启动操作各一条。如果子系统的状态不是 RUNNING,则会写入两条消息,重新启动和启动操作各一条。在这种情况下,不会执行停止操作。
类别键:audit.AuditCategory.System
VISUALIZATION
与“可视化”实体相关的操作。
有关混搭、主数据、小工具、仪表板、菜单、媒体实体、样式定义和状态定义的创建、编辑和删除操作。
类别键:audit.AuditCategory.Visualization
启用和禁用审计事件 
重新启动 ThingWorx Platform 后,所有事物都会触发 ThingStart 事件。若审计上述所有事件,则会导致平台的启动时间过长。为避免出现这种情况,默认情况下会禁用 LIFECYCLE 类别中的 ThingStart 事件。下表显示了默认情况下会禁用的其他审计消息:
默认情况下禁用的审计消息
审计类别
审计消息密钥
AUDIT
audit.Audit.ExecutedService.QueryAuditHistory
audit.Audit.ExecutedService.QueryAuditHistoryWithQueryCriteria
QueryAuditHistoryContextConstrained
audit.Audit.ExecutedService.GetAuditEntryCount
THINGGROUPMEMBERSHIPS
com.thingworx.thinggroups.ThingGroup.AddedThingAsChildMember
com.thingworx.thinggroups.ThingGroup.DeletedThingAsChildMember
com.thingworx.thinggroups.ThingGroup.AddedThingGroupAsChildMember
com.thingworx.thinggroups.ThingGroup.DeletedThingGroupAsChildMember
com.thingworx.thinggroups.ThingGroup.DeletededAllChildMembers
LIFECYCLE
audit.Lifecycle.ThingStart
如果仍要审计上表中列出的所有操作,则可通过编辑平台配置文件 platform-settings.json 来启用消息。此外,如果要禁用不使用的类别和事件消息,则可以通过编辑此配置文件来完成。
* 
不能启用或禁用 LIFECYCLE 类别中的单个事件。必须使用符号 "MessageKeys" : ["ALL"] 来启用或禁用所有这些对象。
要检查已禁用的类别,请转至 ThingWorx Composer,然后在左侧导航面板中,转至“监控” > “应用程序日志”并搜索已禁用的审计类别。
* 
对审计类别和事件消息的 platform-settings.json 文件进行更改后,您需要重新启动 ThingWorx Platform 实例。最好不要经常进行此类更改。
platform-settings.json 文件不包含“审计”部分。要启用或禁用类别和消息,需要向文件添加 JSON 结构。对于要进行消息审计的 ThingWorx Platform 实例,您需要具有查找和编辑 platform-settins.json 文件以及添加相应配置的用户权限。
* 
Audit 部分必须作为 PlatformSettingsConfig 的 JSON 条目的同级节点添加。它可以位于 PlatformSettingsConfig 节点之前或之后,但必须处于相同的节点级别。
要启用或禁用特定事件的审计:
1. 导航到 ThingWorxPlatform 目录,然后在文本编辑器中打开 platform-settings.json 文件。
2. 在文件的结尾创建名为 "Audit" 的新组,并为类别和事件消息添加组和键,模式如下所示:
每个类别必须在 "Enabled" 组和 "Disabled" 组中拥有其自己的 "CategoryKey" 条目。
每个类别键后必须附加一个 "MessageKeys" 条目。要启用或禁用整个类别,必须使得类别键和消息键与下列示例类似:

"CategoryKey" : "audit.AuditCategory.Audit"
"MessageKeys" : ["ALL"]
"CategoryKey" 接受表格 表 122 中所示类别的键字符串。例如,audit.AuditCategory.Lifecycle
"CategoryKey" 值始终用双引号进行分隔。行始终以逗号结束。
"MessageKeys" 条目将始终使用方括号将值括起,而无论只有一个消息键还是有多个消息键。如果有多个消息键,则在每个键的末尾使用逗号 (最后一个除外)。
"MessageKeys" 可接受文本字符串 ["ALL"] 以及表格 表 122 中显示的消息键。
请确保每个组均使用正确的括号,如以下示例所示。

"PlatformSettingsConfig:: {
"BasicSettings":( . . .
}
}
"Audit": {
"Disabled": [{
"CategoryKey": "audit.AuditCategory.Collaboration",
"MessageKeys": ["ALL"]
}, {
"CategoryKey": "audit.AuditCategory.Authentication",
"MessageKeys": [
"com.thingworx.things.security.SecurityMonitorThing.LoginSucceeded.Audit",
"com.thingworx.things.security.SecurityMonitorThing.ApplicationKeySucceeded.Audit"
]
}],
"Enabled": [{
"CategoryKey": "audit.AuditCategory.Lifecycle",
"MessageKeys": ["ALL"]
}, {
"CategoryKey": "audit.AuditCategory.Authentication",
"MessageKeys": [
"com.thingworx.things.security.SecurityMonitorThing.LoginFailed.Audit"
]
}, {
"CategoryKey": "audit.AuditCategory.ThingGroupMemberships",
"MessageKeys": [
"com.thingworx.thinggroups.ThingGroup.DeletdThingAsChildMember"
"com.thingworx.thinggroups.ThingGroup.DeletedThingGroupAsChildMember"
"com.thingworx.thinggroups.ThingGroup.DeletedAllChildMembers"
]
}, {
"CategoryKey": "audit.AuditCategory.Authentication",
"MessageKeys": [
"com.thingworx.things.security.SecurityMonitorThing.LoginFailed.Audit"
]
}]
}
3. 保存并关闭该文件。
4. 与对 platform-settings.json 文件进行任何更改时一样,您需要停止并重新启动 ThingWorx Platform。
有关详细信息,请参阅主题plateform-settings.json 配置详细信息中的“将已审计事件部分添加到 platform-settings.json”一节。
这对您有帮助吗?