main.tf 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. acl = "private"
  12. versioning {
  13. enabled = true
  14. }
  15. tags = merge(var.standard_tags, var.tags)
  16. lifecycle_rule {
  17. id = "INTELLIGENT_TIERING"
  18. enabled = true
  19. abort_incomplete_multipart_upload_days = 2
  20. transition {
  21. days = 30
  22. storage_class = "INTELLIGENT_TIERING"
  23. }
  24. transition {
  25. days = 365
  26. storage_class = "DEEP_ARCHIVE"
  27. }
  28. expiration {
  29. days = 7*365
  30. }
  31. }
  32. server_side_encryption_configuration {
  33. rule {
  34. apply_server_side_encryption_by_default {
  35. kms_master_key_id = aws_kms_key.bucketkey.arn
  36. sse_algorithm = "aws:kms"
  37. }
  38. }
  39. }
  40. }
  41. resource "aws_s3_bucket_public_access_block" "public_access_block" {
  42. bucket = aws_s3_bucket.bucket.id
  43. block_public_acls = true
  44. block_public_policy = true
  45. ignore_public_acls = true
  46. restrict_public_buckets = true
  47. # Not technically dependent, but prevents a "Conflicting conditional operation" conflict.
  48. # See https://github.com/hashicorp/terraform-provider-aws/issues/7628
  49. depends_on = [aws_s3_bucket_policy.policy]
  50. }
  51. resource "aws_s3_bucket_policy" "policy" {
  52. depends_on = [ aws_iam_role.phantom_s3_role ]
  53. bucket = aws_s3_bucket.bucket.id
  54. policy = <<POLICY
  55. {
  56. "Version": "2012-10-17",
  57. "Id": "AllowThisAccount",
  58. "Statement": [
  59. {
  60. "Sid": "AccountAllow",
  61. "Effect": "Allow",
  62. "Principal": {
  63. "AWS": ${ jsonencode(local.principals) }
  64. },
  65. "Action": [
  66. "s3:GetObject",
  67. "s3:ListBucket"
  68. ],
  69. "Resource": [
  70. "${aws_s3_bucket.bucket.arn}",
  71. "${aws_s3_bucket.bucket.arn}/*"
  72. ]
  73. }
  74. ]
  75. }
  76. POLICY
  77. }