s3.tf 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. resource "aws_s3_bucket" "bucket" {
  2. bucket = "xdr-portal-lambda-${var.environment}"
  3. force_destroy = true
  4. }
  5. resource "aws_s3_bucket_acl" "s3_acl_bucket" {
  6. bucket = aws_s3_bucket.bucket.id
  7. acl = "private"
  8. }
  9. resource "aws_s3_bucket_server_side_encryption_configuration" "s3_sse_bucket" {
  10. bucket = aws_s3_bucket.bucket.id
  11. rule {
  12. apply_server_side_encryption_by_default {
  13. kms_master_key_id = aws_kms_key.key.arn
  14. sse_algorithm = "aws:kms"
  15. }
  16. }
  17. }
  18. resource "aws_s3_bucket_public_access_block" "public_access_block" {
  19. bucket = aws_s3_bucket.bucket.id
  20. block_public_acls = true
  21. block_public_policy = true
  22. ignore_public_acls = true
  23. restrict_public_buckets = true
  24. # Not technically dependent, but prevents a "Conflicting conditional operation" conflict.
  25. # See https://github.com/hashicorp/terraform-provider-aws/issues/7628
  26. depends_on = [aws_s3_bucket_policy.policy]
  27. }
  28. data "aws_iam_policy_document" "s3_policy_document" {
  29. statement {
  30. sid = "AllowS3Access"
  31. actions = ["s3:GetObject", "s3:GetObjectVersion"]
  32. effect = "Allow"
  33. resources = [
  34. "${aws_s3_bucket.bucket.arn}",
  35. "${aws_s3_bucket.bucket.arn}/*"
  36. ]
  37. principals {
  38. type = "AWS"
  39. identifiers = ["arn:${var.aws_partition}:iam::${var.aws_account_id}:root"]
  40. }
  41. }
  42. }
  43. resource "aws_s3_bucket_policy" "policy" {
  44. bucket = aws_s3_bucket.bucket.id
  45. policy = data.aws_iam_policy_document.s3_policy_document.json
  46. }
  47. resource "aws_kms_key" "key" {
  48. description = "Encryption of S3 code for portal-scheduler"
  49. policy = data.aws_iam_policy_document.kms_policy_document.json
  50. enable_key_rotation = true
  51. tags = merge(local.standard_tags, var.tags)
  52. }
  53. data "aws_iam_policy_document" "kms_policy_document" {
  54. statement {
  55. sid = "AllowServices"
  56. effect = "Allow"
  57. principals {
  58. type = "AWS"
  59. identifiers = [
  60. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/user/mdr_terraformer",
  61. "arn:${var.aws_partition}:iam::${var.aws_account_id}:user/MDRAdmin"
  62. ]
  63. }
  64. actions = ["kms:*"]
  65. resources = ["*"]
  66. }
  67. # allow account to modify/manage key
  68. statement {
  69. sid = "AllowThisAccount"
  70. effect = "Allow"
  71. principals {
  72. identifiers = ["arn:${var.aws_partition}:iam::${var.aws_account_id}:root"]
  73. type = "AWS"
  74. }
  75. actions = [
  76. "kms:*"
  77. ]
  78. resources = ["*"]
  79. }
  80. }
  81. resource "aws_kms_alias" "key_alias" {
  82. name = "alias/portal-s3-key"
  83. target_key_id = aws_kms_key.key.key_id
  84. }
  85. //AWS Provider outdated arguments <4.4.0
  86. /*resource "aws_s3_bucket" "bucket" {
  87. bucket = "xdr-portal-lambda-${var.environment}"
  88. force_destroy = true
  89. acl = "private"
  90. server_side_encryption_configuration {
  91. rule {
  92. apply_server_side_encryption_by_default {
  93. kms_master_key_id = aws_kms_key.key.arn
  94. sse_algorithm = "aws:kms"
  95. }
  96. }
  97. }
  98. }
  99. */