lambda.fcm-analysis-EbsEncryptionByDefault.tf 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #Allowed: arn:aws:iam::*:role/fcm/fcm-analysis-EbsEncryptionByDefault
  2. #Actual: arn:aws:iam::082012130604:role/fcm/fcm-analysis-EbsEncryptionByDefault
  3. #
  4. #Role trust: arn:aws:iam::082012130604:role/fcm/fcm-lambda-analysis-EbsEncryptionByDefault
  5. #Actual: arn:aws:iam::082012130604:role/fcm/fcm-lambda-analysis-EbsEncryptionByDefault
  6. # All Accounts Role
  7. resource "aws_iam_role" "fcm-analysis-EbsEncryptionByDefault" {
  8. name = "fcm-analysis-EbsEncryptionByDefault"
  9. path = "/fcm/"
  10. description = "FCM role for EbsEncryptionByDefault Enforcement Analysis"
  11. assume_role_policy = <<DOC1
  12. {
  13. "Version": "2012-10-17",
  14. "Statement": [
  15. {
  16. "Action": "sts:AssumeRole",
  17. "Principal": {
  18. "AWS": [
  19. "${aws_iam_role.fcm-lambda-analysis-EbsEncryptionByDefault.arn}"
  20. ]
  21. },
  22. "Effect": "Allow",
  23. "Sid": ""
  24. }
  25. ]
  26. }
  27. DOC1
  28. }
  29. resource "aws_iam_policy" "fcm-analysis-EbsEncryptionByDefault" {
  30. name = "fcm-analysis-EbsEncryptionByDefault"
  31. path = "/fcm/"
  32. description = "FCM policy for EbsEncryptionByDefault Enforcement Analysis"
  33. policy = <<DOC2
  34. {
  35. "Version": "2012-10-17",
  36. "Statement": [
  37. {
  38. "Sid": "FunctionSpecific",
  39. "Effect": "Allow",
  40. "Action": [
  41. "ec2:GetEbsEncryptionByDefault"
  42. ],
  43. "Resource": "*"
  44. }
  45. ]
  46. }
  47. DOC2
  48. }
  49. resource "aws_iam_role_policy_attachment" "fcm-analysis-EbsEncryptionByDefault" {
  50. role = "${aws_iam_role.fcm-analysis-EbsEncryptionByDefault.name}"
  51. policy_arn = "${aws_iam_policy.fcm-analysis-EbsEncryptionByDefault.arn}"
  52. }
  53. ### ABOVE needs to be in all accounts.
  54. # Master Account Only:
  55. resource "aws_iam_role" "fcm-lambda-analysis-EbsEncryptionByDefault" {
  56. name = "fcm-lambda-analysis-EbsEncryptionByDefault"
  57. path = "/fcm/"
  58. description = "FCM policy for EbsEncryptionByDefault Enforcement Analysis Lambda Function"
  59. assume_role_policy = <<DOC3
  60. {
  61. "Version": "2012-10-17",
  62. "Statement": [
  63. {
  64. "Action": "sts:AssumeRole",
  65. "Principal": {
  66. "Service": "lambda.amazonaws.com"
  67. },
  68. "Effect": "Allow",
  69. "Sid": ""
  70. }
  71. ]
  72. }
  73. DOC3
  74. }
  75. resource "aws_iam_policy" "fcm-lambda-analysis-EbsEncryptionByDefault" {
  76. name = "fcm-lambda-analysis-EbsEncryptionByDefault"
  77. path = "/fcm/"
  78. description = "FCM policy the lambda function EbsEncryptionByDefault"
  79. policy = <<DOC4
  80. {
  81. "Version": "2012-10-17",
  82. "Statement": [
  83. {
  84. "Sid": "AssumeROle",
  85. "Effect": "Allow",
  86. "Action": [
  87. "sts:AssumeRole"
  88. ],
  89. "Resource": "arn:aws:iam::*:role/fcm/fcm-analysis-EbsEncryptionByDefault"
  90. }
  91. ]
  92. }
  93. DOC4
  94. }
  95. resource "aws_iam_role_policy_attachment" "fcm-lambda-analysis-EbsEncryptionByDefault" {
  96. role = "${aws_iam_role.fcm-lambda-analysis-EbsEncryptionByDefault.name}"
  97. policy_arn = "${aws_iam_policy.fcm-lambda-analysis-EbsEncryptionByDefault.arn}"
  98. }
  99. resource "aws_iam_role_policy_attachment" "fcm-lambda-analysis-EbsEncryptionByDefault-shared" {
  100. role = "${aws_iam_role.fcm-lambda-analysis-EbsEncryptionByDefault.name}"
  101. policy_arn = "${aws_iam_policy.fcm-lambda-base.arn}"
  102. }
  103. # End of Roles
  104. # Function
  105. resource "aws_lambda_function" "fcm-analysis-EbsEncryptionByDefault" {
  106. filename = "fcm-analysis-EbsEncryptionByDefault.zip"
  107. function_name = "fcm-analysis-EbsEncryptionByDefault"
  108. role = "${aws_iam_role.fcm-lambda-analysis-EbsEncryptionByDefault.arn}"
  109. handler = "EbsEncryptionByDefault.lambda_handler"
  110. # The filebase64sha256() function is available in Terraform 0.11.12 and later
  111. # For Terraform 0.11.11 and earlier, use the base64sha256() function and the file() function:
  112. # source_code_hash = "${base64sha256(file("lambda_function_payload.zip"))}"
  113. source_code_hash = "${data.archive_file.fcm-analysis-EbsEncryptionByDefault.output_base64sha256}"
  114. runtime = "python3.7"
  115. memory_size = 128 # 64MB increments
  116. timeout = 30 # Seconds
  117. environment {
  118. variables = {
  119. LOGLEVEL = "DEBUG"
  120. }
  121. }
  122. }
  123. resource "aws_lambda_event_source_mapping" "fcm-analysis-EbsEncryptionByDefault" {
  124. event_source_arn = "${aws_sqs_queue.fcm-analysis-EbsEncryptionByDefault.arn}"
  125. function_name = "${aws_lambda_function.fcm-analysis-EbsEncryptionByDefault.arn}"
  126. batch_size = 1 # How many messages to process at a time
  127. }
  128. data "archive_file" "fcm-analysis-EbsEncryptionByDefault" {
  129. type = "zip"
  130. source_dir = "fcm-analysis-EbsEncryptionByDefault"
  131. output_path = "fcm-analysis-EbsEncryptionByDefault.zip"
  132. }