data "aws_caller_identity" "current" { } data "aws_region" "current" { } locals { account_id = data.aws_caller_identity.current.account_id bucket_name = coalesce( var.bucket_name, "${local.account_id}-${local.region}-s3logging-${var.bucket_suffix}" ) region = data.aws_region.current.name } resource "aws_s3_bucket" "this" { bucket = local.bucket_name tags = var.tags } resource "aws_s3_bucket_acl" "log_bucket_acl" { bucket = aws_s3_bucket.this.id acl = "log-delivery-write" } resource "aws_s3_bucket_logging" "this" { bucket = aws_s3_bucket.this.id # Conformance Pack for CIS requires access logs on all S3 buckets and is a best # practice. # # Logging to the bucket itself is allowed, but if we ingest into splunk, make # sure we don't set up a feedback loop (splunk accesses s3 bucket to get a log # which creates a log which leads to splunk accessing the s3 bucket) target_bucket = local.bucket_name target_prefix = "${data.aws_caller_identity.current.account_id}-${data.aws_region.current.name}-${local.bucket_name}" } resource "aws_s3_bucket_versioning" "this" { bucket = aws_s3_bucket.this.id versioning_configuration { status = var.versioning_enabled == true ? "Enabled" : "Suspended" } } resource "aws_s3_bucket_server_side_encryption_configuration" "this" { bucket = aws_s3_bucket.this.id rule { apply_server_side_encryption_by_default { sse_algorithm = "aws:kms" } } } resource "aws_s3_bucket_lifecycle_configuration" "this" { bucket = aws_s3_bucket.this.id count = length(var.lifecycle_rules) > 0 ? 1 : 0 # handle the case of no lifecycle rules dynamic "rule" { for_each = var.lifecycle_rules content { id = rule.value.id status = rule.value.enabled == true ? "Enabled" : "Disabled" abort_incomplete_multipart_upload { days_after_initiation = lookup(rule.value, "abort_incomplete_multipart_upload_days", 0) } filter { prefix = lookup(rule.value, "prefix", null) } expiration { days = lookup(rule.value, "expiration", 2147483647) } noncurrent_version_expiration { noncurrent_days = lookup(rule.value, "noncurrent_version_expiration", 2147483647) } } } } resource "aws_s3_bucket_public_access_block" "this" { bucket = aws_s3_bucket.this.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true }