1+ # Create a cloudtrail trail to track all management events data events ( only for S3 bucket and lambda function) and store them in log_bucket.
12resource "aws_cloudtrail" "s3_cloudtrail" {
23 count = var. logging ? 1 : 0
34 depends_on = [aws_iam_role_policy_attachment . s3_cloudtrail_policy_attachment ]
@@ -28,6 +29,7 @@ resource "aws_cloudtrail" "s3_cloudtrail" {
2829 )
2930}
3031
32+ # Create a log_group in cloudwatch for storing logs generated by cloudtrail Trail.
3133resource "aws_cloudwatch_log_group" "s3_cloudwatch" {
3234 count = var. logging && var. cloudwatch_logging_enabled ? 1 : 0
3335 name = format (" %s-%s-S3" , var. bucket_name , data. aws_caller_identity . current . account_id )
@@ -39,6 +41,7 @@ resource "aws_cloudwatch_log_group" "s3_cloudwatch" {
3941 )
4042}
4143
44+ # Create an IAM role to be attached with cloudtrail trail
4245resource "aws_iam_role" "s3_cloudtrail_cloudwatch_role" {
4346 count = var. logging && var. cloudwatch_logging_enabled ? 1 : 0
4447 name = format (" %s-cloudtrail-cloudwatch-S3" , var. bucket_name )
@@ -49,6 +52,7 @@ resource "aws_iam_role" "s3_cloudtrail_cloudwatch_role" {
4952 )
5053}
5154
55+ # AWS IAM policy document that allows AWS CloudTrail to assume roles for accessing AWS services.
5256data "aws_iam_policy_document" "cloudtrail_assume_role" {
5357 count = var. logging ? 1 : 0
5458 statement {
@@ -62,6 +66,7 @@ data "aws_iam_policy_document" "cloudtrail_assume_role" {
6266 }
6367}
6468
69+ # AWS IAM policy defining permissions for AWS CloudTrail to interact with CloudWatch Logs for S3 logging.
6570resource "aws_iam_policy" "s3_cloudtrail_cloudwatch_policy" {
6671 count = var. logging && var. cloudwatch_logging_enabled ? 1 : 0
6772 name = format (" %s-cloudtrail-cloudwatch-S3" , var. bucket_name )
99104}
100105
101106
102-
107+ # Attach the IAM policy to the IAM role created above.
103108resource "aws_iam_role_policy_attachment" "s3_cloudtrail_policy_attachment" {
104109 count = var. logging && var. cloudwatch_logging_enabled ? 1 : 0
105110 role = aws_iam_role. s3_cloudtrail_cloudwatch_role [0 ]. name
106111 policy_arn = aws_iam_policy. s3_cloudtrail_cloudwatch_policy [0 ]. arn
107112}
108113
114+ # Create a S3 logger bucket to add bucket access logs and cloudtrial logs
109115module "log_bucket" {
110116 count = var. logging ? 1 : 0
111117 source = " terraform-aws-modules/s3-bucket/aws"
112- version = " 3.10.0 "
118+ version = " 4.1.2 "
113119 bucket = format (" %s-%s-log-bucket" , var. bucket_name , data. aws_caller_identity . current . account_id )
114120 force_destroy = true
115121 attach_elb_log_delivery_policy = true
@@ -168,11 +174,12 @@ module "log_bucket" {
168174POLICY
169175}
170176
177+ # Create KMS key used to encrypt cloudwatch log group and CloudTrail trail.
171178module "kms_key" {
172179 count = var. logging ? 1 : 0
173180 depends_on = [data . aws_iam_policy_document . default ]
174181 source = " clouddrove/kms/aws"
175- version = " 0.15.0 "
182+ version = " 1.3.1 "
176183
177184 name = format (" %s-%s-kms-03" , var. bucket_name , data. aws_caller_identity . current . account_id )
178185 enabled = true
@@ -182,6 +189,8 @@ module "kms_key" {
182189 enable_key_rotation = true
183190}
184191
192+
193+ # IAM policy document defining permissions for AWS KMS related to AWS CloudTrail encryption and decryption.
185194data "aws_iam_policy_document" "default" {
186195 count = var. logging ? 1 : 0
187196 version = " 2012-10-17"
@@ -238,7 +247,7 @@ data "aws_iam_policy_document" "default" {
238247 test = " StringEquals"
239248 variable = " kms:CallerAccount"
240249 values = [
241- " ${ data . aws_caller_identity . current . account_id } " ]
250+ data . aws_caller_identity . current . account_id ]
242251 }
243252 condition {
244253 test = " StringLike"
0 commit comments