main.tf 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. locals {
  2. bucket_name = "xdr-${var.splunk_prefix}-${var.environment}-phantom-archives"
  3. principals = [
  4. "arn:${var.aws_partition}:iam::${var.aws_account_id}:user/MDRAdmin",
  5. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/user/mdr_terraformer",
  6. aws_iam_role.phantom_s3_role.arn
  7. ]
  8. }
  9. resource "aws_s3_bucket" "bucket" {
  10. bucket = local.bucket_name
  11. tags = merge(local.standard_tags, var.tags)
  12. }
  13. resource "aws_s3_bucket_versioning" "s3_version_bucket" {
  14. bucket = aws_s3_bucket.bucket.id
  15. versioning_configuration {
  16. status = "Enabled"
  17. }
  18. }
  19. resource "aws_s3_bucket_acl" "s3_acl_bucket" {
  20. bucket = aws_s3_bucket.bucket.id
  21. acl = "private"
  22. }
  23. resource "aws_s3_bucket_server_side_encryption_configuration" "s3_sse_bucket" {
  24. bucket = aws_s3_bucket.bucket.id
  25. rule {
  26. apply_server_side_encryption_by_default {
  27. kms_master_key_id = aws_kms_key.bucketkey.arn
  28. sse_algorithm = "aws:kms"
  29. }
  30. }
  31. }
  32. resource "aws_s3_bucket_lifecycle_configuration" "s3_lifecyle_bucket" {
  33. bucket = aws_s3_bucket.bucket.id
  34. rule {
  35. id = "INTELLIGENT_TIERING"
  36. status = "Enabled"
  37. abort_incomplete_multipart_upload {
  38. days_after_initiation = 2
  39. }
  40. transition {
  41. days = 30
  42. storage_class = "INTELLIGENT_TIERING"
  43. }
  44. transition {
  45. days = 365
  46. storage_class = "DEEP_ARCHIVE"
  47. }
  48. expiration {
  49. days = 7 * 365
  50. }
  51. }
  52. }
  53. resource "aws_s3_bucket_public_access_block" "public_access_block" {
  54. bucket = aws_s3_bucket.bucket.id
  55. block_public_acls = true
  56. block_public_policy = true
  57. ignore_public_acls = true
  58. restrict_public_buckets = true
  59. # Not technically dependent, but prevents a "Conflicting conditional operation" conflict.
  60. # See https://github.com/hashicorp/terraform-provider-aws/issues/7628
  61. depends_on = [aws_s3_bucket_policy.policy]
  62. }
  63. resource "aws_s3_bucket_policy" "policy" {
  64. depends_on = [aws_iam_role.phantom_s3_role]
  65. bucket = aws_s3_bucket.bucket.id
  66. policy = <<POLICY
  67. {
  68. "Version": "2012-10-17",
  69. "Id": "AllowThisAccount",
  70. "Statement": [
  71. {
  72. "Sid": "AccountAllow",
  73. "Effect": "Allow",
  74. "Principal": {
  75. "AWS": ${jsonencode(local.principals)}
  76. },
  77. "Action": [
  78. "s3:GetObject",
  79. "s3:ListBucket"
  80. ],
  81. "Resource": [
  82. "${aws_s3_bucket.bucket.arn}",
  83. "${aws_s3_bucket.bucket.arn}/*"
  84. ]
  85. }
  86. ]
  87. }
  88. POLICY
  89. }
  90. //AWS Provider outdated arguments <4.4.0
  91. /*resource "aws_s3_bucket" "bucket" {
  92. bucket = local.bucket_name
  93. acl = "private"
  94. versioning {
  95. enabled = true
  96. }
  97. tags = merge(local.standard_tags, var.tags)
  98. lifecycle_rule {
  99. id = "INTELLIGENT_TIERING"
  100. enabled = true
  101. abort_incomplete_multipart_upload_days = 2
  102. transition {
  103. days = 30
  104. storage_class = "INTELLIGENT_TIERING"
  105. }
  106. transition {
  107. days = 365
  108. storage_class = "DEEP_ARCHIVE"
  109. }
  110. expiration {
  111. days = 7*365
  112. }
  113. }
  114. server_side_encryption_configuration {
  115. rule {
  116. apply_server_side_encryption_by_default {
  117. kms_master_key_id = aws_kms_key.bucketkey.arn
  118. sse_algorithm = "aws:kms"
  119. }
  120. }
  121. }
  122. }
  123. */