本文介绍如何使用Terraform调用接口配置日志审计服务。

前提条件

已安装和配置Terraform。具体操作,请参见在Cloud Shell中使用Terraform在本地安装和配置Terraform

背景信息

Terraform是一种开源工具,用于安全高效地预览、配置和管理云基础架构和资源。Terraform的命令行接口(CLI)提供了一种简单机制,用于将配置文件部署到阿里云或其他任意支持的云上,并对其进行版本控制。

阿里云是中国第一家与Terraform集成的云厂商。目前terraform-provider-alicloud已经提供了超过163个Resource和113个Data Source,覆盖计算、存储、网络、CDN、容器服务、中间件和数据库等阿里云产品,满足大量客户的自动化上云需求。

使用Terraform的优势

  • 支持同时部署基础结构至多个云

    Terraform适用于多云方案,将类似的基础结构部署到阿里云、其他云厂商或者本地数据中心。开发人员能够使用相同的工具和相似的配置文件同时管理不同云厂商的资源。

  • 基础结构自动化管理

    您可以使用Terraform创建配置文件模板,用于重复、可预测的方式定义、预配和配置ECS资源,减少因人为因素导致的部署和管理错误。您可以多次部署同一模板,创建相同的开发、测试和生产环境。

  • 基础架构即代码(Infrastructure as Code)

    Terraform支持通过代码来管理、维护资源,允许保存基础设施状态,从而使您能够跟踪对系统(基础设施即代码)中不同组件所做的更改,并与其他人共享这些配置。

  • 开发成本降低

    可通过按需创建开发和部署环境降低开发成本。并且,您可以在系统更改之前进行开发成本评估。

步骤一:配置身份信息以及日志审计服务的中心化地域

在环境变量中配置用户身份信息以及日志审计服务的中心Project所在地域。

export ALICLOUD_ACCESS_KEY="AccessKey ID"
export ALICLOUD_SECRET_KEY="AccessKey Secret"
export ALICLOUD_REGION="cn-huhehaote"
参数 说明
ALICLOUD_ACCESS_KEY 阿里云访问密钥AccessKey ID。更多信息,请参见访问密钥
ALICLOUD_SECRET_KEY 阿里云访问密钥AccessKey Secret。更多信息,请参见访问密钥
ALICLOUD_REGION 日志审计服务的中心Project所在地域。目前支持如下地域:
  • 中国:华北1(青岛)、华北2(北京)、华北5(呼和浩特)、华东1(杭州)、华东2(上海)、华南1(深圳)、中国(香港)
  • 海外:新加坡、日本(东京)、德国(法兰克福)、印度尼西亚(雅加达)

步骤二:RAM授权

对于中心账号,如果不存在AliyunServiceRoleForSLSAudit关联角色,则需先创建该关联角色。具体操作,请参见首次配置

如果需要通过自定义鉴权模式配置其他成员账号,则在授权中所涉及的权限策略信息请参见自定义授权日志采集与同步

步骤三:配置日志审计服务

  1. 创建一个Terraform工作目录(例如名为sls的工作目录),并在该目录下创建一个名为terraform.tf的文件。
  2. terraform.tf文件中,添加如下内容。
    resource "alicloud_log_audit" "example" {
      display_name = "tf-audit-test"
      aliuid       = "1379186349****"
    }

    相关参数说明如下:

    参数 说明
    example Resource名称。自定义配置。
    display_name 采集配置名称。自定义配置。
    aliuid 阿里云账号ID。
  3. 在您所创建的工作目录sls下,执行如下命令,初始化terraform工作目录。
    terraform init
    如果返回结果中提示Terraform has been successfully initialized!,表示初始化成功。初始化
  4. 编辑terraform.tf文件,配置日志审计服务相关参数。

    配置示例如下。Terraform中日志审计采集配置的完整参数说明,请参见Terraform-Aliyun Log Audit

    • 单账号采集
      resource "alicloud_log_audit" "example" {
        display_name = "tf-audit-test"
        aliuid       = "1379186349****"
        variable_map = {
          "actiontrail_enabled" = "true",
          "actiontrail_ttl" = "180"
        }
      }
    • 多账号采集

      您可以通过自定义鉴权管理模式(中心账号为普通账号)或资源目录管理模式(中心账号必须为管理账号或者委派管理员账号)配置多账号采集。更多信息,请参见配置多账号采集

      • 自定义鉴权管理模式
        resource "alicloud_log_audit" "example" {
          display_name = "tf-audit-test"
          aliuid     = "1379186349****"
          variable_map = {
            "actiontrail_enabled" = "true",
            "actiontrail_ttl" = "180"
          }
          multi_account = ["1257918632****", "1324567349****"]
        
        }
      • 资源目录管理模式(自定义方式)
        resource "alicloud_log_audit" "example" {
          display_name = "tf-audit-test"
          aliuid    = "1379186349****"
          variable_map = {
            "actiontrail_enabled" = "true",
            "actiontrail_ttl" = "180"
          }
          multi_account = ["1257918632****", "1324567349****"]
        resource_directory_type="custom"
        }
      • 资源目录管理模式(全员方式)
        resource "alicloud_log_audit" "example" {
          display_name = "tf-audit-test"
          aliuid       = "1379186349****"
          variable_map = {
            "actiontrail_enabled" = "true",
            "actiontrail_ttl" = "180"
          }
        resource_directory_type="all"
        }

    重要参数说明如下表所示。

    参数 说明
    multi_account 采用资源目录管理的自定义模式或自定义鉴权管理模式配置多账号采集时,需配置multi_account参数。
    说明 自定义鉴权管理模式配置复杂,推荐您使用资源目录管理模式进行多账号配置。
    • 自定义鉴权管理模式(resource_directory_type参数不存在):配置multi_account为阿里云账号ID。
    • 资源目录管理的自定义模式(resource_directory_type=custom):配置multi_account为资源目录中的成员。
    resource_directory_type 采用资源目录管理模式配置多账号采集时,需配置resource_directory_type参数。取值:
    • all:采用资源目录管理的全员模式。
    • custom:采用资源目录管理的自定义模式。
    说明 如果是采用自定义鉴权管理模式,无需添加resource_directory_type参数。
    variable_map 采集对象、是否采集以及存储时间等相关设置。variable_map参数列表,请参见附录:variable_map参数列表
  5. 使terraform.tf文件中的采集配置生效。
    1. 执行如下命令。
      terraform apply
    2. 输入yes

      如果返回结果中提示Apply complete!,表示应用采集配置成功,日志审计服务将按照采集配置进行日志采集和存储。

      配置生效

相关操作

您还可以通过Terraform完成如下相关操作。

  • 导入已有采集配置。
    terraform import alicloud_log_audit.example tf-audit-test

    其中,exampletf-audit-test,请根据实际情况替换。

    导入配置

    执行完毕后,您可以查看terraform工作目录下的terraform.tfstate文件内容。terraform.tfstate文件内容即为导入的采集配置。

    注意
    • 如果您想要将导入的采集配置迁移到terraform.tf文件中,需要手动拷贝,并对格式做适当调整,满足terraform.tf文件的格式要求。
    • 如果您已经在当前的terraform工作目录执行过terrraform apply或者terraform import命令,则此时再次执行terraform import命令会失败。您需要删除当前目录下的terraform.tfstate文件后再重新执行terraform import命令。
  • 查看当前采集配置。
    terraform show
    查看审计配置
  • 查看当前terraform工作目录下的terraform.tf文件与已生效的采集配置的差异。
    terraform plan
    配置文件

示例

通过Terraform配置日志审计服务的采集策略时,需特别注意特殊字符转义和多行策略配置。例如您只采集标签变量env完全匹配test的VPC实例,而不采集其他VPC实例,可以将采集策略设置为如下内容。
accept tag.env == "test"
drop "*"
因为采集策略为多行语句且存在特殊符号,例如双引号(")。在日志服务控制台中的日志审计服务中配置采集策略时,控制台会自动进行转义,而通过Terrafrom配置时,需要您手动进行转义及换行操作。您可以通过如下两种方式完成配置。
  • 通过EOF标识。更多信息,请参见多行配置
    variable vpcflow_policy {
      type        = string
      default     = <<EOF
    accept tag.env == \"test\"
    drop \"*\"
    EOF
    }
    
    resource "alicloud_log_audit" "example" {
      display_name = "tf-audit-test"
      aliuid       = "1234************"
      variable_map = {
        "vpc_flow_enabled" = "true",
        "vpc_flow_ttl" = "7",
        "vpc_sync_enabled" = "true",
        "vpc_sync_ttl" = "180"
        "vpc_flow_collection_policy" = var.vpcflow_policy
      }
      #if using rd custom mode for multi-account
      multi_account = ["1235************","1236************"]
      resource_directory_type="custom"
    }
  • 正确转义反斜线(\)和双引号("),并基于\n换行。更多信息,请参见转义说明
    resource "alicloud_log_audit" "example" {
      display_name = "tf-audit-test"
      aliuid       = "1234************"
      variable_map = {
        "vpc_flow_enabled" = "true",
        "vpc_flow_ttl" = "7",
        "vpc_sync_enabled" = "true",
        "vpc_sync_ttl" = "180"
        "vpc_flow_collection_policy" = "accept tag.env == \\\"test\\\"\\ndrop \\\"*\\\""
      }
      #if using rd custom mode for multi-account
      multi_account = ["1235************","1236************"]
      resource_directory_type="custom"
    }

附录:variable_map参数列表

参数名 描述 默认值
actiontrail_enabled 是否开启操作审计(Actiontrail)日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
actiontrail_ttl 设置操作审计日志的中心化存储时间。单位:天。 180
actiontrail_ti_enabled 是否开启操作审计(Actiontrail)日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
oss_access_enabled 是否开启OSS访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
oss_access_ttl 设置OSS访问日志的区域化存储时间。单位:天。 7
oss_sync_enabled 是否开启OSS访问日志同步到中心功能,取值:
  • true:开启。
  • false:关闭。
true
oss_sync_ttl 设置OSS访问日志的中心化存储时间。单位:天。 180
oss_access_ti_enabled 是否开启OSS访问日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
oss_metering_enabled 是否开启OSS计量日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
oss_metering_ttl 设置OSS计量日志的中心化存储时间。单位:天。 180
rds_enabled 是否开启RDS MySQL审计日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
rds_audit_collection_policy 设置RDS MySQL审计日志的采集策略。 ""
rds_ttl 设置RDS MySQL审计日志的中心化存储时间。单位:天。 180
rds_ti_enabled 是否开启RDS MySQL审计日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
rds_slow_enabled 是否开启RDS MySQL慢日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
rds_slow_collection_policy 设置RDS MySQL慢日志的采集策略。 ""
rds_slow_ttl 设置RDS MySQL慢日志的中心化存储时间。单位:天。 180
rds_error_enabled 是否开启RDS MySQL错误日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
rds_error_collection_policy 设置RDS MySQL错误日志的采集策略。 ""
rds_error_ttl 设置RDS MySQL错误日志的中心化存储时间。单位:天。 180
rds_perf_enabled 是否开启RDS MySQL性能日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
rds_perf_collection_policy 设置RDS MySQL性能日志的采集策略。 ""
rds_perf_ttl 设置RDS MySQL性能日志的中心化存储时间。单位:天。 180
vpc_flow_enabled 是否开启VPC流日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
vpc_flow_ttl 设置VPC流日志的区域化存储时间。单位:天。 7
vpc_flow_collection_policy 设置VPC流日志的采集策略。 ""
vpc_sync_enabled 是否开启VPC流日志同步到中心的功能,取值:
  • true:开启。
  • false:关闭。
true
vpc_sync_ttl 设置VPC流日志的中心化存储时间。单位:天。 180
polardb_enabled 是否开启PolarDB MySQL审计日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
polardb_audit_collection_policy 设置PolarDB MySQL审计日志的采集策略。 ""
polardb_ttl 设置PolarDB MySQL审计日志的中心化存储时间。单位:天。 180
polardb_ti_enabled 是否开启PolarDB MySQL审计日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
polardb_slow_enabled 是否开启PolarDB MySQL慢日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
polardb_slow_collection_policy 设置PolarDB MySQL慢日志的采集策略。 ""
polardb_slow_ttl 设置PolarDB MySQL慢日志的中心化存储时间。单位:天。 180
polardb_error_enabled 是否开启PolarDB MySQL错误日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
polardb_error_collection_policy 设置PolarDB MySQL错误日志的采集策略。 ""
polardb_error_ttl 设置PolarDB MySQL错误日志的中心化存储时间。单位:天。 180
polardb_perf_enabled 是否开启PolarDB MySQL性能日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
polardb_perf_collection_policy 设置PolarDB MySQL性能日志的采集策略。 ""
polardb_perf_ttl 设置PolarDB MySQL性能日志的中心化存储时间。单位:天。 180
drds_audit_enabled 是否开启PolarDB-X 1.0审计日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
drds_audit_collection_policy 设置PolarDB-X 1.0审计日志的采集策略。 ""
drds_audit_ttl 设置PolarDB-X 1.0审计日志的区域化存储时间。单位:天。 7
drds_sync_enabled 是否开启PolarDB-X 1.0审计日志同步到中心的功能,取值:
  • true:开启。
  • false:关闭。
true
drds_sync_ttl 设置PolarDB-X 1.0审计日志的中心化存储时间。单位:天。 180
slb_access_enabled 是否开启SLB访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
slb_access_collection_policy 设置SLB访问日志的采集策略。 ""
slb_access_ttl 设置SLB访问日志的区域化存储时间。单位:天。 7
slb_sync_enabled 是否开启SLB访问日志同步到中心的功能,取值:
  • true:开启。
  • false:关闭。
true
slb_sync_ttl 设置SLB访问日志的中心化存储时间。单位:天。 180
slb_access_ti_enabled 是否开启SLB访问日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
alb_access_enabled 是否开启ALB访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
alb_access_collection_policy 设置ALB访问日志的采集策略。 ""
alb_access_ttl 设置ALB访问日志的区域化存储时间。单位:天。 7
alb_sync_enabled 是否开启ALB访问日志同步到中心的功能,取值:
  • true:开启。
  • false:关闭。
true
alb_sync_ttl 设置ALB访问日志的中心化存储时间。单位:天。 180
bastion_enabled 是否开启堡垒机操作日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
bastion_ttl 设置堡垒机操作日志的中心化存储时间。单位:天。 180
bastion_ti_enabled 是否开启堡垒机操作日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
waf_enabled 是否开启WAF访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
waf_ttl 设置WAF访问日志的中心化存储时间。单位:天。 180
waf_ti_enabled 是否开启WAF访问日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
cloudfirewall_enabled 是否开启云防火墙互联网边界防火墙流量日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
cloudfirewall_ttl 设置云防火墙互联网边界防火墙流量日志的中心化存储时间。单位:天。 180
cloudfirewall_ti_enabled 是否开启云防火墙互联网边界防火墙流量日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
cloudfirewall_vpc_enabled 是否开启云防火墙VPC边界防火墙流量日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
cloudfirewall_vpc_ttl 设置云防火墙VPC边界防火墙流量日志的中心化存储时间。单位:天。 180
cloudfirewall_vpc_ti_enabled 是否开启云防火墙VPC边界防火墙流量日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
ddos_coo_access_enabled 是否开启DDoS高防(新BGP)日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
ddos_coo_access_ttl 设置DDoS高防(新BGP)日志中心化存储时间,单位:天。 180
ddos_coo_access_ti_enabled 是否开启DDoS高防(新BGP)日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
ddos_bgp_access_enabled 是否开启DDoS原生防护日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
ddos_bgp_access_ttl 设置DDoS原生防护日志中心化存储时间,单位:天。 180
ddos_dip_access_enabled 是否开启DDoS高防(国际版)日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
ddos_dip_access_ttl 设置DDoS高防(国际版)日志中心化存储时间,单位:天。 180
ddos_dip_access_ti_enabled 是否开启DDoS高防(国际版)日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
sas_ttl 设置SAS日志中心化存储时间,单位:天。 180
sas_process_enabled 是否开启SAS进程启动日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_network_enabled 是否开启SAS网络连接日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_login_enabled 是否开启SAS登录流水日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_crack_enabled 是否开启SAS暴力破解日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_snapshot_process_enabled 是否开启SAS进程快照日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_snapshot_account_enabled 是否开启SAS账号快照的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_snapshot_port_enabled 是否开启SAS端口快照日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_dns_enabled 是否开启SAS DNS解析日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_local_dns_enabled 是否开启SAS本地DNS日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_session_enabled 是否开启SAS网络会话日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_http_enabled 是否开启SAS Web访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_security_vul_enabled 是否开启SAS漏洞日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_security_hc_enabled 是否开启SAS安全基线日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_security_alert_enabled 是否开启SAS漏洞告警日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
sas_ti_enabled 是否开启SAS日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
apigateway_enabled 是否开启API网关访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
apigateway_ttl 设置API网关访问日志中心化存储时间,单位:天。 180
apigateway_ti_enabled 是否开启API网关访问日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
nas_enabled 是否开启NAS访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
nas_ttl 设置NAS访问日志中心化存储时间,单位:天。 180
nas_ti_enabled 是否开启NAS访问日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
appconnect_enabled 是否开启应用集成日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
appconnect_ttl 设置应用集成日志中心化存储时间,单位:天。 180
appconnect_ti_enabled 是否开启应用集成日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
cps_enabled 是否开启移动推送日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
cps_ttl 设置移动推送日志中心化存储时间,单位:天。 180
cps_ti_enabled 是否开启移动推送日志的威胁情报功能,取值:
  • true:开启。
  • false:关闭。
false
k8s_audit_enabled 是否开启Kubernetes审计日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
k8s_audit_collection_policy Kubernetes审计日志的采集策略。 ""
k8s_audit_ttl 设置Kubernetes审计日志中心化存储时间,单位:天。 180
k8s_event_enabled 是否开启Kubernetes事件日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
k8s_event_collection_policy 设置Kubernetes事件日志的采集策略。 ""
k8s_event_ttl 设置Kubernetes事件日志中心化存储时间,单位:天。 180
k8s_ingress_enabled 是否开启Kubernetes Ingress访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
k8s_ingress_collection_policy 设置Kubernetes Ingress访问日志的采集策略。 ""
k8s_ingress_ttl 设置Kubernetes Ingress日志中心化存储时间,单位:天。 180