audit_bucket.tf 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. resource "aws_s3_bucket" "audit_reports" {
  2. # checkov:skip=CKV_AWS_145: Risk is low for AES-256 encryption
  3. # checkov:skip=CKV2_AWS_6: see tfsec S3 block policy
  4. # checkov:skip=CKV_AWS_18: see tfsec S3 logging above
  5. provider = aws.c2 # The reports go in the c2 bucket
  6. bucket = "xdr-ca-audit-reports"
  7. tags = merge(local.standard_tags, var.tags)
  8. }
  9. resource "aws_s3_bucket_versioning" "s3_version_audit_reports" {
  10. provider = aws.c2
  11. bucket = aws_s3_bucket.audit_reports.id
  12. versioning_configuration {
  13. status = "Enabled"
  14. }
  15. }
  16. resource "aws_s3_bucket_acl" "s3_acl_audit_reports" {
  17. provider = aws.c2
  18. bucket = aws_s3_bucket.audit_reports.id
  19. acl = "private"
  20. }
  21. # TODO: Enable S3 logging... everywhere. We don't have a C2 bucket for this.
  22. #resource "aws_s3_bucket_logging" "log_bucket_audit_reports" {
  23. # target_bucket = module.xdr_config_logging_bucket.s3_bucket_name
  24. # target_prefix = "${var.aws_account_id}-${var.aws_region}-awsconfig/"
  25. #}
  26. # tfsec:ignore:aws-s3-encryption-customer-key Risk is low for AES-256 encryption
  27. resource "aws_s3_bucket_server_side_encryption_configuration" "s3_sse_audit_reports" {
  28. provider = aws.c2
  29. bucket = aws_s3_bucket.audit_reports.id
  30. rule {
  31. apply_server_side_encryption_by_default {
  32. sse_algorithm = "AES256"
  33. }
  34. }
  35. }
  36. resource "aws_s3_bucket_lifecycle_configuration" "s3_lifecyle_audit_reports" {
  37. provider = aws.c2
  38. bucket = aws_s3_bucket.audit_reports.id
  39. rule {
  40. id = "CleanUp"
  41. status = "Enabled"
  42. abort_incomplete_multipart_upload {
  43. days_after_initiation = 7
  44. }
  45. noncurrent_version_expiration {
  46. noncurrent_days = 365
  47. }
  48. }
  49. }
  50. data "aws_iam_policy_document" "audit_reports_bucket_access" {
  51. statement {
  52. actions = [
  53. "s3:GetBucketAcl",
  54. "s3:GetBucketLocation",
  55. "s3:PutObject",
  56. "s3:PutObjectAcl",
  57. ]
  58. resources = [
  59. aws_s3_bucket.audit_reports.arn,
  60. "${aws_s3_bucket.audit_reports.arn}/*",
  61. ]
  62. principals {
  63. identifiers = ["acm-pca.amazonaws.com"]
  64. type = "Service"
  65. }
  66. # TODO: Consider restricting this to the accounts, but may need to add Get permissions?
  67. # "Condition":{
  68. # "StringEquals":{
  69. # "aws:SourceAccount":"account",
  70. # "aws:SourceArn":"arn:partition:acm-pca:region:account:certificate-authority/CA-ID"
  71. # }
  72. # }
  73. }
  74. }
  75. resource "aws_s3_bucket_policy" "audit_reports" {
  76. provider = aws.c2 # The reports go in the c2 bucket
  77. bucket = aws_s3_bucket.audit_reports.id
  78. policy = data.aws_iam_policy_document.audit_reports_bucket_access.json
  79. depends_on = [aws_s3_bucket.audit_reports]
  80. }
  81. resource "aws_s3_bucket_public_access_block" "audit_reports_bucket_block_public_access" {
  82. provider = aws.c2 # The reports go in the c2 bucket
  83. bucket = aws_s3_bucket.audit_reports.id
  84. block_public_acls = true
  85. block_public_policy = true
  86. ignore_public_acls = true
  87. restrict_public_buckets = true
  88. depends_on = [aws_s3_bucket.audit_reports]
  89. }
  90. //AWS Provider outdated arguments <4.4.0
  91. /*resource "aws_s3_bucket" "audit_reports" {
  92. provider = aws.c2 # The reports go in the c2 bucket
  93. bucket = "xdr-ca-audit-reports"
  94. acl = "private"
  95. versioning {
  96. enabled = true
  97. }
  98. # TODO: Enable S3 logging... everywhere. We don't have a C2 bucket for this.
  99. #logging {
  100. # target_bucket = module.xdr_config_logging_bucket.s3_bucket_name
  101. # target_prefix = "${var.aws_account_id}-${var.aws_region}-awsconfig/"
  102. #}
  103. lifecycle_rule {
  104. id = "CleanUp"
  105. enabled = true
  106. abort_incomplete_multipart_upload_days = 7
  107. # Clean up old versions after a year
  108. noncurrent_version_expiration {
  109. days = 365
  110. }
  111. }
  112. server_side_encryption_configuration {
  113. rule {
  114. apply_server_side_encryption_by_default {
  115. sse_algorithm = "AES256" # Default keys are fine. We don't really need encryption here.
  116. }
  117. }
  118. }
  119. tags = merge(local.standard_tags, var.tags)
  120. }
  121. */