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

前提条件

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

背景信息

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

目前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****"
    }

    相关参数说明如下:

    参数说明
    exampleResource名称。自定义配置。
    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 "*"
因为采集策略为多行语句且存在特殊符号,例如双引号(")。在日志服务控制台中的日志审计服务中配置采集策略时,控制台会自动进行转义,而通过Terraform配置时,需要您手动进行转义及换行操作。您可以通过如下两种方式完成配置。
  • 通过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
cloudconfig_change_enabled是否开启配置审计变更日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
cloudconfig_change_ttl 设置配置审计变更日志的中心化存储时间。单位:天。180
cloudconfig_noncom_enabled是否开启配置审计不合规事件的采集功能,取值:
  • true:开启。
  • false:关闭。
false
cloudconfig_noncom_ttl 设置配置审计不合规事件的中心化存储时间。单位:天。180
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_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_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
dns_intranet_enabled是否开启内网DNS日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
dns_intranet_ttl设置内网DNS日志区域化存储时间。单位:天。7
dns_intranet_collection_policy设置内网DNS日志的采集策略。
dns_sync_enabled是否开启内网DNS日志同步到中心的功能,取值:
  • true:开启。
  • false:关闭。
true
dns_sync_ttl设置内网DNS日志的中心化存储时间。单位:天。180
polardb_enabled是否开启PolarDB MySQL审计日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
polardb_audit_collection_policy设置PolarDB MySQL审计日志的采集策略。""
polardb_ttl设置PolarDB MySQL审计日志的中心化存储时间。单位:天。180
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
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
waf_enabled是否开启WAF访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
waf_ttl设置WAF访问日志的中心化存储时间。单位:天。180
cloudfirewall_enabled是否开启云防火墙互联网边界防火墙流量日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
cloudfirewall_ttl设置云防火墙互联网边界防火墙流量日志的中心化存储时间。单位:天。180
cloudfirewall_vpc_enabled是否开启云防火墙VPC边界防火墙流量日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
cloudfirewall_vpc_ttl设置云防火墙VPC边界防火墙流量日志的中心化存储时间。单位:天。180
ddos_coo_access_enabled是否开启DDoS高防(新BGP)日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
ddos_coo_access_ttl设置DDoS高防(新BGP)日志中心化存储时间,单位:天。180
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
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_dns_query_enabled是否开启SAS DNS请求日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
apigateway_enabled是否开启API网关访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
apigateway_ttl设置API网关访问日志中心化存储时间,单位:天。180
nas_enabled是否开启NAS访问日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
nas_ttl设置NAS访问日志中心化存储时间,单位:天。180
appconnect_enabled是否开启应用集成日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
appconnect_ttl设置应用集成日志中心化存储时间,单位:天。180
cps_enabled是否开启移动推送日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
cps_ttl设置移动推送日志中心化存储时间,单位:天。180
k8s_audit_enabled是否开启Kubernetes审计日志的采集功能,取值:
  • true:开启。
  • false:关闭。
false
k8s_audit_collection_policyKubernetes审计日志的采集策略。""
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
idaas_mng_enabled是否开启IDaaS应用身份服务管理操作日志的采集功能。取值:
  • true:开启。
  • false:关闭。
false
idaas_mng_ttl设置IDaaS应用身份服务管理操作日志中心化存储时间,单位:天。180
idaas_mng_collection_policy设置IDaaS应用身份服务管理操作日志的采集策略。""
idaas_user_enabled是否开启IDaaS应用身份服务用户行为日志的采集功能。取值:
  • true:开启。
  • false:关闭。
false
idaas_user_ttl设置IDaaS应用身份服务用户行为日志中心化存储时间,单位:天。180
idaas_user_collection_policy设置IDaaS应用身份服务用户行为日志的采集策略。""