本文介紹如何使用Terraform調用介面配置日誌審計服務。
前提條件
已安裝和配置Terraform。具體操作,請參見在Cloud Shell中使用Terraform、在本地安裝和配置Terraform。
背景資訊
Terraform是一種開源工具,用於安全高效地預覽、配置和管理雲基礎架構和資源。Terraform的命令列介面(CLI)提供了一種簡單機制,用於將設定檔部署到阿里雲或其他任意支援的雲上,並對其進資料列版本設定。
目前terraform-provider-alicloud已經提供了超過163個Resource和113個Data Source,覆蓋計算、儲存、網路、CDN、Container Service、中介軟體和資料庫等阿里雲產品,滿足大量客戶的自動化上雲需求。
使用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所在地區。目前支援如下地區:
|
步驟二:RAM授權
對於中心帳號,如果不存在AliyunServiceRoleForSLSAudit關聯角色,則需先建立該關聯角色。具體操作,請參見首次配置。
如果需要通過自訂鑒權模式配置其他成員帳號,則在授權中所涉及的權限原則資訊請參見自訂授權日誌採集與同步。
步驟三:配置日誌審計服務
建立一個Terraform工作目錄(例如名為sls的工作目錄),並在該目錄下建立一個名為terraform.tf的檔案。
在terraform.tf檔案中,添加如下內容。
resource "alicloud_log_audit" "example" { display_name = "tf-audit-test" aliuid = "1379186349****" }
相關參數說明如下:
參數
說明
example
Resource名稱。自訂配置。
display_name
採集配置名稱。自訂配置。
aliuid
阿里雲帳號ID。
在您所建立的工作目錄sls下,執行如下命令,初始化terraform工作目錄。
terraform init
如果返回結果中提示
Terraform has been successfully initialized!
,表示初始化成功。編輯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參數列表。
使terraform.tf檔案中的採集配置生效。
執行如下命令。
terraform apply
輸入yes。
如果返回結果中提示
Apply complete!
,表示應用採集配置成功,日誌審計服務將按照採集配置進行日誌採集和儲存。
相關操作
您還可以通過Terraform完成如下相關操作。
匯入已有採集配置。
terraform import alicloud_log_audit.example tf-audit-test
其中,example和tf-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.214.0及以上版本
alicloud provider
請通過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"
}
}
首先升級
terraform alicloud provider
版本。terraform init --upgrade
執行應用配置。
terraform apply
樣本
通過Terraform配置日誌審計服務的採集策略時,需特別注意特殊字元轉義和多行策略配置。例如您只採集標籤變數env完全符合test的VPC執行個體,而不採集其他VPC執行個體,可以將採集原則設定為如下內容。
accept tag.env == "test"
drop "*"
因為採集策略為多行語句且存在特殊符號,例如雙引號(")。在Log Service控制台中的日誌審計服務中配置採集策略時,控制台會自動進行轉義,而通過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 | 是否開啟Action Trail(Actiontrail)日誌的採集功能,取值:
| false |
actiontrail_ttl | 設定作業審計日誌的中心化儲存時間。單位:天。 | 180 |
cloudconfig_change_enabled | 是否開啟配置審計變更日誌的採集功能,取值:
| false |
cloudconfig_change_ttl | 設定配置審計變更日誌的中心化儲存時間。單位:天。 | 180 |
cloudconfig_noncom_enabled | 是否開啟配置審計不合規事件的採集功能,取值:
| false |
cloudconfig_noncom_ttl | 設定配置審計不合規事件的中心化儲存時間。單位:天。 | 180 |
oss_access_enabled | 是否開啟OSS訪問日誌的採集功能,取值:
| false |
oss_access_ttl | 設定OSS訪問日誌的地區化儲存時間。單位:天。 | 7 |
oss_sync_enabled | 是否開啟OSS訪問日誌同步到中心功能,取值:
| true |
oss_sync_ttl | 設定OSS訪問日誌的中心化儲存時間。單位:天。 | 180 |
oss_metering_enabled | 是否開啟OSS計量日誌的採集功能,取值:
| false |
oss_metering_ttl | 設定OSS計量日誌的中心化儲存時間。單位:天。 | 180 |
rds_enabled | 是否開啟RDS MySQL審計日誌的採集功能,取值:
| false |
rds_audit_collection_policy | 設定RDS MySQL審計日誌的採集策略。 | "" |
rds_ttl | 設定RDS MySQL審計日誌的中心化儲存時間。單位:天。 | 180 |
rds_slow_enabled | 是否開啟RDS MySQL慢日誌的採集功能,取值:
| false |
rds_slow_collection_policy | 設定RDS MySQL慢日誌的採集策略。 | "" |
rds_slow_ttl | 設定RDS MySQL慢日誌的中心化儲存時間。單位:天。 | 180 |
rds_error_enabled | 是否開啟RDS MySQL錯誤記錄檔的採集功能,取值:
| false |
rds_error_collection_policy | 設定RDS MySQL錯誤記錄檔的採集策略。 | "" |
rds_error_ttl | 設定RDS MySQL錯誤記錄檔的中心化儲存時間。單位:天。 | 180 |
rds_perf_enabled | 是否開啟RDS MySQL效能日誌的採集功能,取值:
| false |
rds_perf_collection_policy | 設定RDS MySQL效能日誌的採集策略。 | "" |
rds_perf_ttl | 設定RDS MySQL效能日誌的中心化儲存時間。單位:天。 | 180 |
vpc_flow_enabled | 是否開啟VPC流日誌的採集功能,取值:
| false |
vpc_flow_ttl | 設定VPC流日誌的地區化儲存時間。單位:天。 | 7 |
vpc_flow_collection_policy | 設定VPC流日誌的採集策略。 | "" |
vpc_sync_enabled | 是否開啟VPC流日誌同步到中心的功能,取值:
| true |
vpc_sync_ttl | 設定VPC流日誌的中心化儲存時間。單位:天。 | 180 |
dns_gtm_collection_policy | 設定DNS全域流量管理日誌的採集策略。 | "" |
dns_gtm_ttl | 設定DNS全域流量管理日誌的儲存天數,單位:天。 | 180 |
dns_gtm_enabled | 是否開啟DNS全域流量管理日誌的採集功能,取值:
| false |
dns_resolve_collection_policy | 設定DNS公網解析日誌的採集策略。 | "" |
dns_resolve_ttl | 設定DNS公網解析日誌的儲存天數,單位:天。 | 180 |
dns_resolve_enabled | 是否開啟DNS公網解析日誌的採集功能,取值:
| false |
dns_intranet_enabled | 是否開啟內網DNS日誌的採集功能,取值:
| false |
dns_intranet_ttl | 設定內網DNS日誌地區化儲存時間。單位:天。 | 7 |
dns_intranet_collection_policy | 設定內網DNS日誌的採集策略。 | 無 |
dns_sync_enabled | 是否開啟內網DNS日誌同步到中心的功能,取值:
| true |
dns_sync_ttl | 設定內網DNS日誌的中心化儲存時間。單位:天。 | 180 |
polardb_enabled | 是否開啟PolarDB MySQL審計日誌的採集功能,取值:
| false |
polardb_audit_collection_policy | 設定PolarDB MySQL審計日誌的採集策略。 | "" |
polardb_ttl | 設定PolarDB MySQL審計日誌的中心化儲存時間。單位:天。 | 180 |
polardb_slow_enabled | 是否開啟PolarDB MySQL慢日誌的採集功能,取值:
| false |
polardb_slow_collection_policy | 設定PolarDB MySQL慢日誌的採集策略。 | "" |
polardb_slow_ttl | 設定PolarDB MySQL慢日誌的中心化儲存時間。單位:天。 | 180 |
polardb_error_enabled | 是否開啟PolarDB MySQL錯誤記錄檔的採集功能,取值:
| false |
polardb_error_collection_policy | 設定PolarDB MySQL錯誤記錄檔的採集策略。 | "" |
polardb_error_ttl | 設定PolarDB MySQL錯誤記錄檔的中心化儲存時間。單位:天。 | 180 |
polardb_perf_enabled | 是否開啟PolarDB MySQL效能日誌的採集功能,取值:
| false |
polardb_perf_collection_policy | 設定PolarDB MySQL效能日誌的採集策略。 | "" |
polardb_perf_ttl | 設定PolarDB MySQL效能日誌的中心化儲存時間。單位:天。 | 180 |
drds_audit_enabled | 是否開啟PolarDB-X 1.0審計日誌的採集功能,取值:
| 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 |
drds_sync_ttl | 設定PolarDB-X 1.0審計日誌的中心化儲存時間。單位:天。 | 180 |
slb_access_enabled | 是否開啟SLB訪問日誌的採集功能,取值:
| false |
slb_access_collection_policy | 設定SLB訪問日誌的採集策略。 | "" |
slb_access_ttl | 設定SLB訪問日誌的地區化儲存時間。單位:天。 | 7 |
slb_sync_enabled | 是否開啟SLB訪問日誌同步到中心的功能,取值:
| true |
slb_sync_ttl | 設定SLB訪問日誌的中心化儲存時間。單位:天。 | 180 |
alb_access_enabled | 是否開啟ALB訪問日誌的採集功能,取值:
| false |
alb_access_collection_policy | 設定ALB訪問日誌的採集策略。 | "" |
alb_access_ttl | 設定ALB訪問日誌的地區化儲存時間。單位:天。 | 7 |
alb_sync_enabled | 是否開啟ALB訪問日誌同步到中心的功能,取值:
| true |
alb_sync_ttl | 設定ALB訪問日誌的中心化儲存時間。單位:天。 | 180 |
bastion_enabled | 是否開啟Bastionhost動作記錄的採集功能,取值:
| false |
bastion_ttl | 設定Bastionhost動作記錄的中心化儲存時間。單位:天。 | 180 |
waf_enabled | 是否開啟WAF訪問日誌的採集功能,取值:
| false |
waf_ttl | 設定WAF訪問日誌的中心化儲存時間。單位:天。 | 180 |
cloudfirewall_enabled | 是否開啟Cloud Firewall互連網邊界防火牆流量日誌的採集功能,取值:
| false |
cloudfirewall_ttl | 設定Cloud Firewall互連網邊界防火牆流量日誌的中心化儲存時間。單位:天。 | 180 |
cloudfirewall_vpc_enabled | 是否開啟Cloud FirewallVPC邊界防火牆流量日誌的採集功能,取值:
| false |
cloudfirewall_vpc_ttl | 設定Cloud FirewallVPC邊界防火牆流量日誌的中心化儲存時間。單位:天。 | 180 |
ddos_coo_access_enabled | 是否開啟DDoS高防(新BGP)日誌的採集功能,取值:
| false |
ddos_coo_access_ttl | 設定DDoS高防(新BGP)日誌中心化儲存時間,單位:天。 | 180 |
ddos_bgp_access_enabled | 是否開啟DDoS原生防護日誌的採集功能,取值:
| false |
ddos_bgp_access_ttl | 設定DDoS原生防護日誌中心化儲存時間,單位:天。 | 180 |
ddos_dip_access_enabled | 是否開啟DDoS高防(國際版)日誌的採集功能,取值:
| false |
ddos_dip_access_ttl | 設定DDoS高防(國際版)日誌中心化儲存時間,單位:天。 | 180 |
sas_file_detect_enabled | 是否開啟SAS檔案檢測日誌的採集功能,取值:
| false |
sas_client_enabled | 是否開啟SAS用戶端事件記錄的採集功能,取值:
| false |
sas_net_block_enabled | 是否開啟SAS網路防護日誌的採集功能,取值:
| false |
sas_rasp_enabled | 是否開啟SAS應用防護日誌的採集功能,取值:
| false |
sas_cspm_enabled | 是否開啟SAS雲平台配置檢測日誌的採集功能,取值:
| false |
sas_ttl | 設定SAS日誌中心化儲存時間,單位:天。 | 180 |
sas_process_enabled | 是否開啟SAS進程開機記錄的採集功能,取值:
| false |
sas_network_enabled | 是否開啟SAS網路連接日誌的採集功能,取值:
| false |
sas_login_enabled | 是否開啟SAS登入流水日誌的採集功能,取值:
| false |
sas_crack_enabled | 是否開啟SAS暴力破解日誌的採集功能,取值:
| false |
sas_snapshot_process_enabled | 是否開啟SAS進程快照日誌的採集功能,取值:
| false |
sas_snapshot_account_enabled | 是否開啟SAS帳號快照的採集功能,取值:
| false |
sas_snapshot_port_enabled | 是否開啟SAS連接埠快照日誌的採集功能,取值:
| false |
sas_dns_enabled | 是否開啟SAS DNS解析日誌的採集功能,取值:
| false |
sas_local_dns_enabled | 是否開啟SAS本地DNS日誌的採集功能,取值:
| false |
sas_session_enabled | 是否開啟SAS網路會話日誌的採集功能,取值:
| false |
sas_http_enabled | 是否開啟SAS Web訪問日誌的採集功能,取值:
| false |
sas_security_vul_enabled | 是否開啟SAS漏洞日誌的採集功能,取值:
| false |
sas_security_hc_enabled | 是否開啟SAS安全基準日誌的採集功能,取值:
| false |
sas_security_alert_enabled | 是否開啟SAS漏洞警示日誌的採集功能,取值:
| false |
sas_dns_query_enabled | 是否開啟SAS DNS請求日誌的採集功能,取值:
| false |
apigateway_enabled | 是否開啟API Gateway訪問日誌的採集功能,取值:
| false |
apigateway_ttl | 設定API Gateway訪問日誌中心化儲存時間,單位:天。 | 180 |
nas_enabled | 是否開啟NAS訪問日誌的採集功能,取值:
| false |
nas_ttl | 設定NAS訪問日誌中心化儲存時間,單位:天。 | 180 |
appconnect_enabled | 是否開啟應用整合日誌的採集功能,取值:
| false |
appconnect_ttl | 設定應用整合日誌中心化儲存時間,單位:天。 | 180 |
cps_enabled | 是否開啟Alibaba Cloud Mobile Push日誌的採集功能,取值:
| false |
cps_ttl | 設定Alibaba Cloud Mobile Push日誌中心化儲存時間,單位:天。 | 180 |
k8s_audit_enabled | 是否開啟Kubernetes審計日誌的採集功能,取值:
| false |
k8s_audit_collection_policy | Kubernetes審計日誌的採集策略。 | "" |
k8s_audit_ttl | 設定Kubernetes審計日誌中心化儲存時間,單位:天。 | 180 |
k8s_event_enabled | 是否開啟Kubernetes事件記錄的採集功能,取值:
| false |
k8s_event_collection_policy | 設定Kubernetes事件記錄的採集策略。 | "" |
k8s_event_ttl | 設定Kubernetes事件記錄中心化儲存時間,單位:天。 | 180 |
k8s_ingress_enabled | 是否開啟Kubernetes Ingress訪問日誌的採集功能,取值:
| false |
k8s_ingress_collection_policy | 設定Kubernetes Ingress訪問日誌的採集策略。 | "" |
k8s_ingress_ttl | 設定Kubernetes Ingress日誌中心化儲存時間,單位:天。 | 180 |