s3.tf 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # tfsec:ignore:aws-s3-enable-bucket-logging TODO: enable everywhere at a later date if required
  2. resource "aws_s3_bucket" "tfstate" {
  3. # checkov:skip=CKV_AWS_18: see tfsec S3 logging above
  4. # checkov:skip=CKV_AWS_144: Cross-region replication TODO
  5. bucket = var.bucket_name
  6. depends_on = [var.module_depends_on]
  7. }
  8. resource "aws_s3_bucket_acl" "s3_acl_tfstate" {
  9. bucket = aws_s3_bucket.tfstate.id
  10. acl = "private"
  11. }
  12. resource "aws_s3_bucket_versioning" "s3_version_tfstate" {
  13. bucket = aws_s3_bucket.tfstate.id
  14. versioning_configuration {
  15. status = "Enabled"
  16. }
  17. }
  18. # FIXME: Does this keep a cross-account dependency?
  19. #logging {
  20. #target_bucket = "dps-s3-logs"
  21. #target_prefix = "aws_terraform_s3_state_access_logs/"
  22. #}
  23. resource "aws_s3_bucket_lifecycle_configuration" "s3_lifecyle_tfstate" {
  24. bucket = aws_s3_bucket.tfstate.id
  25. rule {
  26. status = "Enabled"
  27. abort_incomplete_multipart_upload {
  28. days_after_initiation = 7
  29. }
  30. noncurrent_version_transition {
  31. noncurrent_days = 30
  32. storage_class = "STANDARD_IA"
  33. }
  34. noncurrent_version_expiration {
  35. noncurrent_days = 730
  36. }
  37. }
  38. }
  39. resource "aws_s3_bucket_server_side_encryption_configuration" "s3_sse_tfstate" {
  40. bucket = aws_s3_bucket.tfstate.id
  41. rule {
  42. apply_server_side_encryption_by_default {
  43. kms_master_key_id = aws_kms_key.tfstate.arn
  44. sse_algorithm = "aws:kms"
  45. }
  46. }
  47. }
  48. resource "aws_s3_bucket_public_access_block" "tfstate" {
  49. bucket = aws_s3_bucket.tfstate.id
  50. block_public_acls = true
  51. block_public_policy = true
  52. ignore_public_acls = true
  53. restrict_public_buckets = true
  54. }
  55. //AWS Provider outdated arguments <4.4.0
  56. /*resource "aws_s3_bucket" "tfstate" {
  57. bucket = var.bucket_name
  58. acl = "private"
  59. depends_on = [ var.module_depends_on ]
  60. versioning {
  61. enabled = true
  62. }
  63. # FIXME: Does this keep a cross-account dependency?
  64. #logging {
  65. #target_bucket = "dps-s3-logs"
  66. #target_prefix = "aws_terraform_s3_state_access_logs/"
  67. #}
  68. lifecycle_rule {
  69. enabled = true
  70. prefix = ""
  71. abort_incomplete_multipart_upload_days = 7
  72. noncurrent_version_transition {
  73. days = 30
  74. storage_class = "STANDARD_IA"
  75. }
  76. noncurrent_version_expiration {
  77. days = 730
  78. }
  79. }
  80. server_side_encryption_configuration {
  81. rule {
  82. apply_server_side_encryption_by_default {
  83. kms_master_key_id = aws_kms_key.tfstate.arn
  84. sse_algorithm = "aws:kms"
  85. }
  86. }
  87. }
  88. }
  89. */