01-function-and-mq.tf 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. resource "yandex_iam_service_account_static_access_key" "sa_static_key" {
  2. service_account_id = var.service_account_id
  3. description = "static access key for object storage and s3 "
  4. }
  5. data "archive_file" "function" {
  6. type = "zip"
  7. source_dir = "${path.module}/pusher"
  8. output_path = "${path.module}/pusher.zip"
  9. }
  10. resource "random_string" "project_suffix" {
  11. length = 10
  12. upper = false
  13. lower = true
  14. number = true
  15. special = false
  16. }
  17. #--------AUDIT-----------
  18. resource "yandex_message_queue" "log_queue_for_auditlog" {
  19. count = var.auditlog_enabled ? 1 : 0
  20. access_key = yandex_iam_service_account_static_access_key.sa_static_key.access_key
  21. secret_key = yandex_iam_service_account_static_access_key.sa_static_key.secret_key
  22. name = "log-queue-auditlog-${random_string.project_suffix.result}"
  23. visibility_timeout_seconds = 600
  24. receive_wait_time_seconds = 20
  25. message_retention_seconds = 1209600
  26. }
  27. resource "yandex_function" "s3_ymq_for_auditlog" {
  28. depends_on = [yandex_message_queue.log_queue_for_auditlog]
  29. folder_id = var.folder_id
  30. name = "s3-ymq-auditlog-sync-${random_string.project_suffix.result}"
  31. runtime = "python38"
  32. entrypoint = "main.handler"
  33. memory = "256"
  34. execution_timeout = "30"
  35. environment = {
  36. YMQ_URL = yandex_message_queue.log_queue_for_auditlog[0].id
  37. AWS_ACCESS_KEY_ID = yandex_iam_service_account_static_access_key.sa_static_key.access_key
  38. AWS_SECRET_ACCESS_KEY = yandex_iam_service_account_static_access_key.sa_static_key.secret_key
  39. AUDIT_LOG_PREFIX = var.auditlogs_prefix
  40. }
  41. user_hash = data.archive_file.function.output_base64sha256
  42. content {
  43. zip_filename = data.archive_file.function.output_path
  44. }
  45. }
  46. resource "yandex_function_trigger" "s3_ymq_auditlog_trigger" {
  47. depends_on = [yandex_message_queue.log_queue_for_auditlog,yandex_function.s3_ymq_for_auditlog]
  48. folder_id = var.folder_id
  49. name = "s3-ymq-auditlog-trigger-${random_string.project_suffix.result}"
  50. function {
  51. id = yandex_function.s3_ymq_for_auditlog.id
  52. service_account_id = var.service_account_id
  53. }
  54. object_storage {
  55. bucket_id = var.log_bucket_name
  56. prefix = var.auditlogs_prefix
  57. create = true
  58. update = false
  59. delete = false
  60. }
  61. }
  62. #--------FALCO-----------
  63. resource "yandex_message_queue" "log_queue_for_falco" {
  64. count = var.falco_enabled ? 1 :0
  65. access_key = yandex_iam_service_account_static_access_key.sa_static_key.access_key
  66. secret_key = yandex_iam_service_account_static_access_key.sa_static_key.secret_key
  67. name = "log-queue-falco-${random_string.project_suffix.result}"
  68. visibility_timeout_seconds = 600
  69. receive_wait_time_seconds = 20
  70. message_retention_seconds = 1209600
  71. }
  72. resource "yandex_function" "s3_ymq_for_falco" {
  73. depends_on = [yandex_message_queue.log_queue_for_falco]
  74. folder_id = var.folder_id
  75. name = "s3-ymq-falco-sync-${random_string.project_suffix.result}"
  76. runtime = "python38"
  77. entrypoint = "main.handler"
  78. memory = "256"
  79. execution_timeout = "30"
  80. environment = {
  81. YMQ_URL = yandex_message_queue.log_queue_for_falco[0].id
  82. AWS_ACCESS_KEY_ID = yandex_iam_service_account_static_access_key.sa_static_key.access_key
  83. AWS_SECRET_ACCESS_KEY = yandex_iam_service_account_static_access_key.sa_static_key.secret_key
  84. FALCO_LOG_PREFIX = var.falco_prefix
  85. }
  86. user_hash = data.archive_file.function.output_base64sha256
  87. content {
  88. zip_filename = data.archive_file.function.output_path
  89. }
  90. }
  91. resource "yandex_function_trigger" "s3_ymq_falco_trigger" {
  92. depends_on = [yandex_message_queue.log_queue_for_falco,yandex_function.s3_ymq_for_falco]
  93. folder_id = var.folder_id
  94. name = "s3-ymq-falco-trigger-${random_string.project_suffix.result}"
  95. function {
  96. id = yandex_function.s3_ymq_for_falco.id
  97. service_account_id = var.service_account_id
  98. }
  99. object_storage {
  100. bucket_id = var.log_bucket_name
  101. prefix = var.falco_prefix
  102. create = true
  103. update = false
  104. delete = false
  105. }
  106. }
  107. #--------KYVERNO-----------
  108. resource "yandex_message_queue" "log_queue_for_kyverno" {
  109. count = var.kyverno_enabled ? 1 :0
  110. access_key = yandex_iam_service_account_static_access_key.sa_static_key.access_key
  111. secret_key = yandex_iam_service_account_static_access_key.sa_static_key.secret_key
  112. name = "log-queue-kyverno-${random_string.project_suffix.result}"
  113. visibility_timeout_seconds = 600
  114. receive_wait_time_seconds = 20
  115. message_retention_seconds = 1209600
  116. }
  117. resource "yandex_function" "s3_ymq_for_kyverno" {
  118. depends_on = [yandex_message_queue.log_queue_for_kyverno]
  119. folder_id = var.folder_id
  120. name = "s3-ymq-kyverno-sync-${random_string.project_suffix.result}"
  121. runtime = "python38"
  122. entrypoint = "main.handler"
  123. memory = "256"
  124. execution_timeout = "30"
  125. environment = {
  126. YMQ_URL = yandex_message_queue.log_queue_for_kyverno[0].id
  127. AWS_ACCESS_KEY_ID = yandex_iam_service_account_static_access_key.sa_static_key.access_key
  128. AWS_SECRET_ACCESS_KEY = yandex_iam_service_account_static_access_key.sa_static_key.secret_key
  129. KYVERNO_LOG_PREFIX = var.kyverno_prefix
  130. }
  131. user_hash = data.archive_file.function.output_base64sha256
  132. content {
  133. zip_filename = data.archive_file.function.output_path
  134. }
  135. }
  136. resource "yandex_function_trigger" "s3_ymq_kyverno_trigger" {
  137. depends_on = [yandex_message_queue.log_queue_for_kyverno,yandex_function.s3_ymq_for_kyverno]
  138. folder_id = var.folder_id
  139. name = "s3-ymq-kyverno-trigger-${random_string.project_suffix.result}"
  140. function {
  141. id = yandex_function.s3_ymq_for_kyverno.id
  142. service_account_id = var.service_account_id
  143. }
  144. object_storage {
  145. bucket_id = var.log_bucket_name
  146. prefix = var.kyverno_prefix
  147. create = true
  148. update = false
  149. delete = false
  150. }
  151. }