通过操作审计的跟踪,可以将您的云账号操作日志持续且实时地投递到您的日志服务(SLS)或对象存储(OSS)中。本文主要介绍如何通过 Terraform 一键创建跟踪。如果您尚不了解 Terraform,请参考 Terraform Alibaba Cloud Provider。
创建跟踪
下面是一个创建跟踪的 terraform 模板,该模板将在杭州创建一个名为 trail 的跟踪,该跟踪将把所有地域的所有事件投递到 OSS Bucket trail-bucket 和日志服务 trail-project 中。
provider "alicloud" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
region = "cn-hangzhou"
}
resource "alicloud_actiontrail_trail" "default" {
role_name = "aliyunserviceroleforactiontrail"
trail_name = "trail"
oss_bucket_name = "trail-bucket"
event_rw = "All"
trail_region = "All"
sls_project_arn = "acs:log:cn-hangzhou:1111111:project/trail-project"
sls_write_role_arn = "acs:ram::1111111:role/aliyunserviceroleforactiontrail"
}
您可以复制该模板并进行简单修改,然后运行init 加载 alicloud providers:
$ terraform init
接下来就可以一键创建跟踪:
$ terraform init
参数说明
• trail_name:跟踪名称。
• event_rw:(选填)事件读写类型,可选值 Read,Write, All。默认是 Write。
Read:读类型,指本身没有在云上增加、删除或修改配置的操作意图,仅读取云上产品和资源的信息的事件
Write:写类型,指可能增加、删除或修改云上资源的操作的事件
All:所有类型事件
• oss_bucket_name:(选填)对象存储 OSS Bucket 名称。
• oss_key_prefix:(选填)OSS Bucket 中审计事件文件的前缀,默认为空。
• role_name:(选填)用户允许操作审计服务扮演的 RAM 角色名称,操作审计将用该角色将日志投递到您的存储服务,默认值:aliyunserviceroleforactiontrail。如果该角色不存在则会自动创建,参考 操作审计服务关联角色 。
• sls_project_arn:(选填)日志服务 Log Project ARN 配置。格式为 acs:log:::project/。
• sls_write_role_arn:(选填)日志服务角色 ARN,操作审计将用该角色来将审计日志写入对应 SLS,格式为 acs:ram:::role/。默认将使用服务关联角色。
• trail_region:(选填)跟踪地域。默认跟踪所有地域,即 All。也可以指定地域,值为逗号分割的 region_id,例如 cn-beijing,cn-hangzhou。默认值 All。
• mns_topic_arn:(选填)MNS 消息主题的 ARM。如果配置了该选项,则当事件投递到 OSS 后,操作审计将向对应主题发送一条消息。
• status:(选填)跟踪状态,Enable 启用跟踪, Disable 禁用跟踪。默认为 Enable。
oss_bucket_name 或 sls_project_arn 至少指定一个
注意事项
如果使用已有 OSS Bucket,则需要先创建好 Bucket。
如果使用已有 SLS 日志项目(Log Project),则需要先创建好日志项目(Log Project)及日志库(LogStore)。并且 LogStore 的命名规则为:actiontrail_{trail_name},trail_name 是跟踪名称。如果要查询投递日志,则还需要为 Log Store 创建索引。
对于 role_name 和 sls_write_role_arn,如果您不是很了解阿里云 RAM 授权,则默认为空即可。
配置 OSS Bucket、SLS
上述模板是创建跟踪,并指定投递到已有的 OSS Bucket,您也可以在 terraform 中创建新的 Bucket。
resource "alicloud_oss_bucket" "oss" {
bucket = "${var.oss_bucket_name}"
}
resource "alicloud_actiontrail_trail" "default" {
trail_name = "${var.trail_name}"
oss_bucket_name = "${var.oss_bucket_name}"
event_rw = "All"
trail_region = "All"
depends_on = [
"alicloud_oss_bucket.oss"
]
}
创建新的 SLS
同理,也可以在 terraform 中新建 SLS。只是 SLS 需要配置日志项目(Log Project)、日志库(Log Store),并为日志库配置索引。
注意:LogStore 的命名规则为:actiontrail_{trail_name} 。
data "alicloud_account" "this" {}
resource "alicloud_log_project" "sls" {
name = "${var.sls_project_name}"
}
resource "alicloud_log_store" "logstore" {
project = "${alicloud_log_project.sls.name}"
name = "actiontrail_${var.trail_name}"
shard_count = 2
auto_split = true
max_split_shard_count = 64
retention_period = 3650
}
resource "alicloud_log_store_index" "logstoreindex" {
project = "${alicloud_log_project.sls.name}"
logstore = "${alicloud_log_store.logstore.name}"
full_text {
token = ", '\";=()[]{}?@&<>/:\n\t\r"
}
field_search {
name = "event"
type = "json"
token = ", '\";=()[]{}?@&<>/:\n\t\r"
enable_analytics = false
json_keys {
name = "acsRegion"
type = "text"
}
json_keys {
name = "apiVersion"
type = "text"
}
json_keys {
name = "errorMessage"
type = "text"
}
json_keys {
name = "eventId"
type = "text"
}
json_keys {
name = "eventName"
type = "text"
}
json_keys {
name = "eventSource"
type = "text"
}
json_keys {
name = "eventType"
type = "text"
}
json_keys {
name = "eventVersion"
type = "text"
}
json_keys {
name = "requestId"
type = "text"
}
json_keys {
name = "requestParameters.HostId"
type = "text"
}
json_keys {
name = "requestParameters.Name"
type = "text"
}
json_keys {
name = "requestParameters.Region"
type = "text"
}
json_keys {
name = "serviceName"
type = "text"
}
json_keys {
name = "sourceIpAddress"
type = "text"
}
json_keys {
name = "userAgent"
type = "text"
}
json_keys {
name = "userIdentity.accessKeyId"
type = "text"
}
json_keys {
name = "userIdentity.accountId"
type = "text"
}
json_keys {
name = "userIdentity.principalId"
type = "text"
}
json_keys {
name = "userIdentity.type"
type = "text"
}
json_keys {
name = "userIdentity.userName"
type = "text"
}
}
}
resource "alicloud_actiontrail_trail" "default" {
trail_name = "${var.trail_name}"
oss_bucket_name = "${var.oss_bucket_name}"
sls_project_arn = "acs:log:${var.region}:${data.alicloud_account.this.id}:project/${var.sls_project_name}"
event_rw = "All"
trail_region = "All"
depends_on = [
"alicloud_log_store_index.logstoreindex"
]
}
在 Cloud Shell 中使用 Terraform 创建跟踪
以上模板也更新到了阿里云 Cloud Shell 实验室教程中,您可以点击链接 https://api.aliyun.com/#/lab ,找到 《使用 Terraform 创建操作审计的跟踪》 进行体验。
总结
本文主要介绍了如何通过 Terraform 一键创建跟踪,并详细解释了相关参数。为了方便,您可以在 Cloud Shell 中找到 Terraform 模板创建跟踪。创建跟踪时,可以使用已有的 OSS Bucket 或 SLS Project,也可以使用 Terraform 新建 OSS Bucket 或 SLS Project通过 Terraform 创建跟踪,能极大提升工作效率。创建跟踪后,就可以对云账号的操作日志进行自定义分析了。
相关阅读
《操作审计最佳实践》系列由阿里云操作审计团队出品,旨在向集团输出云上审计相关的业务知识和技术,更多相关内容可以查看下面的系列文章。