123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- 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
- }
|