policy-mdr_terraformer.tf 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #------------------------------------------------------------------------------------------
  2. # A variant on PowerUserAccess that isn't so damn generous with sts:assumeRole
  3. #------------------------------------------------------------------------------------------
  4. data "aws_iam_policy_document" "mdr_terraformer" {
  5. statement {
  6. sid = "AllowEverythingButAssumeRoleAndPassRole"
  7. effect = "Allow"
  8. not_actions = [
  9. "sts:AssumeRole",
  10. "iam:PassRole",
  11. ]
  12. resources = [
  13. "*"
  14. ]
  15. }
  16. statement {
  17. sid = "AllowPassRoleForSpecificRoleTypes"
  18. effect = "Allow"
  19. actions = [
  20. "iam:PassRole",
  21. ]
  22. # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
  23. resources = [
  24. "arn:${local.aws_partition}:iam::${local.aws_account}:role/instance/*",
  25. "arn:${local.aws_partition}:iam::${local.aws_account}:role/lambda/*",
  26. "arn:${local.aws_partition}:iam::${local.aws_account}:role/aws_services/*",
  27. "arn:${local.aws_partition}:iam::${local.aws_account}:role/fargate/*",
  28. ]
  29. }
  30. statement {
  31. sid = "AllowPassRoleForLegacyAccountRoles"
  32. effect = "Allow"
  33. actions = [
  34. "iam:PassRole",
  35. ]
  36. resources = [
  37. "arn:${local.aws_partition}:iam::${local.aws_account}:role/vault-instance-role",
  38. "arn:${local.aws_partition}:iam::${local.aws_account}:role/splunk-aws-instance-role",
  39. "arn:${local.aws_partition}:iam::${local.aws_account}:role/salt-master-instance-role",
  40. "arn:${local.aws_partition}:iam::${local.aws_account}:role/portal-instance-role",
  41. "arn:${local.aws_partition}:iam::${local.aws_account}:role/portal-data-sync-lambda-role",
  42. "arn:${local.aws_partition}:iam::${local.aws_account}:role/msoc-default-instance-role",
  43. "arn:${local.aws_partition}:iam::${local.aws_account}:role/ecsFargateTaskExecutionRole",
  44. "arn:${local.aws_partition}:iam::${local.aws_account}:role/dlm-lifecycle-role",
  45. "arn:${local.aws_partition}:iam::${local.aws_account}:role/codebuild_role",
  46. ]
  47. }
  48. statement {
  49. sid = "AssumeThisRoleInOtherAccounts"
  50. effect = "Allow"
  51. actions = [
  52. "sts:AssumeRole"
  53. ]
  54. # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
  55. resources = [
  56. "arn:${local.aws_partition}:iam::*:role/user/mdr_terraformer",
  57. # These two are the legacy roles in the older AWS accounts.
  58. # Adding them in the hope we'll be able to get AssumeRole from
  59. # one central place to everything...
  60. "arn:${local.aws_partition}:iam::*:role/mdr_powerusers",
  61. "arn:${local.aws_partition}:iam::*:role/mdr_iam_admins",
  62. ]
  63. }
  64. }
  65. resource "aws_iam_policy" "mdr_terraformer" {
  66. name = "mdr_terraformer"
  67. path = "/user/"
  68. policy = data.aws_iam_policy_document.mdr_terraformer.json
  69. }