iam.tf 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. ###
  2. # IAM Role setups
  3. ###
  4. # IAM role for EMR Service
  5. resource "aws_iam_role" "iam_emr_service_role" {
  6. name_prefix = local.unique_id
  7. assume_role_policy = <<EOF
  8. {
  9. "Version": "2008-10-17",
  10. "Statement": [
  11. {
  12. "Sid": "",
  13. "Effect": "Allow",
  14. "Principal": {
  15. "Service": "elasticmapreduce.amazonaws.com"
  16. },
  17. "Action": "sts:AssumeRole"
  18. }
  19. ]
  20. }
  21. EOF
  22. }
  23. data "aws_iam_policy_document" "iam_emr_service_policy" {
  24. statement {
  25. sid = ""
  26. effect = "Allow"
  27. resources = ["*"]
  28. actions = [
  29. "ec2:AuthorizeSecurityGroupEgress",
  30. "ec2:AuthorizeSecurityGroupIngress",
  31. "ec2:CancelSpotInstanceRequests",
  32. "ec2:CreateNetworkInterface",
  33. "ec2:CreateSecurityGroup",
  34. "ec2:CreateTags",
  35. "ec2:DeleteNetworkInterface",
  36. "ec2:DeleteSecurityGroup",
  37. "ec2:DeleteTags",
  38. "ec2:DescribeAvailabilityZones",
  39. "ec2:DescribeAccountAttributes",
  40. "ec2:DescribeDhcpOptions",
  41. "ec2:DescribeInstanceStatus",
  42. "ec2:DescribeInstances",
  43. "ec2:DescribeKeyPairs",
  44. "ec2:DescribeNetworkAcls",
  45. "ec2:DescribeNetworkInterfaces",
  46. "ec2:DescribePrefixLists",
  47. "ec2:DescribeRouteTables",
  48. "ec2:DescribeSecurityGroups",
  49. "ec2:DescribeSpotInstanceRequests",
  50. "ec2:DescribeSpotPriceHistory",
  51. "ec2:DescribeSubnets",
  52. "ec2:DescribeVpcAttribute",
  53. "ec2:DescribeVpcEndpoints",
  54. "ec2:DescribeVpcEndpointServices",
  55. "ec2:DescribeVpcs",
  56. "ec2:DetachNetworkInterface",
  57. "ec2:ModifyImageAttribute",
  58. "ec2:ModifyInstanceAttribute",
  59. "ec2:RequestSpotInstances",
  60. "ec2:RevokeSecurityGroupEgress",
  61. "ec2:RunInstances",
  62. "ec2:TerminateInstances",
  63. "ec2:DeleteVolume",
  64. "ec2:DescribeVolumeStatus",
  65. "ec2:DescribeVolumes",
  66. "ec2:DetachVolume",
  67. "iam:GetRole",
  68. "iam:GetRolePolicy",
  69. "iam:ListInstanceProfiles",
  70. "iam:ListRolePolicies",
  71. "iam:PassRole",
  72. "s3:*",
  73. "sdb:BatchPutAttributes",
  74. "sdb:Select",
  75. "sqs:CreateQueue",
  76. "sqs:Delete*",
  77. "sqs:GetQueue*",
  78. "sqs:PurgeQueue",
  79. "sqs:ReceiveMessage",
  80. ]
  81. }
  82. }
  83. resource "aws_iam_role_policy" "iam_emr_service_policy" {
  84. name_prefix = local.unique_id
  85. role = aws_iam_role.iam_emr_service_role.id
  86. policy = data.aws_iam_policy_document.iam_emr_service_policy.json
  87. }
  88. # IAM Role for EC2 Instance Profile
  89. resource "aws_iam_role" "iam_emr_profile_role" {
  90. name_prefix = local.unique_id
  91. assume_role_policy = <<EOF
  92. {
  93. "Version": "2008-10-17",
  94. "Statement": [
  95. {
  96. "Sid": "",
  97. "Effect": "Allow",
  98. "Principal": {
  99. "Service": "ec2.amazonaws.com"
  100. },
  101. "Action": "sts:AssumeRole"
  102. }
  103. ]
  104. }
  105. EOF
  106. }
  107. resource "aws_iam_instance_profile" "emr_profile" {
  108. name_prefix = local.unique_id
  109. role = aws_iam_role.iam_emr_profile_role.name
  110. }
  111. data "aws_iam_policy_document" "iam_emr_profile_policy" {
  112. statement {
  113. sid = ""
  114. effect = "Allow"
  115. resources = ["*"]
  116. actions = [
  117. "cloudwatch:*",
  118. "dynamodb:*",
  119. "ec2:Describe*",
  120. "elasticmapreduce:Describe*",
  121. "elasticmapreduce:ListBootstrapActions",
  122. "elasticmapreduce:ListClusters",
  123. "elasticmapreduce:ListInstanceGroups",
  124. "elasticmapreduce:ListInstances",
  125. "elasticmapreduce:ListSteps",
  126. "kinesis:CreateStream",
  127. "kinesis:DeleteStream",
  128. "kinesis:DescribeStream",
  129. "kinesis:GetRecords",
  130. "kinesis:GetShardIterator",
  131. "kinesis:MergeShards",
  132. "kinesis:PutRecord",
  133. "kinesis:SplitShard",
  134. "rds:Describe*",
  135. "s3:*",
  136. "sdb:*",
  137. "sns:*",
  138. "sqs:*",
  139. ]
  140. }
  141. }
  142. resource "aws_iam_role_policy" "iam_emr_profile_policy" {
  143. name_prefix = local.unique_id
  144. role = aws_iam_role.iam_emr_profile_role.id
  145. policy = data.aws_iam_policy_document.iam_emr_profile_policy.json
  146. }