main.tf 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. locals {
  2. bucket_name = "xdr-${var.splunk_prefix}-${var.environment}-splunk-frozen"
  3. accounts = [var.aws_account_id]
  4. account_arns = [for a in local.accounts : "arn:${var.aws_partition}:iam::${a}:root"]
  5. }
  6. resource "aws_s3_bucket" "bucket" {
  7. bucket = local.bucket_name
  8. acl = "private"
  9. versioning {
  10. enabled = false
  11. }
  12. tags = merge(var.standard_tags, var.tags)
  13. #logging {
  14. # target_bucket = "dps-s3-logs"
  15. # target_prefix = "aws_terraform_s3_state_access_logs/"
  16. #}
  17. lifecycle_rule {
  18. id = "GLACIER"
  19. enabled = true
  20. abort_incomplete_multipart_upload_days = 2
  21. transition {
  22. days = 30
  23. storage_class = "GLACIER"
  24. ### Cheaper storage
  25. #storage_class= "DEEP_ARCHIVE"
  26. }
  27. expiration {
  28. # Discard after 18 months per OMB memo
  29. # 18 months in days is 547, rounding up to 550
  30. days = 550
  31. }
  32. }
  33. server_side_encryption_configuration {
  34. rule {
  35. apply_server_side_encryption_by_default {
  36. kms_master_key_id = aws_kms_key.bucketkey.arn
  37. sse_algorithm = "aws:kms"
  38. }
  39. }
  40. }
  41. }
  42. resource "aws_s3_bucket_public_access_block" "public_access_block" {
  43. bucket = aws_s3_bucket.bucket.id
  44. block_public_acls = true
  45. block_public_policy = true
  46. ignore_public_acls = true
  47. restrict_public_buckets = true
  48. # Not technically dependent, but prevents a "Conflicting conditional operation" conflict.
  49. # See https://github.com/hashicorp/terraform-provider-aws/issues/7628
  50. depends_on = [aws_s3_bucket_policy.policy]
  51. }
  52. resource "aws_s3_bucket_policy" "policy" {
  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.account_arns)}
  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. }