将 Cloud Identity 与 Google SecOps 集成
本文档介绍了如何将 Cloud Identity 与 Google Security Operations 集成。
使用场景
Cloud Identity 集成使用 Google SecOps 功能来支持以下使用情形:
- 管理访问权限控制:直接从调查剧本创建和更新 IAM 配置。
- 审核政策定义:列出有关可用政策的信息,以跟踪访问权限变更。
- 维护检测器列表属性:将实体和指示器附加到特定的检测器网址列表以进行监控。
准备工作
在 Google SecOps 平台中配置 Cloud Identity 集成之前,请验证您是否已按照以下步骤配置环境:
- 创建服务账号。
- 向您的服务账号进行全网域授权
- 为项目启用所需的 API。
- 选择并配置以下身份验证方法之一:
- 方法 1:JSON 密钥:此方法依赖于静态的长期密钥文件。仅当您的环境中没有 Workload Identity 时,才使用此方法。
- 方法 2:Workload Identity(推荐):此方法使用短期有效的临时访问令牌(通过服务账号模拟实现),无需存储任何密钥。
创建服务账号
如需为集成创建服务账号,请完成以下步骤:
在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号,然后选择您的项目。
点击创建服务账号。
提供名称和说明,然后点击完成以创建账号。
向您的服务账号进行全网域授权
- 在网域的 Google 管理控制台中,依次前往 主菜单 > 安全性 > 访问权限和数据控件 > API 控件。
- 在全网域授权窗格中,选择管理全网域授权。
- 点击新增。
- 在客户端 ID 字段中,输入从创建服务账号部分获得的客户端 ID。
在 OAuth 范围字段中,输入以下以英文逗号分隔的列表,其中包含您的应用所需的范围:
https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/cloud-identity.policies, https://www.googleapis.com/auth/admin.directory.orgunit点击授权。
服务账号现已获得授权,可以使用指定的范围访问您网域中的数据。
为项目启用所需的 API
在 Google Cloud 控制台中,前往 API 和服务。
点击启用 API 和服务。
为您的项目搜索并启用以下 API:
- Admin SDK API (
admin.googleapis.com) - Cloud Identity API (
cloudidentity.googleapis.com)
- Admin SDK API (
配置 JSON 密钥
您可以使用静态 JSON 密钥文件或工作负载身份联合对集成进行身份验证。为了最大限度地提高环境安全性,请使用 Workload Identity 方法。仅当您的基础架构不支持 Workload Identity 时,才使用 JSON 密钥方法,因为静态密钥需要手动轮换,并且会增加凭据泄露风险。
如需生成对集成进行身份验证所需的 JSON 密钥文件,请完成以下步骤:
在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号,然后选择您创建的服务账号。
前往密钥标签页。
点击添加密钥。
选择创建新密钥。
对于密钥类型,选择 JSON,然后点击创建。JSON 文件会下载到您的计算机。
复制此文件的全部内容,并在集成配置期间将其粘贴到
User's Service Account JSON中。
配置 Cloud Identity 权限
请按照以下步骤定义集成管理组织资源所需的管理权限:
- 在 Google 管理控制台中,依次点击账号 > 管理员角色。
- 点击创建新角色。
- 为新的自定义角色提供名称,然后点击继续。
- 在选择权限页面上,前往 Admin API 权限部分。
- 在 Admin API 权限下,选择以下权限:
Organization UnitsUsersGroups
- 点击继续。
- 如需创建新的自定义角色,请点击创建角色。
将自定义角色分配给用户
请按照以下步骤将角色分配给用户账号,以授权集成代表您执行操作:
- 如需创建新用户,请前往目录 > 用户页面。
- 添加与服务账号关联的新用户。
- 打开新创建的用户的设置。系统会打开用户账号标签页。
- 点击管理员角色和权限。
- 依次点击修改 修改。
- 选择您创建的自定义角色。
- 对于所选角色,将切换开关切换为已分配。
配置 Workload Identity 凭据
选择此方法或 JSON 密钥方法来验证集成。 Workload Identity 是推荐的更安全的方法,因为它使用短期有效的临时访问令牌(通过服务账号模拟实现),可最大限度地降低长期有效的密钥凭据泄露风险。
确定唯一实例身份
如需使用 Workload Identity,您必须向 Google SecOps 实例授予模拟服务账号的权限。此步骤可让实例安全地访问 Google Cloud 资源。
- 在 Google SecOps 中,前往内容中心 > 响应集成。
- 选择您要配置的集成,然后在
Workload Identity Email字段中输入您的服务账号电子邮件地址。 - 在
Delegated Email字段中输入您希望集成模拟的电子邮件地址。 - 依次点击保存 > 测试。测试预计会失败。
点击测试右侧的close_small图标,然后搜索以
gke-init-python@...或soar-python@...开头的身份电子邮件地址所对应的错误消息。复制此唯一电子邮件地址,并在集成配置期间将其粘贴到
Workload Identity Email中。
在 Google Cloud 中授权实例身份
检索到 Google SecOps 实例的唯一身份后,您必须授权该实例访问您的 Google Cloud 资源。此步骤可启用服务账号模拟,使平台能够生成短期有效令牌并代表您执行操作,而无需静态密钥。
- 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
- 选择目标服务账号,然后依次前往权限 > 授予访问权限。
- 将唯一电子邮件地址粘贴到新的主账号字段中。
- 分配 Service Account Token Creator 角色 (
roles/iam.serviceAccountTokenCreator)。
集成参数
Cloud Identity 集成需要以下参数:
| 参数 | 说明 |
|---|---|
Service Account JSON File Content |
可选。 服务账号密钥 JSON 文件的内容。 您可以配置此参数,也可以配置 Workload Identity 电子邮件地址。如需使用此方法,请粘贴在创建服务账号期间下载的密钥文件中的整个 JSON 字符串。 |
Workload Identity Email |
可选。 您的服务账号的客户端电子邮件地址。 您可以配置此参数,也可以配置服务账号 JSON 文件内容。 如需使用此方法进行服务账号模拟,您必须向 Google SecOps 服务账号授予 Service Account Token Creator 角色。 |
Delegated Email |
必填。 集成用于执行操作的电子邮件地址。 确保此账号在您的环境中拥有适当的委托权限,以便执行所需的集成任务。 |
Verify SSL |
可选。 如果选中此选项,集成会在连接到 Cloud Identity 服务器时验证 SSL 证书。 默认处于启用状态。 |
如需了解如何在 Google SecOps 中配置集成,请参阅配置集成。
如有需要,您可以在稍后阶段进行更改。配置集成实例后,您可以在 playbook 中使用该实例。如需详细了解如何配置和支持多个实例,请参阅支持多个实例。
操作
如需详细了解操作,请参阅 在工作台页面中处理待处理的操作和执行人工处置措施。
Ping
使用 Ping 操作测试与 Cloud Identity 的连接。
此操作不适用于 Google SecOps 实体。
操作输入
此操作不需要任何输入参数。
操作输出
Ping 操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 不可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
输出消息
Ping 操作可以返回以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Failed to connect to the Cloud Identity server! Error is ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表列出了使用 Ping 操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
true 或 false |
将实体添加到检测器网址列表
使用 Add Entity To Detector 网址 List 操作将实体添加到 Cloud Identity 政策检测列表。
此操作可在以下 Google SecOps 实体上运行:
- 网址
- 网域
操作输入
将实体添加到检测器网址列表操作需要以下参数:
| 参数 | 说明 |
|---|---|
Detector Policy ID |
必填。 要更新的检测器政策的唯一标识符。 |
URL |
可选。 要添加到检测器列表中的网址的逗号分隔列表。 |
Domain |
可选。 要添加到检测器列表中的域名(以逗号分隔列表形式)。 |
操作输出
将实体添加到检测器网址列表操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
JSON 结果
以下示例展示了使用将实体添加到检测器网址列表操作时收到的 JSON 结果输出:
{
"type": "ADMIN",
"customer": "customers/<CUSTOMER_ID>",
"policyQuery": {
"query": "entity.org_units.exists(org_unit, org_unit.org_unit_id == orgUnitId('<ORG_UNIT_ID>'))",
"orgUnit": "orgUnits/<ORG_UNIT_ID>"
},
"setting": {
"type": "settings/detector.url_list",
"value": {
"displayName": "test_url_list_detector",
"description": "test_url_list_detector desc",
"urlList": {
"urls": [
"[http://example.com](http://example.com)",
"example.org",
"bad_entity.com"
]
}
}
}
}
输出消息
将实体添加到检测器网址列表操作可以返回以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "Add Entity To Detector URL List". Reason: ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表列出了使用将实体添加到检测器网址列表操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
true 或 false |
创建政策
使用 Create Policy 操作在 Cloud Identity 中创建新的政策条目。
此操作不适用于 Google SecOps 实体。
操作输入
创建政策操作需要以下参数:
| 参数 | 说明 |
|---|---|
Policy Entry |
必填。 表示要添加的政策条目配置的 JSON 对象。 |
政策配置示例
以下示例配置演示了如何构建 Policy Entry 参数:
示例 1:网址列表检测器
{
"type": "ADMIN",
"customer": "customers/<CUSTOMER_ID>",
"policyQuery": {
"orgUnit": "orgUnits/<ORG_UNIT_ID>",
"sortOrder": 1
},
"setting": {
"type": "settings/detector.url_list",
"value": {
"displayName": "BlockUrlDetector",
"description": "Blocked urls for security reasons",
"urlList": {
"urls": [
"www.medium.com",
"medium.com",
"wikipedia.org"
]
}
}
}
}
示例 2:DLP 规则
{
"type": "ADMIN",
"customer": "customers/<CUSTOMER_ID>",
"policyQuery": {
"query": "entity.org_units.exists(org_unit, org_unit.org_unit_id == orgUnitId('<ORG_UNIT_ID>'))",
"orgUnit": "orgUnits/<ORG_UNIT_ID>",
"sortOrder": 1
},
"setting": {
"type": "settings/rule.dlp",
"value": {
"display_name": "TestRule",
"description": "GoogleSecOps URL Blocklist Rule. Keeps state of blocked URLs. Manual modification is not advised",
"triggers": [
"google.workspace.chrome.url.v1.navigation"
],
"condition": {
"contentCondition": "url.matches_url_list('policies/<DETECTOR_POLICY_ID>')"
},
"action": {
"chromeAction": {
"blockContent": {
"actionParams": {
"customEndUserMessage": {
"unsafeHtmlMessageBody": "(EQ)🚫 BlockedAccess denied."
}
}
}
}
},
"state": "ACTIVE"
}
}
}
操作输出
创建政策操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
JSON 结果
以下示例展示了使用创建政策操作时收到的 JSON 结果输出:
{
"type": "ADMIN",
"customer": "customers/<CUSTOMER_ID>",
"policyQuery": {
"query": "entity.org_units.exists(org_unit, org_unit.org_unit_id == orgUnitId('<ORG_UNIT_ID>'))",
"orgUnit": "orgUnits/<ORG_UNIT_ID>"
},
"setting": {
"type": "settings/rule.dlp",
"value": {
"display_name": "test_create_rule",
"triggers": [
"google.workspace.chrome.file.v1.download"
],
"state": "ACTIVE",
"action": {
"chromeAction": {
"warnUser": {}
}
}
}
}
}
输出消息
创建政策操作可能会返回以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "Create Policy". Reason: ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表列出了使用 Create Policy 操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
true 或 false |
列出政策
使用 List Policies 操作从 Cloud Identity 中检索现有政策的列表。
此操作不适用于 Google SecOps 实体。
操作输入
列出政策操作需要以下参数:
| 参数 | 说明 |
|---|---|
Organization Unit Name |
必填。 要列出政策的组织部门的名称。 |
Policy Type Filter |
可选。 用于过滤列表的政策类型。可能的值: 默认值为 |
Settings Type Filter |
可选。 用于按政策设置类型过滤政策的正则表达式模式。此过滤条件直接应用于 API 请求。 |
Settings Display Name Filter |
可选。 用于过滤政策设置的显示名称的英文逗号分隔列表。 |
Max Results To Return |
可选。 操作运行返回的结果数上限。默认值为 |
操作输出
列出政策操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
JSON 结果
以下示例展示了使用列出政策操作时收到的 JSON 结果输出:
[
{
"name": "policies/123",
"customer": "customers/123",
"type": "ADMIN",
"policy_query": {
"query": "entity.org_units.exists(org_unit, org_unit.org_unit_id == orgUnitId('12345'))",
"orgUnit": "orgUnits/12345",
"sortOrder": 1
},
"setting": {
"type": "settings/rule.dlp",
"value": {
"display_name": "Test DLP Rule"
}
}
}
]
输出消息
列出政策操作可以返回以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
|
操作成功。 |
Error executing action "List Policies". Reason: ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表列出了使用 List Policies 操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
true 或 false |