部署剧本规则并通过事件触发

应用场景

安全云脑(SecMaster)是华为云原生的新一代安全运营中心,集华为云多年安全经验,基于云原生安全,提供云上资产管理、安全态势管理、安全信息和事件管理、安全编排与自动响应等能力。通过安全云脑的安全剧本功能,您可以创建自定义的安全响应流程,实现安全事件的自动识别、分析和处置。

本最佳实践将介绍如何使用Terraform自动化部署一个安全剧本规则并通过事件触发,包括工作空间查询、剧本创建、版本管理、规则配置、动作配置、审批和启用等步骤。通过事件触发机制,当满足规则条件的安全事件发生时,系统将自动执行相应的安全动作,实现安全事件的自动化响应。

相关资源/数据源

本最佳实践涉及以下主要资源和数据源:

数据源

资源

资源/数据源依赖关系

操作步骤

1. 脚本准备

在指定工作空间中准备好用于编写当前最佳实践脚本的TF文件(如main.tf),确保其中(也可以是其他同级目录下的TF文件)包含部署资源所需的provider版本声明和华为云鉴权信息。 配置介绍参考部署华为云资源前的准备工作一文中的介绍。

2. 通过数据源查询工作空间信息

在TF文件(如main.tf)中添加以下脚本以告知Terraform进行一次数据源查询,其查询结果用于创建安全剧本资源:

参数说明

  • count:数据源的查询数,用于控制是否查询工作空间列表,仅当 var.workspace_id 为空时查询工作空间列表

  • name:工作空间的名称,通过引用输入变量 workspace_name 进行赋值

3. 创建安全剧本资源

在TF文件中添加以下脚本以告知Terraform创建安全剧本资源:

参数说明

  • workspace_id:安全剧本所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值

  • name:安全剧本的名称,通过引用输入变量 playbook_name 进行赋值

  • lifecycle:生命周期配置块,用于控制资源的生命周期行为

    • ignore_changes:指定在后续应用中要忽略的属性变更,设置为忽略 workspace_id 的变更

4. 通过数据源查询数据类信息

在TF文件中添加以下脚本以告知Terraform查询数据类信息:

参数说明

  • workspace_id:数据类所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值

5. 创建安全剧本版本资源

在TF文件中添加以下脚本以告知Terraform创建安全剧本版本资源:

参数说明

  • workspace_id:安全剧本版本所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值

  • playbook_id:安全剧本版本所属的剧本ID,引用前面创建的安全剧本资源的ID

  • dataclass_id:安全剧本版本关联的数据类ID,根据数据类列表查询数据源的返回结果进行赋值

  • rule_enable:是否启用规则,设置为true表示启用规则功能

  • trigger_type:触发类型,设置为"EVENT"表示通过事件触发

  • dataobject_create:是否创建数据对象,设置为true表示创建数据对象

  • action_strategy:动作策略,设置为"ASYNC"表示异步执行动作

  • lifecycle:生命周期配置块,用于控制资源的生命周期行为

    • ignore_changes:指定在后续应用中要忽略的属性变更,设置为忽略 workspace_iddataclass_id 的变更

6. 创建安全剧本规则资源

在TF文件中添加以下脚本以告知Terraform创建安全剧本规则资源:

参数说明

  • workspace_id:安全剧本规则所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值

  • version_id:安全剧本规则所属的版本ID,引用前面创建的安全剧本版本资源的ID

  • expression_type:规则的表达式类型,通过引用输入变量 rule_expression_type 进行赋值,默认为"custom"表示自定义表达式

  • conditions:条件配置块(动态块),根据输入变量 rule_conditions 动态创建

    • name:条件的名称,通过引用输入变量中的条件配置进行赋值

    • detail:条件的详细信息,通过引用输入变量中的条件配置进行赋值

    • data:条件的数据,通过引用输入变量中的条件配置进行赋值

  • logics:条件的逻辑组合,使用AND逻辑将所有条件组合在一起

  • lifecycle:生命周期配置块,用于控制资源的生命周期行为

    • ignore_changes:指定在后续应用中要忽略的属性变更,设置为忽略 workspace_id 的变更

注意:rule_conditions 的长度必须大于或等于2,且条件之间使用AND逻辑进行组合。

7. 通过数据源查询工作流信息

在TF文件中添加以下脚本以告知Terraform查询工作流信息:

参数说明

  • workspace_id:工作流所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值

  • data_class_id:工作流关联的数据类ID,根据数据类列表查询数据源的返回结果进行赋值

8. 创建安全剧本动作资源

在TF文件中添加以下脚本以告知Terraform创建安全剧本动作资源:

参数说明

  • workspace_id:安全剧本动作所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值

  • version_id:安全剧本动作所属的版本ID,引用前面创建的安全剧本版本资源的ID

  • action_id:动作的ID,根据工作流列表查询数据源的返回结果进行赋值

  • name:动作的名称,根据工作流列表查询数据源的返回结果进行赋值

  • lifecycle:生命周期配置块,用于控制资源的生命周期行为

    • ignore_changes:指定在后续应用中要忽略的属性变更,设置为忽略 workspace_idaction_idname 的变更

  • depends_on:显式依赖关系,指定安全剧本动作资源依赖于安全剧本规则资源,确保规则先于动作创建

9. 创建安全剧本版本动作资源

在TF文件中添加以下脚本以告知Terraform创建安全剧本版本动作资源:

参数说明

  • workspace_id:安全剧本版本动作所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值

  • version_id:安全剧本版本动作所属的版本ID,引用前面创建的安全剧本版本资源的ID

  • status:版本动作的状态,设置为"APPROVING"表示待审批状态

  • depends_on:显式依赖关系,指定安全剧本版本动作资源依赖于安全剧本动作资源,确保动作先于版本动作创建

  • lifecycle:生命周期配置块,用于控制资源的生命周期行为

    • ignore_changes:指定在后续应用中要忽略的属性变更,设置为忽略 statusenabled 的变更

10. 创建安全剧本审批资源

在TF文件中添加以下脚本以告知Terraform创建安全剧本审批资源:

参数说明

  • workspace_id:安全剧本审批所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值

  • version_id:安全剧本审批所属的版本ID,引用前面创建的安全剧本版本资源的ID

  • result:审批结果,设置为"PASS"表示审批通过

  • content:审批内容,通过引用输入变量 approval_content 进行赋值,默认为"Approved for production use"

  • lifecycle:生命周期配置块,用于控制资源的生命周期行为

    • ignore_changes:指定在后续应用中要忽略的属性变更,设置为忽略 workspace_id 的变更

  • depends_on:显式依赖关系,指定安全剧本审批资源依赖于安全剧本版本动作资源,确保版本动作先于审批创建

11. 创建安全剧本启用资源

在TF文件中添加以下脚本以告知Terraform创建安全剧本启用资源:

参数说明

  • workspace_id:安全剧本启用所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值

  • playbook_id:要启用的安全剧本ID,引用前面创建的安全剧本资源的ID

  • playbook_name:要启用的安全剧本名称,引用前面创建的安全剧本资源的名称

  • active_version_id:要激活的版本ID,引用前面创建的安全剧本审批资源的ID

  • lifecycle:生命周期配置块,用于控制资源的生命周期行为

    • ignore_changes:指定在后续应用中要忽略的属性变更,设置为忽略 workspace_id 的变更

12. 预设资源部署所需的入参(可选)

本实践中,部分资源、数据源使用了输入变量对配置内容进行赋值,这些输入参数在后续部署时需要手工输入。 同时,Terraform提供了通过tfvars文件预设这些配置的方法,可以避免每次执行时重复输入。

在工作目录下创建terraform.tfvars文件,示例内容如下:

使用方法

  1. 将上述内容保存为工作目录下的terraform.tfvars文件(该文件名可使用户在执行terraform命令时自动导入该tfvars文件中的内容,其他命名则需要在tfvars前补充.auto定义,如variables.auto.tfvars

  2. 根据实际需要修改参数值

  3. 执行terraform planterraform apply时,Terraform会自动读取该文件中的变量值

除了使用terraform.tfvars文件外,还可以通过以下方式设置变量值:

  1. 命令行参数:terraform apply -var="workspace_name=my-workspace" -var="playbook_name=my-playbook"

  2. 环境变量:export TF_VAR_workspace_name=my-workspace

  3. 自定义命名的变量文件:terraform apply -var-file="custom.tfvars"

注意:如果同一个变量通过多种方式进行设置,Terraform会按照以下优先级使用变量值:命令行参数 > 变量文件 > 环境变量 > 默认值。

13. 初始化并应用Terraform配置

完成以上脚本配置后,执行以下步骤来创建资源:

  1. 运行 terraform init 初始化环境

  2. 运行 terraform plan 查看资源创建计划

  3. 确认资源计划无误后,运行 terraform apply 开始创建安全剧本规则并通过事件触发

  4. 运行 terraform show 查看已创建的安全剧本规则详情

参考信息

Last updated