kms.tf 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. resource "aws_kms_key" "bucketkey" {
  2. description = "S3 KMS for ${local.fullname}."
  3. deletion_window_in_days = 30
  4. enable_key_rotation = true
  5. policy = data.aws_iam_policy_document.kms_key_policy.json
  6. tags = merge(var.standard_tags, var.tags)
  7. }
  8. resource "aws_kms_alias" "bucketkey" {
  9. name = "alias/${var.name}"
  10. target_key_id = aws_kms_key.bucketkey.key_id
  11. }
  12. data "aws_iam_policy_document" "kms_key_policy" {
  13. depends_on = [ aws_iam_role.role ]
  14. policy_id = local.fullname
  15. statement {
  16. sid = "Enable IAM User Permissions"
  17. effect = "Allow"
  18. principals {
  19. type = "AWS"
  20. identifiers = local.principals
  21. }
  22. actions = ["kms:*"]
  23. resources = ["*"]
  24. }
  25. statement {
  26. sid = "Allow access for Engineers"
  27. effect = "Allow"
  28. principals {
  29. type = "AWS"
  30. identifiers = [
  31. "arn:${var.aws_partition}:iam::${var.aws_account_id}:user/MDRAdmin",
  32. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/user/mdr_terraformer",
  33. ]
  34. }
  35. actions = [
  36. "kms:Create*",
  37. "kms:Describe*",
  38. "kms:Enable*",
  39. "kms:List*",
  40. "kms:Put*",
  41. "kms:Update*",
  42. "kms:Revoke*",
  43. "kms:Disable*",
  44. "kms:Get*",
  45. "kms:Delete*",
  46. "kms:TagResource",
  47. "kms:UntagResource",
  48. "kms:ScheduleKeyDeletion",
  49. "kms:CancelKeyDeletion"
  50. ]
  51. resources = ["*"]
  52. }
  53. statement {
  54. sid = "Allow use of the key to encrypt and decrypt"
  55. effect = "Allow"
  56. principals {
  57. type = "AWS"
  58. identifiers = local.principals
  59. }
  60. actions = [
  61. "kms:Encrypt",
  62. "kms:Decrypt",
  63. "kms:ReEncrypt*",
  64. "kms:GenerateDataKey*",
  65. "kms:DescribeKey"
  66. ]
  67. resources = ["*"]
  68. }
  69. statement {
  70. sid = "Allow attachment of persistent resources"
  71. effect = "Allow"
  72. principals {
  73. type = "AWS"
  74. identifiers = [
  75. "arn:${var.aws_partition}:iam::${var.aws_account_id}:user/MDRAdmin",
  76. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/user/mdr_terraformer",
  77. ]
  78. }
  79. actions = [
  80. "kms:CreateGrant",
  81. "kms:ListGrants",
  82. "kms:RevokeGrant"
  83. ]
  84. resources = ["*"]
  85. condition {
  86. test = "Bool"
  87. variable = "kms:GrantIsForAWSResource"
  88. values = ["true"]
  89. }
  90. }
  91. }