@@ -13,46 +13,65 @@ locals {
1313
1414 # Format account IDs into necessary resource lists.
1515 bucket_policy_put_resources = formatlist (" ${ aws_s3_bucket . this . arn } /AWSLogs/%s/*" , local. account_ids )
16- kms_key_encrypt_resources = formatlist (" arn:${ local . partition } :cloudtrail:*:%s:trail/*" , local. account_ids )
1716}
1817
1918resource "aws_s3_bucket" "this" {
2019 bucket = " ${ local . account_id } -${ var . region } -vpcflowlog"
21- acl = " private"
2220 tags = var. tags
2321
24- lifecycle_rule {
25- enabled = true
22+ lifecycle {
23+ prevent_destroy = true
24+ }
25+ }
2626
27- transition {
28- days = 30
29- storage_class = " STANDARD_IA "
30- }
27+ resource "aws_s3_bucket_acl" "this" {
28+ bucket = aws_s3_bucket . this . id
29+ acl = " private "
30+ }
3131
32- }
32+ resource "aws_s3_bucket_lifecycle_configuration" "this" {
33+ count = var. lifecycle_rules == null ? 0 : 1
3334
34- logging {
35- target_bucket = var. logging_bucket
36- target_prefix = " ${ local . account_id } -${ var . region } -vpcflowlog/"
37- }
35+ bucket = aws_s3_bucket. this . id
36+
37+ dynamic "rule" {
38+ iterator = rule
39+ for_each = var. lifecycle_rules
3840
39- server_side_encryption_configuration {
40- rule {
41- apply_server_side_encryption_by_default {
42- sse_algorithm = " aws:kms"
43- kms_master_key_id = aws_kms_key. this . arn
41+ content {
42+ id = rule. value . id
43+ status = rule. value . enabled ? " Enabled" : " Disabled"
44+
45+ filter {
46+ prefix = lookup (rule. value , " prefix" , null )
4447 }
45- }
4648
47- }
49+ expiration {
50+ days = lookup (rule. value , " expiration" , 2147483647 )
51+ }
4852
49- versioning {
50- enabled = true
51- }
53+ noncurrent_version_expiration {
54+ noncurrent_days = lookup (rule . value , " noncurrent_version_expiration " , 2147483647 )
55+ }
5256
53- lifecycle {
54- prevent_destroy = true
57+ dynamic "transition" {
58+ for_each = coalesce (rule. value . transition , [])
59+
60+ content {
61+ days = transition. value . days
62+ storage_class = transition. value . storage_class
63+ }
64+ }
65+ }
5566 }
67+
68+ depends_on = [aws_s3_bucket_versioning . this ]
69+ }
70+
71+ resource "aws_s3_bucket_logging" "this" {
72+ bucket = aws_s3_bucket. this . id
73+ target_bucket = var. logging_bucket
74+ target_prefix = " ${ local . account_id } -${ var . region } -vpcflowlog/"
5675}
5776
5877resource "aws_s3_bucket_public_access_block" "this" {
@@ -63,6 +82,26 @@ resource "aws_s3_bucket_public_access_block" "this" {
6382 restrict_public_buckets = true
6483}
6584
85+ resource "aws_s3_bucket_server_side_encryption_configuration" "this" {
86+ bucket = aws_s3_bucket. this . bucket
87+
88+ rule {
89+ apply_server_side_encryption_by_default {
90+ kms_master_key_id = aws_kms_key. this . arn
91+ sse_algorithm = " aws:kms"
92+ }
93+ }
94+ }
95+
96+ resource "aws_s3_bucket_versioning" "this" {
97+ bucket = aws_s3_bucket. this . id
98+
99+ versioning_configuration {
100+ status = " Enabled"
101+ }
102+ }
103+
104+
66105data "aws_iam_policy_document" "this" {
67106 statement {
68107 actions = [" s3:GetBucketAcl" ]
0 commit comments