section-1_5.tf 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. resource "aws_iam_account_password_policy" "cis" {
  2. # 1.5
  3. require_uppercase_characters = var.iam_require_uppercase_characters
  4. # 1.6
  5. require_lowercase_characters = var.iam_require_lowercase_characters
  6. # 1.7
  7. require_symbols = var.iam_require_symbols
  8. # 1.8
  9. require_numbers = var.iam_require_numbers
  10. # 1.9
  11. minimum_password_length = var.iam_minimum_password_length
  12. # 1.10
  13. password_reuse_prevention = var.iam_password_reuse_prevention
  14. # 1.11
  15. max_password_age = var.iam_max_password_age
  16. allow_users_to_change_password = var.iam_allow_users_to_change_password
  17. hard_expiry = var.iam_hard_expiry
  18. }
  19. # Password policy check function
  20. ## IAM Policy
  21. data "template_file" "password_policy_check_policy" {
  22. template = file("${path.module}/templates/lambda_password_policy_check_policy.json.tpl")
  23. }
  24. resource "aws_iam_role" "password_policy_check" {
  25. name = "${var.resource_name_prefix}-password-policy-check"
  26. path = "/lambda/"
  27. assume_role_policy = data.template_file.iam_lambda_assume_role_policy.rendered
  28. }
  29. resource "aws_iam_role_policy" "password_policy_check" {
  30. name = "${var.resource_name_prefix}-lambda-password-policy-check"
  31. role = aws_iam_role.password_policy_check.id
  32. policy = data.template_file.password_policy_check_policy.rendered
  33. }
  34. ## /IAM Policy
  35. ## Create the function
  36. data "archive_file" "password_policy_check" {
  37. type = "zip"
  38. source_file = "${path.module}/files/password_policy_check.py"
  39. output_path = "${var.temp_artifacts_dir}/password_policy_check.zip"
  40. }
  41. resource "aws_lambda_function" "password_policy_check" {
  42. filename = "${var.temp_artifacts_dir}/password_policy_check.zip"
  43. function_name = "${var.resource_name_prefix}-password-policy-check"
  44. role = aws_iam_role.password_policy_check.arn
  45. handler = "password_policy_check.lambda_handler"
  46. source_code_hash = data.archive_file.password_policy_check.output_base64sha256
  47. runtime = "python2.7"
  48. timeout = var.lambda_timeout
  49. environment {
  50. variables = {
  51. REQUIRE_UPPERCASE_CHARACTERS = var.iam_require_uppercase_characters
  52. REQUIRE_LOWERCASE_CHARACTERS = var.iam_require_lowercase_characters
  53. REQUIRE_SYMBOLS = var.iam_require_symbols
  54. REQUIRE_NUMBERS = var.iam_require_numbers
  55. MINIMUM_PASSWORD_LENGTH = var.iam_minimum_password_length
  56. PASSWORD_REUSE_PREVENTION = var.iam_password_reuse_prevention
  57. MAX_PASSWORD_AGE = var.iam_max_password_age
  58. ALLOW_USERS_TO_CHANGE_PASSWORD = var.iam_allow_users_to_change_password
  59. HARD_EXPIRY = var.iam_hard_expiry
  60. }
  61. }
  62. tags = merge(var.standard_tags, var.tags)
  63. }
  64. ## /Create the function
  65. ## Schedule the lambda function
  66. resource "aws_cloudwatch_event_rule" "password_policy_check" {
  67. name = "${var.resource_name_prefix}-password-policy-check"
  68. description = "Check if password policy is in desired state"
  69. schedule_expression = var.lambda_cron_schedule
  70. }
  71. resource "aws_cloudwatch_event_target" "password_policy_check" {
  72. rule = aws_cloudwatch_event_rule.password_policy_check.name
  73. target_id = "${var.resource_name_prefix}-password-policy-check"
  74. arn = aws_lambda_function.password_policy_check.arn
  75. }
  76. resource "aws_lambda_permission" "password_policy_check" {
  77. statement_id = "AllowExecutionFromCloudWatch"
  78. action = "lambda:InvokeFunction"
  79. function_name = aws_lambda_function.password_policy_check.function_name
  80. principal = "events.amazonaws.com"
  81. source_arn = aws_cloudwatch_event_rule.password_policy_check.arn
  82. }
  83. ## /Schedule the lambda function
  84. # /Password policy check function