audit_bucket.tf 3.7 KB

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