部署剧本规则并通过事件触发
应用场景
安全云脑(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_id和dataclass_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_id、action_id和name的变更
depends_on:显式依赖关系,指定安全剧本动作资源依赖于安全剧本规则资源,确保规则先于动作创建
9. 创建安全剧本版本动作资源
在TF文件中添加以下脚本以告知Terraform创建安全剧本版本动作资源:
参数说明:
workspace_id:安全剧本版本动作所属的工作空间ID,如果指定了工作空间ID则使用该值,否则根据工作空间列表查询数据源的返回结果进行赋值
version_id:安全剧本版本动作所属的版本ID,引用前面创建的安全剧本版本资源的ID
status:版本动作的状态,设置为"APPROVING"表示待审批状态
depends_on:显式依赖关系,指定安全剧本版本动作资源依赖于安全剧本动作资源,确保动作先于版本动作创建
lifecycle:生命周期配置块,用于控制资源的生命周期行为
ignore_changes:指定在后续应用中要忽略的属性变更,设置为忽略
status和enabled的变更
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文件,示例内容如下:
使用方法:
将上述内容保存为工作目录下的
terraform.tfvars文件(该文件名可使用户在执行terraform命令时自动导入该tfvars文件中的内容,其他命名则需要在tfvars前补充.auto定义,如variables.auto.tfvars)根据实际需要修改参数值
执行
terraform plan或terraform apply时,Terraform会自动读取该文件中的变量值
除了使用terraform.tfvars文件外,还可以通过以下方式设置变量值:
命令行参数:
terraform apply -var="workspace_name=my-workspace" -var="playbook_name=my-playbook"环境变量:
export TF_VAR_workspace_name=my-workspace自定义命名的变量文件:
terraform apply -var-file="custom.tfvars"
注意:如果同一个变量通过多种方式进行设置,Terraform会按照以下优先级使用变量值:命令行参数 > 变量文件 > 环境变量 > 默认值。
13. 初始化并应用Terraform配置
完成以上脚本配置后,执行以下步骤来创建资源:
运行
terraform init初始化环境运行
terraform plan查看资源创建计划确认资源计划无误后,运行
terraform apply开始创建安全剧本规则并通过事件触发运行
terraform show查看已创建的安全剧本规则详情
参考信息
Last updated