policy-mdradmin_tfstate_setup.tf 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. resource "aws_iam_policy" "mdradmin_tfstate_setup" {
  2. name = "mdradmmin_tfstate_setup"
  3. path = "/bootstrap/"
  4. description = "Gives MDRAdmin account rights needed to set up tfstate management"
  5. policy = data.aws_iam_policy_document.mdradmin_tfstate_setup.json
  6. }
  7. data "aws_iam_policy_document" "mdradmin_tfstate_setup" {
  8. statement {
  9. sid = "DynamoDBTablesAndLocking"
  10. actions = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
  11. "dynamodb:*"
  12. ]
  13. resources = [
  14. "arn:${local.aws_partition}:dynamodb:${local.aws_region}:${local.aws_account}:table/${var.lock_table_name}"
  15. ]
  16. condition {
  17. test = "BoolIfExists"
  18. variable = "aws:MultiFactorAuthPresent"
  19. values = [
  20. true
  21. ]
  22. }
  23. }
  24. statement {
  25. sid = "DynamoDBTablesAndLocking2"
  26. actions = [
  27. "dynamodb:ListTables"
  28. ]
  29. resources = [
  30. "arn:${local.aws_partition}:dynamodb:${local.aws_region}:${local.aws_account}:table/*"
  31. ]
  32. condition {
  33. test = "BoolIfExists"
  34. variable = "aws:MultiFactorAuthPresent"
  35. values = [
  36. true
  37. ]
  38. }
  39. }
  40. statement {
  41. sid = "KMSKeyCreate"
  42. actions = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
  43. "kms:CreateAlias",
  44. "kms:CreateKey",
  45. "kms:List*",
  46. "kms:DeleteAlias",
  47. "kms:DeleteKey"
  48. ]
  49. # I wish I could scope this down to just specific keys
  50. # But I don't think it's possible
  51. # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
  52. resources = [
  53. "*"
  54. ]
  55. condition {
  56. test = "BoolIfExists"
  57. variable = "aws:MultiFactorAuthPresent"
  58. values = [
  59. true
  60. ]
  61. }
  62. }
  63. statement {
  64. sid = "S3ManageStateBucket"
  65. actions = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
  66. "s3:CreateBucket",
  67. "s3:DeleteBucket",
  68. "s3:ListBucket",
  69. "s3:Get*",
  70. "s3:Put*"
  71. ]
  72. resources = [
  73. "arn:${local.aws_partition}:s3:::${var.bucket_name}"
  74. ]
  75. condition {
  76. test = "BoolIfExists"
  77. variable = "aws:MultiFactorAuthPresent"
  78. values = [
  79. true
  80. ]
  81. }
  82. }
  83. statement { # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
  84. sid = "S3ObjectOperations"
  85. actions = [
  86. "s3:PutObject*",
  87. "s3:GetObject*",
  88. "s3:DeleteObject*"
  89. ]
  90. # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
  91. resources = [
  92. "arn:${local.aws_partition}:s3:::${var.bucket_name}/*"
  93. ]
  94. condition {
  95. test = "BoolIfExists"
  96. variable = "aws:MultiFactorAuthPresent"
  97. values = [
  98. true
  99. ]
  100. }
  101. }
  102. }