我正在使用地形创建云迹。问题是我的源存储桶在3个月后一直在变化。现在,我想给出field_selector的动态S3 bucket值。我正在做这样的事情:
resource "aws_cloudtrail" "test" {
name = "test_trail"
s3_bucket_name = bucket.id
enable_logging = true
include_global_service_events = true
is_multi_region_trail = true
enable_log_file_validation = true
advanced_event_selector {
name = "Log download event data"
field_selector {
field = "eventCategory"
equals = ["Data"]
}
field_selector {
field = "resources.type"
equals = ["AWS::S3::Object"]
}
field_selector {
field = "eventName"
equals = ["GetObject"]
}
field_selector {
field = "resources.ARN"
**starts_with = ["aws_s3_bucket.sftp_file_upload_bucket.arn"]**
}
}
在这里,我给出arn,但日志不是以这种方式创建的,但如果我硬编码bucket名称,它就会被创建。
当您想要记录bucket的对象事件时,ARN是不够的。正如AWS CLI文档[1]所述:
例如,如果resources.type等于AWS::S3::Object,则ARN必须为以下格式之一。要记录特定S3存储桶中所有对象的所有数据事件,请使用StartsWith运算符,并仅包括存储桶ARN作为匹配值尾部斜线是有意的;不要将其排除在外。
因此,在您的情况下,您必须将最后一个字段选择器修复为:
field_selector {
field = "resources.ARN"
starts_with = ["${aws_s3_bucket.sftp_file_upload_bucket.arn}/"]
}
[1]https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudtrail/put-event-selectors.html#id11
当使用资源的属性时,您应该像一样指定它
"${aws_s3_bucket.sftp_file_upload_bucket.arn}"
或者没有像这样的报价
aws_s3_bucket.sftp_file_upload_bucket.arn
因此,正确的版本应该是
field_selector {
field = "resources.ARN"
starts_with = [aws_s3_bucket.sftp_file_upload_bucket.arn]
}