根据 Oracle Cloud Infrastructure Audit 生成身份和访问管理报告

简介

Oracle Cloud Infrastructure (OCI) Identity Domains 是 Oracle Identity Cloud Service 的后继产品,将 Oracle Identity Cloud Service 中的所有功能整合到核心 Oracle Cloud Infrastructure 服务中。Oracle Identity Cloud Service 是一个类似 SaaS 的自包含产品,提供关于服务中的用户活动等的报告。

与 Oracle Identity Cloud Service 不同,OCI Identity Domains 存在于更大的 OCI 上下文中。OCI 设计原则是尽可能使用通用服务功能,因此,在 Oracle Identity Cloud Service 中提供的部分报告已弃用,因为现在可以通过 OCI Audit 提供的通用服务功能获取使用的数据。

此教程演示如何基于 OCI 审计数据构建已弃用的报告,并使这些报告在 OCI Dashboard 中可用。

目标

Prerequisites

任务 1:了解 OCI Identity and Access Management 审计事件

每个 OCI 服务都会在用户或服务操作上创建审计记录,OCI IAM 也不例外,即在用户访问上创建审计记录,以及在 OCI IAM 中发生的任何更改或事件。

  1. 访问 OCI 控制台中“可观察性和管理”功能下的日志记录服务,然后选择搜索部分。

  2. 单击选择要搜索的日志以将日志搜索的上下文设置为包含要为其生成报告的 OCI IAM 身份域的区间。

    将区间添加到日志记录搜索

    选择相关区间后,您可能会看到用户或服务活动的多个条目,具体条目取决于租户的使用方式。您还可以看到您自己的或其他登录事件。如果未看到任何条目,则通过展开更多搜索选项来确保选择了正确的区域,或者通过修改按时间筛选设置来展开时间窗口。

  3. 单击显示高级模式以启用输入自由文本查询的功能,然后将以下项之一添加到默认查询的末尾(在 'sort by datetime desc' 之后),以生成 Oracle Identity Cloud Service 报告中包含的相同内容。

    报表 查询
    成功的登陆报告 | where data.additionalDetails.eventId = 'sso.session.create.success' | select data.additionalDetails.domainDisplayName as Domain, data.additionalDetails.actorName as Login, data.additionalDetails.eventId as Result, data.additionalDetails.ssoRp as Provider, time_format(datetime, 'yyyy-MM-dd hh:mm:ss z') as Date
    失败的登录报告 | where data.additionalDetails.eventId='sso.authentication.failure' | select data.additionalDetails.domainDisplayName as Domain, data.additionalDetails.actorName as User, data.additionalDetails.eventId as Result, data.message as Comments, time_format(datetime, 'yyyy-MM-dd hh:mm:ss z') as Date
    应用程序访问报告 | where data.additionalDetails.eventId = 'sso.session.create.success' or data.additionalDetails.eventId = 'sso.authentication.failure' or data.additionalDetails.eventId = 'sso.session.modify.success' | select data.additionalDetails.domainDisplayName as Domain, data.additionalDetails.actorDisplayName as User, data.additionalDetails.actorName as Login, data.additionalDetails.eventId as "Success/Failure", data.additionalDetails.ssoRp as Application, time_format(datetime, 'yyyy-MM-dd hh:mm:ss z') as Date
    审计日志报告 | where data.additionalDetails.eventId = 'sso.app.access.success' or data.additionalDetails.eventId = 'sso.app.access.failure' or data.additionalDetails.eventId = 'sso.session.create.success' or data.additionalDetails.eventId = 'sso.authentication.failure' or data.additionalDetails.eventId = 'sso.session.delete.success' or data.additionalDetails.eventId = 'admin.user.create.success' or data.additionalDetails.eventId = 'admin.user.activated.success' or data.additionalDetails.eventId = 'admin.user.deactivated.success' or data.additionalDetails.eventId = 'admin.user.update.success' or data.additionalDetails.eventId = 'admin.user.delete.success' or data.additionalDetails.eventId = 'admin.user.password.reset.success' or data.additionalDetails.eventId = 'admin.me.password.reset.success' or data.additionalDetails.eventId = 'admin.me.password.change.success' or data.additionalDetails.eventId = 'admin.policy.create.success' or data.additionalDetails.eventId = 'admin.rule.create.success' or data.additionalDetails.eventId = 'admin.policy.update.success' or data.additionalDetails.eventId = 'admin.rule.update.success' or data.additionalDetails.eventId = 'admin.passwordpolicy.create.success' or data.additionalDetails.eventId = 'admin.passwordpolicy.update.success' or data.additionalDetails.eventId = 'admin.grant.create.success' or data.additionalDetails.eventId = 'admin.grant.delete.success' or data.additionalDetails.eventId = 'admin.group.create.success' or data.additionalDetails.eventId = 'admin.group.add.member.success' or data.additionalDetails.eventId = 'admin.group.remove.member.success' or data.additionalDetails.eventId = 'admin.group.delete.success' or data.additionalDetails.eventId = 'admin.app.create.success' or data.additionalDetails.eventId = 'admin.app.update.success' or data.additionalDetails.eventId = 'admin.app.delete.success' or data.additionalDetails.eventId = 'admin.app.activated.success' or data.additionalDetails.eventId = 'admin.app.deactivated.success' or data.additionalDetails.eventId = 'notification.delivery.success' or data.additionalDetails.eventId = 'notification.delivery.failure' or data.additionalDetails.eventId = 'sso.auth.factor.initiated' or data.additionalDetails.eventId = 'sso.bypasscode.create.success' | select time_format(datetime, 'yyyy-MM-dd hh:mm:ss z') as Date, data.additionalDetails.domainDisplayName as Domain, data.additionalDetails.actorName as Actor, data.additionalDetails.eventId as "Event Id", data.message as "Event Description", data.additionalDetails.adminResourceName as Target
    应用程序角色分配报表 | where data.additionalDetails.eventId = 'admin.approle.add.member.success' or data.additionalDetails.eventId = 'admin.approle.remove.member.success' | select data.additionalDetails.domainDisplayName as Domain, data.additionalDetails.actorDisplayName as Approver, data.additionalDetails.adminAppRoleAppName as "Application Name", data.additionalDetails.adminRefResourceName as Beneficiary, data.additionalDetails.adminRefResourceType as "User/Group", data.additionalDetails.adminResourceName as "Application Role Name", time_format(datetime, 'yyyy-MM-dd hh:mm:ss z') as Date, data.additionalDetails.eventId as "Added/Removed"

    例如,对于 Successful Logins 报表,查询的外观与下面类似。

    高级搜索中应用程序访问查询的表示

  4. 单击搜索以使用更新的查询。如果它未返回任何结果,则可能需要修改时间筛选器。

    应用程序访问查询的示例结果

  5. 通过单击结果上方的操作下拉列表中的导出日志数据 (JSON) ,可以导出返回的任何结果。

    从日志搜索导出日志数据

    注:Oracle Identity Cloud Service 报告支持下载为 CSV 文件,而此导出仅支持 JSON 导出,但是以上查询中使用的 select 语句将 JSON 平整为具有属性的单个对象,如果需要,可以在 JSON 导出和 CSV 之间进行转换。

任务 2:为报表创建保存的搜索

为了避免每次希望访问这些报告时重新输入查询,您可以利用 OCI Logging 的已保存搜索功能。

  1. 验证查询后,单击保存搜索以允许在仪表盘中重用和嵌入查询。

  2. 输入搜索的名称,例如 'Successful_Login_Report' 或类似名称以及说明,然后单击保存

  3. 从“保存的搜索”界面中,可以单击返回到搜索中以获取最新数据集。

注:您不能直接从已保存搜索界面导出结果,而是需要使用操作下拉列表中的使用日志搜索浏览,然后从“搜索”视图导出结果。

任务 3:将报表添加到 OCI 仪表盘

除了从 OCI 日志记录服务中访问报告外,还可以通过 OCI 的仪表盘功能来提供报告,以便集中查看 OCI IAM 事件。

  1. 导航到 OCI 控制台登录页面,在顶部横幅中单击 Oracle Cloud ,然后切换到仪表盘视图。

  2. 通过单击新建仪表盘,为 OCI IAM 报告创建新的仪表盘。

  3. 选择从头开始构建,然后添加适当的名称和说明。

    创建显示板以显示 IAM 报告。

  4. 创建新的显示板组,或者将此显示板分配给现有组(如果适用)。

  5. 单击添加小组件,然后选择日志记录数据表,然后单击新小组件上的配置

  6. 提供适当的名称,然后选择保存的搜索。添加适当的默认时间期间。

    为应用程序访问报告创建小部件。

  7. 修改布局并根据需要添加其他已保存搜索。

    具有多个 IAM 报表的仪表盘示例

自动提取报表数据

上述方法提供了对 IAM 数据执行即席报告的能力。但是,对于正在进行的操作,可能需要自动提取这些数据。为此,您可以利用 OCI API、OCI CLI 或 OCI SDK 之一。

可以使用类似于以下内容的请求调用 SearchLogs API,从而调整时间范围并添加初始日志搜索中的查询:

POST https://logging.<region>.oci.oraclecloud.com/20190909/search?limit=1000
Body:
{
  "timeStart": "2025-01-01T00:00:00.000Z",
  "timeEnd": "2025-01-02T00:00:00.000Z",
  "searchQuery": "<log search query from Task #1>",
  "isReturnFieldInfo": false
}

等效的 OCI CLI 命令如下:

oci logging-search search-logs --search-query "<log search query from Task #1>" --time-start "2025-01-01T00:00:00.000Z" --time-end "2025-01-02T00:00:00.000Z" --is-return-field-info false

:在搜索查询中使用反斜杠 (\) 将双引号字符 (") 转义,即 as "Success/Failure" 变为 as \"Success/Failure\"

如果您希望将审计事件推送到备用系统,则可以使用 OCI Connector HubOCI Events 来简化日志转发,例如使用 OCI Audit 实施多云安全以捕获 OCI Identity and Access Management 中的事件(包括审计转发到 Azure Sentinel 的事件)。

确认

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心