收集 Microsoft Dynamics 365 用户活动日志
本文档介绍了如何通过使用 Microsoft Azure Blob Storage V2 设置 Google SecOps Feed 来收集 Microsoft Dynamics 365 用户活动日志。
Microsoft Dynamics 365 是一个基于云的企业应用平台,集成了 CRM 和 ERP 功能。用户活动日志会捕获用户在 Dynamics 365 应用中执行的操作和事件,包括实体操作、数据访问权限和管理活动。Dynamics 365 基于 Microsoft Dataverse 构建,可通过 Microsoft Purview 统一审核日志提供全面的审核日志记录。
准备工作
确保您满足以下前提条件:
- Google SecOps 实例
- 对 Microsoft Azure 门户的特权访问权限,包括:
- 创建存储账号
- 配置 Azure Synapse Link for Dataverse
- 管理访问密钥
- 包含 Dynamics 365 的 Microsoft 365 订阅
- Dynamics 365 环境中的“系统管理员”安全角色
对 Power Platform 管理中心的全局管理员或 Power Platform 管理员访问权限
启用 Dataverse 审核
在导出 Dynamics 365 用户活动日志之前,您必须在 Power Platform 管理中心内启用审核功能。
- 登录 Power Platform 管理中心。
- 在导航窗格中,选择环境。
- 选择包含 Dynamics 365 部署的环境。
- 在命令栏中,选择设置。
- 展开审核和日志,然后选择审核设置。
- 在审核下,启用以下选项:
- 开始审核:为环境启用审核功能。
- 日志访问权限:跟踪用户登录情况。
- 读取日志:捕获大多数用户活动和事件。
- 根据您的需求,为审核日志设置保留政策。
- 选择保存以应用更改。
启用表级审核
- 登录 Power Apps,然后选择环境。
- 在命令栏中,依次选择设置 > 高级设置。
- 依次前往设置 > 自定义 > 自定义系统。
- 在导航窗格中,展开组件下的实体,然后选择要审核的实体(例如账号)。
- 向下滚动到数据服务,然后勾选审核复选框。
- 在审核下,启用以下选项:
- 单条记录审核。打开时记录记录。
- 多条记录审核。记录打开的页面上显示的所有记录。
- 依次选择保存和发布。
- 针对要审核的每个表重复第 4-7 步。
如需了解详情,请参阅 Microsoft Dataverse 和模型驱动应用活动日志记录。
配置 Azure 存储账号
创建存储账号
- 在 Azure 门户中,搜索存储账号。
- 点击 + 创建。
提供以下配置详细信息:
设置 值 订阅 选择您的 Azure 订阅 资源组 选择现有组或创建新组 存储账号名称 输入一个唯一名称(例如 secopsd365logs)区域 选择与 Dataverse 环境相同的区域 性能 标准(推荐) 冗余 GRS(地理位置冗余存储)或 LRS(本地冗余存储) 选择高级标签页,然后启用分层命名空间选项。
点击 Review + create(检查 + 创建)。
查看账号概览,然后点击创建。
等待部署完成。
获取存储账号凭据
- 前往您刚刚创建的存储账号。
- 在左侧导航栏中,选择安全性 + 网络下的访问密钥。
- 点击显示密钥。
- 复制并保存以下内容以供日后使用:
- 存储账号名称:
secopsd365logs - 密钥 1 或密钥 2:共享访问密钥(采用 base-64 编码的 512 位随机字符串)
- 存储账号名称:
获取 Blob 服务端点
- 在同一存储账号中,从左侧导航栏中选择端点。
- 复制并保存 Blob 服务端点网址。
- 示例:
https://secopsd365logs.blob.core.windows.net/
- 示例:
授予存储账号权限
向将配置 Azure Synapse Link 的 Power Platform 管理员授予权限:
- 在存储账号中,选择左侧窗格中的访问权限控制 (IAM)。
- 依次点击 + 添加 > 添加角色分配。
- 为 Power Platform 管理员分配以下角色:
- Storage Blob Data Contributor
- Storage Blob Data Owner
配置 Azure Synapse Link for Dataverse
Azure Synapse Link for Dataverse 会将 Dataverse 审核表导出到 Azure Data Lake Storage Gen2,后者与 Azure Blob Storage V2 Feed 兼容。
创建 Azure Synapse 工作区
- 在 Azure 门户中,搜索 Synapse Analytics。
- 点击 + 创建。
- 提供以下配置详细信息:
- 订阅:选择您在其中创建存储账号的订阅。
- 资源组:选择与存储账号相同的资源组。
- 工作区名称:输入一个唯一名称(例如
synapse-d365-secops)。 - 区域:选择与您的 Dataverse 环境相同的区域。
- 存储账号名称:选择您之前创建的存储账号 (
secopsd365logs)。 - 文件系统名称:点击新建,然后输入名称(例如
d365-audit)。
- 点击查看 + 创建,然后点击创建。
- 等待部署完成。
创建 Apache Spark 池
- 在 Azure 门户中,前往您创建的 Synapse 工作区。
- 点击 + 新建 Apache Spark 池。
- 提供以下配置详细信息:
- Apache Spark 池名称:输入一个名称(例如
sparkpoold365)。 - 节点数量:输入
5。
- Apache Spark 池名称:输入一个名称(例如
- 选择其他设置标签页,然后为空闲分钟数输入
5。 - 点击查看 + 创建,然后点击创建。
将 Dataverse 审核表连接到 Synapse 工作区
- 登录 Power Apps,然后选择包含 Dynamics 365 部署的环境。
- 在左侧导航窗格中,选择 Azure Synapse Link。如果未看到该项,请依次选择更多 > 发现所有,然后找到 Azure Synapse Link。
- 点击新建关联。
- 在新建链接页面上,执行以下操作:
- 选择 Connect to your Azure Synapse Analytics workspace(连接到 Azure Synapse Analytics 工作区)选项。
- 订阅:选择 Azure 订阅。
- 资源组:选择包含 Synapse 工作区的资源组。
- 存储账号:选择存储账号 (
secopsd365logs)。 - 选择使用 Spark 池进行 Delta Lake 数据转换作业选项。
- Spark 池:选择您创建的 Spark 池 (
sparkpoold365)。 - 存储账号:选择相同的存储账号。
- 点击下一步。
- 展开高级标签页,然后在时间间隔字段中输入
480分钟。 - 在表格列表下方,选择审核和用户表格。
点击保存。
如需了解详情,请参阅使用 Azure Synapse Link 和 Power BI 访问审核数据。
在 Google SecOps 中配置 Feed 以注入 Microsoft Dynamics 365 用户活动日志
- 前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
Microsoft Dynamics 365 User Activity)。 - 选择 Microsoft Azure Blob Storage V2 作为来源类型。
- 选择 Microsoft Dynamics 365 作为日志类型。
- 点击下一步。
为以下输入参数指定值:
- Azure URI:输入包含容器路径的 Blob 服务端点网址:
https://secopsd365logs.blob.core.windows.net/d365-audit/替换以下内容:
secopsd365logs:您的 Azure 存储账号名称。d365-audit:在 Synapse 工作区中配置的文件系统(容器)名称。
- 来源删除选项:根据您的偏好选择删除选项:
- 永不:转移后永不删除任何文件。
- 删除已转移的文件:成功转移后删除文件。
- 删除已转移的文件和空目录:成功转移后删除文件和空目录。
- 文件存在时间上限:包含在过去指定天数内修改过的文件(默认值为 180 天)
- 共享密钥:输入您之前从存储账号中捕获的共享密钥值(访问密钥)
- 资源命名空间:资源命名空间
- 注入标签:要应用于此 Feed 中事件的标签
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
配置 Azure 存储防火墙(如果已启用)
如果您的 Azure 存储账号使用防火墙,则必须添加 Google SecOps IP 范围。
- 在 Azure 门户中,前往您的存储账号。
- 在安全和网络下,选择网络。
- 在防火墙和虚拟网络下,选择已启用(从所选虚拟网络和 IP 地址)。
- 在防火墙部分的地址范围下,点击 + 添加 IP 范围。
以 CIDR 表示法添加每个 Google SecOps IP 范围。
如需获取当前的 IP 范围,请执行以下操作:
- 请参阅 IP 许可名单文档
- 或者使用 Feed Management API 以编程方式检索这些信息
点击保存。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| BuildNumber | about.labels | 合并了 about_BuildNumber 与键“BuildNumber”和来自 BuildNumber 的值(如果不为空) |
| RECORD_IDENTIFIER | additional.fields | 如果相应字段不为空,则与根据每个字段创建的标签合并 |
| LastProcessedChange_DateTime | additional.fields | |
| DataLakeModified_DateTime | additional.fields | |
| Application_Object_Server_node | additional.fields | |
| ClientType | additional.fields | |
| LogoutDateTime | additional.fields | |
| LOGOUTDATETIMETZID | additional.fields | |
| TerminatedOk | additional.fields | |
| 类型 | additional.fields | |
| Alive | additional.fields | |
| PARTITION | additional.fields | |
| has_user | metadata.event_type | 如果 has_user 为 true,则设置为“GENERIC_EVENT”,然后设置为“USER_UNCATEGORIZED”;如果 has_principal 为 true,则设置为“STATUS_UPDATE” |
| has_principal | metadata.event_type | |
| RECVERSION | metadata.product_version | 如果非空,则直接复制值 |
| SessionId | network.session_id | 如果非空,则直接复制值 |
| LOG_SEQUENCE_NUMBER | security_result.detection_fields | 合并了 LOG_SEQUENCE_NUMBER_label 与键“LOG_SEQUENCE_NUMBER”和来自 LOG_SEQUENCE_NUMBER 的值(如果不为空) |
| UserId | target.user.userid | 如果非空,则直接复制值 |
| 时间戳 | 时间戳 | 如果非空,则使用与 ISO8601 或 RFC 3339 格式匹配的日期进行解析 |
| metadata.product_name | metadata.product_name | 设置为“MICROSOFT_DYNAMICS_365” |
| metadata.vendor_name | metadata.vendor_name | 设置为“MICROSOFT_DYNAMICS_365” |
更新日志
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。