main.tf 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. locals {
  2. bucket_name = "xdr-${var.splunk_prefix}-${var.environment}-splunk-apps"
  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 = "APPS_POLICY"
  19. enabled = true
  20. abort_incomplete_multipart_upload_days = 2
  21. transition {
  22. days = 30
  23. storage_class = "INTELLIGENT_TIERING"
  24. }
  25. # expiration {
  26. # days = 365
  27. # }
  28. }
  29. server_side_encryption_configuration {
  30. rule {
  31. apply_server_side_encryption_by_default {
  32. kms_master_key_id = aws_kms_key.bucketkey.arn
  33. sse_algorithm = "aws:kms"
  34. }
  35. }
  36. }
  37. }
  38. resource "aws_s3_bucket_public_access_block" "public_access_block" {
  39. bucket = aws_s3_bucket.bucket.id
  40. block_public_acls = true
  41. block_public_policy = true
  42. ignore_public_acls = true
  43. restrict_public_buckets = true
  44. # Not technically dependent, but prevents a "Conflicting conditional operation" conflict.
  45. # See https://github.com/hashicorp/terraform-provider-aws/issues/7628
  46. depends_on = [aws_s3_bucket_policy.policy]
  47. }
  48. data "aws_iam_policy_document" "policy" {
  49. statement {
  50. sid = "AccountAllow"
  51. effect = "Allow"
  52. resources = [
  53. "${aws_s3_bucket.bucket.arn}",
  54. "${aws_s3_bucket.bucket.arn}/*"
  55. ]
  56. actions = [
  57. "s3:GetObject",
  58. "s3:ListBucket",
  59. ]
  60. principals {
  61. type = "AWS"
  62. identifiers = local.account_arns
  63. }
  64. }
  65. }
  66. resource "aws_s3_bucket_policy" "policy" {
  67. bucket = aws_s3_bucket.bucket.id
  68. policy = data.aws_iam_policy_document.policy.json
  69. }