flowlogs.tf 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # Flow logs need to be created per VPC, but we need a role
  2. resource "aws_cloudwatch_log_group" "vpc_flow_logs" {
  3. name = "vpc_flow_logs"
  4. retention_in_days = 7
  5. kms_key_id = var.cloudtrail_key_arn
  6. tags = merge(local.standard_tags, var.tags)
  7. }
  8. resource "aws_iam_role" "flowlogs" {
  9. name = "flowlogs"
  10. path = "/aws_services/"
  11. tags = merge(local.standard_tags, var.tags)
  12. assume_role_policy = <<EOF
  13. {
  14. "Version": "2012-10-17",
  15. "Statement": [
  16. {
  17. "Sid": "",
  18. "Effect": "Allow",
  19. "Principal": {
  20. "Service": "vpc-flow-logs.amazonaws.com"
  21. },
  22. "Action": "sts:AssumeRole"
  23. }
  24. ]
  25. }
  26. EOF
  27. }
  28. # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
  29. resource "aws_iam_role_policy" "flowlogs" {
  30. name = "flowlogs"
  31. role = aws_iam_role.flowlogs.id
  32. policy = <<EOF
  33. {
  34. "Version": "2012-10-17",
  35. "Statement": [
  36. {
  37. "Action": [
  38. "logs:CreateLogGroup",
  39. "logs:CreateLogStream",
  40. "logs:PutLogEvents",
  41. "logs:DescribeLogGroups",
  42. "logs:DescribeLogStreams"
  43. ],
  44. "Effect": "Allow",
  45. "Resource": "*"
  46. }
  47. ]
  48. }
  49. EOF
  50. }
  51. # Spit vpc flow logs to splunk
  52. module "kinesis_firehose" {
  53. source = "../../thirdparty/terraform-aws-kinesis-firehose-splunk"
  54. region = var.aws_region
  55. arn_cloudwatch_logs_to_ship = "arn:${var.aws_partition}:logs:${var.aws_region}::log-group:/vpc_flow_logs/*"
  56. name_cloudwatch_logs_to_ship = "vpc_flow_logs"
  57. hec_token = local.aws_flowlogs_hec_token
  58. hec_url = "https://${local.hec_pub_ack}:8088"
  59. firehose_name = "vpc_flow_logs_to_splunk"
  60. tags = merge(local.standard_tags, var.tags)
  61. cloudwatch_log_retention = 30 # keep kinesis logs this long
  62. log_stream_name = "SplunkDelivery_VPCFlowLogs"
  63. s3_bucket_name = "kinesis-flowlogs-${var.aws_account_id}-${var.aws_region}"
  64. s3_bucket_block_public_access_enabled = 1
  65. s3_backup_mode = "FailedEventsOnly"
  66. s3_expiration = 30
  67. }