s3-emr.tf 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # Prepares the S3 bucket for object storage
  2. # tfsec:ignore:aws-s3-enable-bucket-logging - We should log, but we don't
  3. resource "aws_s3_bucket" "s3_emr" {
  4. # checkov:skip=CKV_AWS_18:checkov also things we should log.
  5. bucket_prefix = replace("${local.unique_id}-", "_", "-") # No underscores in s3 names
  6. #logging {
  7. # target_bucket = "target-bucket"
  8. #}
  9. tags = merge(local.tags, { Prefix = local.unique_id })
  10. }
  11. resource "aws_s3_bucket_versioning" "s3_emr" {
  12. bucket = aws_s3_bucket.s3_emr.id
  13. versioning_configuration {
  14. status = "Enabled"
  15. }
  16. }
  17. resource "aws_s3_bucket_server_side_encryption_configuration" "s3_emr" {
  18. bucket = aws_s3_bucket.s3_emr.bucket
  19. rule {
  20. apply_server_side_encryption_by_default {
  21. #kms_master_key_id = "aws/s3" # Better to use a cmk
  22. sse_algorithm = "aws:kms"
  23. }
  24. }
  25. }
  26. resource "aws_s3_bucket_acl" "s3_emr" {
  27. bucket = aws_s3_bucket.s3_emr.id
  28. acl = "private"
  29. }
  30. resource "aws_s3_bucket_public_access_block" "s3_emr" {
  31. bucket = aws_s3_bucket.s3_emr.id
  32. block_public_acls = true
  33. block_public_policy = true
  34. ignore_public_acls = true
  35. restrict_public_buckets = true
  36. }
  37. # Clean up incomplete uploads. These files aren't big enough to benefit from IA pricing
  38. # and RRS is more expensive than standard.
  39. resource "aws_s3_bucket_lifecycle_configuration" "s3_emr" {
  40. bucket = aws_s3_bucket.s3_emr.id
  41. rule {
  42. id = "AbortIncomplete"
  43. status = "Enabled"
  44. abort_incomplete_multipart_upload {
  45. days_after_initiation = 7
  46. }
  47. }
  48. rule {
  49. id = "DeleteAfter"
  50. status = "Enabled"
  51. expiration {
  52. days = 7
  53. }
  54. }
  55. }
  56. resource "aws_s3_object" "food-services" {
  57. bucket = aws_s3_bucket.s3_emr.id
  58. key = "aws_examples/food_establishment_data.csv"
  59. source = "data/food_establishment_data.csv"
  60. source_hash = filemd5("data/food_establishment_data.csv") # Update if this changes
  61. tags = local.tags
  62. }