使用Terraform配置日志审计服务

本文介绍如何使用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(北京)、华北3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华东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工作目录执行过terraform apply或者terraform import命令,则此时再次执行terraform import命令会失败。您需要删除当前目录下的terraform.tfstate文件后再重新执行terraform import命令。

  • 查看当前采集配置。

    terraform show

    查看审计配置

  • 查看当前terraform工作目录下的terraform.tf文件与已生效的采集配置的差异。

    terraform plan

    配置文件

内网环境日志审计配置

如果您希望通过内网环境配置日志审计,采取如下操作:

  1. 使用1.214.0及以上版本alicloud provider

  2. 请通过endpoints配置正确的网络访问入口,例如您需要通过北京的内网环境,可以配置cn-beijing-intranet.log.aliyuncs.com,详情参见服务入口

示例

北京内网配置日志审计的示例如下:

terraform {
     required_providers {
          alicloud = { 
               version = "1.214.0" //请使用1.214.0及以上版本terraform alicloud provider
          }   
     }   
}
provider "alicloud" {
    endpoints {
        log = "cn-beijing-intranet.log.aliyuncs.com"//请切换为对应的入口地址
    }
}

resource "alicloud_log_audit" "example" {
    display_name = "tf-audit-test"
    aliuid       = "148*******3782"
    variable_map = {
        "actiontrail_enabled" = "true",
        "actiontrail_ttl" ="30"
    }
}
  1. 首先升级terraform alicloud provider版本。

    terraform init --upgrade
  2. 执行应用配置。

    terraform apply

示例

通过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_gtm_collection_policy

设置DNS全局流量管理日志的采集策略。

""

dns_gtm_ttl

设置DNS全局流量管理日志的存储天数,单位:天。

180

dns_gtm_enabled

是否开启DNS全局流量管理日志的采集功能,取值:

  • true:开启。

  • false:关闭。

false

dns_resolve_collection_policy

设置DNS公网解析日志的采集策略。

""

dns_resolve_ttl

设置DNS公网解析日志的存储天数,单位:天。

180

dns_resolve_enabled

是否开启DNS公网解析日志的采集功能,取值:

  • true:开启。

  • false:关闭。

false

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_file_detect_enabled

是否开启SAS文件检测日志的采集功能,取值:

  • true:开启。

  • false:关闭。

false

sas_client_enabled

是否开启SAS客户端事件日志的采集功能,取值:

  • true:开启。

  • false:关闭。

false

sas_net_block_enabled

是否开启SAS网络防护日志的采集功能,取值:

  • true:开启。

  • false:关闭。

false

sas_rasp_enabled

是否开启SAS应用防护日志的采集功能,取值:

  • true:开启。

  • false:关闭。

false

sas_cspm_enabled

是否开启SAS云平台配置检测日志的采集功能,取值:

  • 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_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_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

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应用身份服务用户行为日志的采集策略。

""

pam_ops_enabled

是否开启PAM运维审计日志的采集功能。取值:

  • true:开启。

  • false:关闭。

false

pam_event_enabled

是否开启PAM操作审计日志的采集功能。取值:

  • true:开启。

  • false:关闭。

false

pam_ops_ttl

设置PAM运维审计日志中心化存储时间,单位:天。

""

pam_event_ttl

设置PAM操作审计日志中心化存储时间,单位:天。

180