main.tf 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # Roles carried over from the tf11 code have been commented out but may
  2. # need to be re-added.
  3. #
  4. # HOWEVER, it would be better to simply create an additional KMS key
  5. # with the corresponding service. This key is available as a fallback,
  6. # but better to create one per service.
  7. resource "aws_kms_key" "key" {
  8. description = var.description
  9. enable_key_rotation = true
  10. policy = data.aws_iam_policy_document.kms_policy.json
  11. tags = merge(
  12. var.standard_tags,
  13. { "Name" = var.name },
  14. var.tags
  15. )
  16. }
  17. resource "aws_kms_alias" "alias" {
  18. name = var.alias
  19. target_key_id = aws_kms_key.key.key_id
  20. }
  21. locals {
  22. iam_admins_legacy = ["arn:${var.aws_partition}:iam::${var.aws_account_id}:root"]
  23. iam_admins_tf12 = [
  24. "arn:${var.aws_partition}:iam::${var.aws_account_id}:user/MDRAdmin", # MDRAdmin as a break glass
  25. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/user/mdr_terraformer" # Terraformer always gets full access
  26. ]
  27. }
  28. data "aws_iam_policy_document" "kms_policy" {
  29. policy_id = "${var.name}-policy"
  30. statement {
  31. sid = "Enable IAM User Permissions"
  32. effect = "Allow"
  33. principals {
  34. type = "AWS"
  35. identifiers = var.is_legacy ? local.iam_admins_legacy : local.iam_admins_tf12
  36. }
  37. actions = ["kms:*"]
  38. resources = ["*"]
  39. }
  40. statement {
  41. sid = "Allow access for Key Administrators"
  42. effect = "Allow"
  43. principals {
  44. type = "AWS"
  45. identifiers = concat(var.key_admin_arns, ["arn:${var.aws_partition}:iam::${var.aws_account_id}:role/user/mdr_terraformer"])
  46. }
  47. actions = [
  48. "kms:Create*",
  49. "kms:Describe*",
  50. "kms:Enable*",
  51. "kms:List*",
  52. "kms:Put*",
  53. "kms:Update*",
  54. "kms:Revoke*",
  55. "kms:Disable*",
  56. "kms:Get*",
  57. "kms:Delete*",
  58. "kms:TagResource",
  59. "kms:UntagResource",
  60. "kms:ScheduleKeyDeletion",
  61. "kms:CancelKeyDeletion"
  62. ]
  63. resources = ["*"]
  64. }
  65. statement {
  66. sid = "Allow use of the key"
  67. effect = "Allow"
  68. principals {
  69. type = "AWS"
  70. identifiers = concat(
  71. var.key_user_arns,
  72. ["arn:${var.aws_partition}:iam::${var.aws_account_id}:role/user/mdr_terraformer",
  73. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling",
  74. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/dlm-lifecycle-role"
  75. ]
  76. )
  77. }
  78. actions = [
  79. "kms:Encrypt",
  80. "kms:Decrypt",
  81. "kms:ReEncrypt*",
  82. "kms:GenerateDataKey*",
  83. "kms:DescribeKey"
  84. ]
  85. resources = ["*"]
  86. }
  87. statement {
  88. sid = "Allow attachment of persistent resources"
  89. effect = "Allow"
  90. principals {
  91. type = "AWS"
  92. identifiers = concat(
  93. var.key_attacher_arns,
  94. [
  95. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/user/mdr_terraformer",
  96. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling",
  97. "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/dlm-lifecycle-role"
  98. ]
  99. )
  100. }
  101. actions = [
  102. "kms:CreateGrant",
  103. "kms:ListGrants",
  104. "kms:RevokeGrant"
  105. ]
  106. resources = ["*"]
  107. condition {
  108. test = "Bool"
  109. variable = "kms:GrantIsForAWSResource"
  110. values = ["true"]
  111. }
  112. }
  113. }