将 Okta 与 Google SecOps 集成

本文档提供了有关如何将 Okta 与 Google Security Operations 集成的指南。

使用场景

Okta 集成使用 Google SecOps 功能来支持以下用例:

  • 管理用户生命周期:根据安全提醒自动为用户启用、停用或重置密码,以降低风险。

  • 终止活跃会话:立即清除被盗账号的所有活跃 Okta 会话,以防止通过集成应用进行未经授权的访问。

  • 自动分配角色:动态地为用户分配或取消分配管理角色,以便在调查期间遵循最小权限原则。

  • 同步威胁信号:将身份威胁防护 (ITP) 信号发送到 Okta,以共享风险背景信息并触发自动安全响应。

  • 丰富身份背景信息:检索详细的用户个人资料和群组成员资格,让分析师能够深入了解账号活动。

准备工作

在 Google SecOps 中配置集成之前,请验证您的 Okta 环境是否满足以下要求:

  • 身份验证方法:确定贵组织是使用 API 令牌 (SSWS) 还是 OAuth 2.0 进行身份验证。

    • API 令牌:生成 SSWS 令牌。如需了解详情,请参阅 Okta API 令牌文档。
    • OAuth 2.0:注册服务应用以获取 Client ID、Key ID 和 Private Key。如需了解详情,请参阅 Okta OAuth 文档。
  • 账号权限:验证账号是否有足够的权限来执行用户管理和会话终止操作。

集成参数

Okta 集成需要以下参数:

参数 说明
Api Root

必填。

Okta 实例的基础网址,用于访问 API。

默认值为 https://{okta_domain}.com/。

Api Token

可选。

用于向 Okta 实例进行身份验证的 API 令牌 (SSWS)。

如果 Use Oauth Authentication 处于停用状态,则此参数是必需的。

Use Oauth Authentication

必填。

如果启用,集成将使用 OAuth 2.0 进行身份验证,而不是使用 API 令牌。

使用 OAuth 时,Client ID、Key ID 和 Private Key 是必填字段,Api Token 应留空。

如果停用,则 Api Token 为必填项。

Client ID

可选。

Okta OAuth 应用的唯一标识符。

如果启用了 Use Oauth Authentication,则此参数是必需的。

如果使用 API 令牌进行身份验证,请将此字段留空。

Key ID

可选。

与用于 OAuth 身份验证的私钥关联的公钥的 ID。

如果启用了 Use Oauth Authentication,则此参数是必需的。

如果使用 API 令牌进行身份验证,请将此字段留空。

Private Key

可选。

用于 OAuth 身份验证的 PEM 格式私钥。

如果启用了 Use Oauth Authentication,则此参数是必需的。

如果使用 API 令牌进行身份验证,请将此字段留空。

Verify SSL

可选。

如果选中此选项,集成会在连接到 Okta 服务器时验证 SSL 证书。

默认处于启用状态。

如需了解如何在 Google SecOps 中配置集成,请参阅配置集成。

如有需要,您可以在后续阶段进行更改。配置集成实例后,您可以在 playbook 中使用该实例。如需详细了解如何配置和支持多个实例,请参阅支持多个实例。

操作

如需详细了解操作,请参阅 在工作桌上响应待处理的操作和在案例中运行手动操作。

添加组

添加群组。

参数

使用场景

不适用

运行时间

此操作会在所有实体上运行。

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化

不适用

数据分析

不适用

分配角色

为用户分配角色。

参数

参数名称 类型 默认值 说明
用户 ID 字符串 不适用 Okta 中的用户 ID。
角色类型 字符串 不适用 要分配给用户的角色类型。
同时在瞄准镜上运行 复选框 勾选 是否同时对实体和输入运行。

使用场景

不适用

运行时间

此操作将在以下实体上运行:

  • 用户
  • 主机名

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化
扩充项字段名称 逻辑 - 适用场景
角色 如果存在于 JSON 结果中,则返回
数据分析

不适用

清除 Okta 用户会话

使用清除 Okta 用户会话操作,在所有设备和集成应用中终止特定用户的所有活跃 Okta 会话。

此操作在 Google SecOps Username 实体上运行。

操作输入

清除 Okta 用户会话操作需要以下参数:

参数 说明
User IDs Or Logins

可选。

以英文逗号分隔的 Okta 用户 ID 或登录标识符列表。

Also Run On Scope

可选。

如果选中此选项,该操作会撤消实体范围内标识的所有用户以及 User IDs Or Logins 中明确列出的用户的活跃身份提供方 (IdP) 会话。

操作输出

清除 Okta 用户会话操作会提供以下输出:

操作输出类型 可用性
案例墙附件 不可用
案例墙链接 不可用
案例墙表格 不可用
丰富化表 不可用
JSON 结果 不可用
输出消息 可用
脚本结果 可用
输出消息

清除 Okta 用户会话操作可能会返回以下输出消息:

输出消息 消息说明

Successfully cleared sessions for the following users: ENTITY_IDS.

The sessions failed to clear for the following user in Okta: ENTITY_ID.

No users were found to clear sessions.

操作成功。
Error executing action "Clear Okta User Session". Reason: ERROR_REASON

操作失败。

请检查与服务器的连接、输入参数或凭证。

脚本结果

下表列出了使用清除 Okta 用户会话操作时脚本结果输出的值:

脚本结果名称 值
is_success true 或 false

停用用户

停用指定用户。

参数

参数名称 类型 默认值 说明
用户 ID 或登录信息 字符串 不适用 Okta 中的用户 ID。
已停用 复选框 勾选 是停用还是仅暂停用户。
停用时发送电子邮件 复选框 勾选 是否在停用后发送电子邮件。
开镜时也奔跑 复选框 勾选 是否同时对实体和输入运行。

使用场景

不适用

运行时间

此操作将在以下实体上运行:

  • 用户
  • 主机名

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化
扩充项字段名称 逻辑 - 适用场景
is_deactivate 如果值为 True,则表示用户已被停用。否则:False
is_send_email_deactivate 如果值为 True,则表示用户已被停用。否则:False
数据分析

不适用

启用用户

启用指定用户。

参数

参数名称 类型 默认值 说明
用户 ID 或登录信息 字符串 不适用 Okta 中用户的 ID 或登录信息。
已激活 复选框 勾选 是激活用户还是仅取消暂停。
激活时发送电子邮件 复选框 勾选 是否在激活后发送电子邮件。
开镜时也奔跑 复选框 勾选 是否同时对实体和输入运行。

使用场景

不适用

运行时间

此操作将在以下实体上运行:

  • 用户
  • 主机名

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化
扩充项字段名称 逻辑 - 适用场景
is_reactivate 如果值为 True,则表示用户已启用。否则:False
is_send_email_reactivate 如果值为 True,则表示用户已被停用。否则:False
数据分析

不适用

获取群组

获取群组的相关信息。

参数

参数名称 类型 默认值 说明
群组 ID 或名称 字符串 不适用 Okta 中群组的 ID 或名称。
Is Id 复选框 勾选 该值是 ID 还是名称。

使用场景

不适用

运行时间

此操作会在所有实体上运行。

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化

不适用

数据分析

不适用

获取用户

获取用户信息

参数

参数名称 类型 默认值 说明
用户 ID 或登录信息 字符串 不适用 Okta 中用户的 ID 或登录信息(电子邮件地址或简短电子邮件名称),例如:test@gmail.com 或简称为“test”。
开镜时也奔跑 复选框 勾选 是否同时对实体和输入运行。

使用场景

不适用

运行时间

此操作将在以下实体上运行:

  • 用户
  • 主机名

操作结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
[
  {
    "status": "ACTIVE",
    "profile": {
      "mobilePhone": null,
      "firstName": "Test",
      "lastName": "User",
      "secondEmail": null,
      "login": "test.user@asd.com",
      "email": "test.user@asd.com"
    },
    "passwordChanged": "2022-07-11T06:11:25.000Z",
    "created": "2022-07-11T06:07:55.000Z",
    "activated": null,
    "lastUpdated": "2022-07-11T06:11:25.000Z",
    "_links": {
      "schema": {
        "href": "https://trial-0000.okta.com/api/v1/meta/schemas/user/osc1xxxxxxxx"
      },
      "suspend": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx/lifecycle/suspend",
        "method": "POST"
      },
      "forgotPassword": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx/credentials/forgot_password",
        "method": "POST"
      },
      "self": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx"
      },
      "expirePassword": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx/lifecycle/expire_password",
        "method": "POST"
      },
      "resetFactors": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx/lifecycle/reset_factors",
        "method": "POST"
      },
      "deactivate": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx/lifecycle/deactivate",
        "method": "POST"
      },
      "changePassword": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx/credentials/change_password",
        "method": "POST"
      },
      "changeRecoveryQuestion": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx/credentials/change_recovery_question",
        "method": "POST"
      },
      "type": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx"
      },
      "resetPassword": {
        "href": "https://trial-0000.okta.com/api/v1/users/00u1xxxxxxxx/lifecycle/reset_password",
        "method": "POST"
      }
    },
    "lastLogin": "2022-07-11T06:15:14.000Z",
    "credentials": {
      "password": {},
      "provider": {
        "type": "OKTA",
        "name": "OKTA"
      }
    },
    "type": {
      "id": "oty1xxxxxxxxxxxxx"
    },
    "id": "oty1xxxxxxxxxxxxx",
    "statusChanged": "2022-07-11T06:11:25.000Z"
  }
]
实体丰富化

不适用

数据分析

不适用

列出提供商

列出您组织中的身份提供方 (IdP)。

参数

参数名称 类型 默认值 说明
查询 字符串 不适用 搜索名称属性以查找匹配项。
类型 复选框 勾选 按类型过滤。
限制 字符串 20 要返回的结果数量上限。

使用场景

不适用

运行时间

此操作会在所有实体上运行。

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化

不适用

数据分析

不适用

列出角色

列出分配给用户的所有角色。

参数

用户 ID 字符串 不适用 Okta 中的用户 ID。
开镜时也奔跑 复选框 勾选 是否同时对实体和输入运行。

使用场景

不适用

运行时间

此操作将在以下实体上运行:

  • 用户
  • 主机名

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化

不适用

数据分析

不适用

列出用户群组

获取用户所属的群组。

参数

参数名称 类型 默认值 说明
用户 ID 或登录信息 字符串 不适用 Okta 中用户的 ID 或登录信息。
同时在瞄准镜上运行 复选框 勾选 是否同时对实体和输入运行。

使用场景

不适用

运行时间

此操作将在以下实体上运行:

  • 用户
  • 主机名

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化
扩充项字段名称 逻辑 - 适用场景
个人资料 如果存在于 JSON 结果中,则返回
name 如果存在于 JSON 结果中,则返回
数据分析

不适用

列出用户

获取用户列表。

参数

参数名称 类型 默认值 说明
查询 字符串 不适用 在名字、姓氏或邮箱中搜索匹配项。
过滤 字符串 不适用 针对部分房源的自定义搜索查询。
搜索 字符串 不适用 适用于大多数房源的自定义搜索查询。
限制 字符串 200 要返回的结果数量上限。

使用场景

不适用

运行时间

此操作会在所有实体上运行。

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化
扩充项字段名称 逻辑 - 适用场景
个人资料 如果存在于 JSON 结果中,则返回
name 如果存在于 JSON 结果中,则返回
数据分析

不适用

Ping

测试与 Okta 的连接。

参数

不适用

使用场景

不适用

运行时间

此操作会在所有实体上运行。

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化

不适用

数据分析

不适用

重置密码

生成可用于重置用户密码的一次性令牌。

参数

参数名称 类型 默认值 说明
用户 ID 或登录信息 字符串 不适用 Okta 中用户的 ID 或登录信息。
发送电子邮件 复选框 尚未核查 是为每位用户发送重设密码电子邮件,还是返回令牌。
开镜时也奔跑 复选框 尚未核查 是否同时对实体和输入运行。

使用场景

不适用

运行时间

此操作将在以下实体上运行:

  • 用户
  • 主机名

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化
扩充项字段名称 逻辑 - 适用场景
send_email 如果存在于 JSON 结果中,则返回
数据分析

不适用

设置密码

设置用户密码,而无需验证现有凭据。

参数

参数名称 类型 默认值 说明
用户 ID 或登录信息 字符串 不适用 Okta 中用户的 ID 或登录信息。
新密码 字符串 不适用 新密码。
添加 10 个随机字符 复选框 尚未核查 是否为每个用户密码添加额外字符。
开镜时也奔跑 复选框 尚未核查 是否同时对实体和输入运行。

使用场景

不适用

运行时间

此操作将在以下实体上运行:

  • 用户
  • 主机名

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化
扩充项字段名称 逻辑 - 适用场景
set_password 如果存在于 JSON 结果中,则返回
数据分析

不适用

发送 ITP 信号

使用共享信号框架 (SSF) 将 Identity Threat Protection (ITP) 信号分发给相关使用者。

参数

参数名称 类型 默认值 说明
密钥 ID 字符串 不适用 用于验证私钥签名的公钥的 ID。
私钥字符串 密码 不适用 用于为信号签名的私钥。

密钥以字符串格式提供,并包含“BEGIN”和“END”语句。

用户电子邮件 邮寄地址 不适用 受影响用户的邮箱。
时间戳 时间戳 不适用 信号发生的时间戳。

时间戳格式为 ISO 8601。

原因 字符串 不适用 简要说明生成信号的原因。
严重级别 字符串或 DDL 不适用 信号的严重级别。
颁发者网址 网址 不适用 创建信号的来源系统。

操作执行结果

JSON 结果
{
   "status":200,
   "payload":{
      "iss":"https://www.google.com/",
      "jti":"3c5fbf0c-3977-11f0-a195-7e498c84a3dd",
      "iat":1748184472,
      "aud":"https://<your-okta-domain>.oktapreview.com",
      "events":{
         "https://schemas.okta.com/secevent/okta/event-type/user-risk-change":{
            "subject":{
               "user":{
                  "format":"email",
                  "email":"user@domain.net"
               }
            },
            "current_level":"medium",
            "previous_level":"low",
            "reason_admin":{
               "en":"BadNavigationEvent"
            },
            "event_timestamp":1742199770057
         }
      }
   }
}
输出消息
输出消息 消息说明

Successfully sent the ITP signal to Okta.

Context value was not found for the provided context key CONTEXT_KEY and connector identifier CONNECTOR_IDENTIFIER.

Action can't return the Case Wall table as the context values are too big.

操作成功。
Failed to send the ITP signal to Okta. Error is {0}".format(exception.stacktrace)

操作失败。

请检查与服务器的连接、输入参数或凭据。

脚本结果
脚本结果名称 值选项
is_success True 或 False

取消分配角色

取消为用户分配的角色。

参数

参数名称 类型 默认值 说明
用户 ID 字符串 不适用 Okta 中的用户 ID。
角色 ID 或名称 字符串 不适用 Okta 中角色的 ID 或名称。
同时在瞄准镜上运行 复选框 尚未核查 是否同时对实体和输入运行。

使用场景

不适用

运行时间

此操作将在以下实体上运行:

  • 用户
  • 主机名

操作执行结果

脚本结果
脚本结果名称 值选项 示例
ScriptResult 不适用 不适用
JSON 结果
N/A
实体丰富化
扩充项字段名称 逻辑 - 适用场景
unassign_role 如果存在于 JSON 结果中,则返回
数据分析

不适用

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。