@@ -916,3 +916,108 @@ resource "aws_iam_role_policy" "external_s3_kms_access_policy" {
916916 role = aws_iam_role. write_access_role [count . index ]. id
917917 policy = data. aws_iam_policy_document . s3_dq_kms_access_policy . json
918918}
919+
920+
921+ # #################################
922+ # Cloudtrail Bucket & KMS Policies
923+ # #################################
924+
925+ # S3 Cloudtrail bucket policy
926+ data "aws_iam_policy_document" "s3_cloudtrail_bucket_policy" {
927+ statement {
928+ sid = " AllowS3SSLRequestsOnly"
929+ actions = [
930+ " s3:ListBucket" ,
931+ " s3:GetBucketLocation" ,
932+ " s3:GetObject" ,
933+ " s3:PutObject" ,
934+ " s3:GetBucketAcl"
935+ ]
936+ resources = [
937+ module . s3_cloudtrail_bucket . storage_bucket_arn ,
938+ " ${ module . s3_cloudtrail_bucket . storage_bucket_arn } /*" ,
939+ ]
940+ principals {
941+ type = " Service"
942+ identifiers = [" cloudtrail.amazonaws.com" ]
943+ }
944+ condition {
945+ test = " Bool"
946+ values = [" true" ]
947+ variable = " aws:SecureTransport"
948+ }
949+ }
950+ statement {
951+ sid = " DenyS3NonSSLRequests"
952+ actions = [
953+ " s3:*"
954+ ]
955+ effect = " Deny"
956+ resources = [
957+ module . s3_cloudtrail_bucket . storage_bucket_arn ,
958+ " ${ module . s3_cloudtrail_bucket . storage_bucket_arn } /*" ,
959+ ]
960+ principals {
961+ type = " *"
962+ identifiers = [" *" ]
963+ }
964+ condition {
965+ test = " Bool"
966+ values = [" false" ]
967+ variable = " aws:SecureTransport"
968+ }
969+ }
970+ }
971+
972+ # Attach s3 Cloudtrail bucket policy to Cloudtrail role
973+ resource "aws_s3_bucket_policy" "s3_cloudtrail_bucket_policy" {
974+ bucket = module. s3_cloudtrail_bucket . storage_bucket_id
975+ policy = data. aws_iam_policy_document . s3_cloudtrail_bucket_policy . json
976+ }
977+
978+ # S3 Cloudtrail bucket KMS access policy
979+ data "aws_iam_policy_document" "s3_cloudtrail_kms_access_policy" {
980+ statement {
981+ actions = [
982+ " kms:Encrypt" ,
983+ " kms:Decrypt" ,
984+ " kms:ReEncrypt*" ,
985+ " kms:GenerateDataKey*" ,
986+ " kms:DescribeKey"
987+ ]
988+ resources = [
989+ module . s3_cloudtrail_bucket . storage_bucket_kms_key_arn
990+ ]
991+ }
992+ }
993+
994+ # Attach S3 Cloudtrail bucket KMS policy to Cloudtrail role
995+ resource "aws_iam_role_policy" "s3_cloudtrail_kms_access_policy" {
996+ name = " S3CloudTrailKMSAccess"
997+ role = aws_iam_role. cloudtrail_cloudwatch_role . id
998+ policy = data. aws_iam_policy_document . s3_cloudtrail_kms_access_policy . json
999+ }
1000+
1001+ # CloudWatch Logs permissions policy for CloudTrail
1002+ data "aws_iam_policy_document" "cloudtrail_cloudwatch_policy" {
1003+ statement {
1004+ effect = " Allow"
1005+ actions = [
1006+ " logs:PutLogEvents" ,
1007+ " logs:CreateLogGroup" ,
1008+ " logs:CreateLogStream"
1009+ ]
1010+ resources = [
1011+ aws_cloudwatch_log_group . cloudtrail_log_group . arn ,
1012+ " ${ aws_cloudwatch_log_group . cloudtrail_log_group . arn } :*"
1013+ ]
1014+
1015+ }
1016+ }
1017+
1018+ # Attach CloudTrail CloudWatch Logs policy to CloudTrail role
1019+ resource "aws_iam_role_policy" "cloudtrail_cloudwatch_policy" {
1020+ name = " CloudTrailCloudWatchLogsAccess"
1021+ role = aws_iam_role. cloudtrail_cloudwatch_role . id
1022+ policy = data. aws_iam_policy_document . cloudtrail_cloudwatch_policy . json
1023+ }
0 commit comments