main.tf 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. resource "aws_s3_bucket" "bucket" {
  2. count = var.palo_alto_count
  3. bucket = "xdr-palo-alto-bootstrap-${count.index}"
  4. }
  5. resource "aws_s3_bucket_acl" "s3_acl_bucket" {
  6. bucket = aws_s3_bucket.bucket.id
  7. acl = "private"
  8. }
  9. locals {
  10. # Bootstrap process requires that folders exist, so we must create them in each bucket. This looks complicated,
  11. # but it's just doing a foreach bucket: foreach directory: ...
  12. bucket_folder_map = { for p in setproduct(range(var.palo_alto_count), local.bootstrap_dirs) : "${p[0]}/${p[1]}" => {
  13. num = p[0]
  14. folder = p[1]
  15. }
  16. }
  17. }
  18. resource "aws_s3_bucket_object" "bootstrap_dirs" {
  19. for_each = local.bucket_folder_map
  20. bucket = aws_s3_bucket.bucket[each.value["num"]].id
  21. key = each.value["folder"]
  22. content = "/dev/null"
  23. }
  24. resource "aws_s3_bucket_object" "init_cfg" {
  25. count = var.palo_alto_count
  26. bucket = aws_s3_bucket.bucket[count.index].id
  27. key = "config/init-cfg.txt"
  28. content = templatefile("${path.module}/init-cfg.txt.tmpl",
  29. {
  30. "hostname" = "xdr_palo_${var.aws_partition_alias}_${var.environment}_${count.index}"
  31. "authkey" = var.palo_alto_auth_keys[count.index]
  32. "tplname" = "XDR-Interconnect-Stack-${count.index}"
  33. "dgname" = "XDR-Interconnects"
  34. "op-command-modes" = "jumbo-frame, mgmt-interface-swap"
  35. "panorama_primary" = var.panorama_servers[0]
  36. "panorama_secondary" = var.panorama_servers[1]
  37. }
  38. )
  39. }
  40. # No bootstrap configuration, as we're registered to panorama
  41. #resource "aws_s3_bucket_object" "bootstrap_xml" {
  42. # count = var.palo_alto_count
  43. # bucket = aws_s3_bucket.bucket[count.index].id
  44. # key = "config/bootstrap.xml"
  45. # content = templatefile("${path.module}/bootstrap.xml.tmpl",
  46. # {
  47. # index = count.index
  48. # }
  49. # )
  50. #}
  51. resource "aws_s3_bucket_object" "authcodes" {
  52. count = var.palo_alto_count
  53. bucket = aws_s3_bucket.bucket[count.index].id
  54. key = "license/authcodes"
  55. content = <<EOF
  56. ${var.palo_alto_license_keys[count.index]}
  57. EOF
  58. }
  59. resource "aws_iam_role" "bootstrap_role" {
  60. count = var.palo_alto_count
  61. name = "palo_alto_bootstrap_${count.index}"
  62. path = "/instance/"
  63. assume_role_policy = <<EOF
  64. {
  65. "Version": "2012-10-17",
  66. "Statement": [
  67. {
  68. "Effect": "Allow",
  69. "Principal": {
  70. "Service": "ec2.amazonaws.com"
  71. },
  72. "Action": "sts:AssumeRole"
  73. }
  74. ]
  75. }
  76. EOF
  77. }
  78. resource "aws_iam_role_policy" "bootstrap_policy" {
  79. count = var.palo_alto_count
  80. name = "palo_alto_bootstrap_${count.index}"
  81. role = aws_iam_role.bootstrap_role[count.index].id
  82. policy = <<EOF
  83. {
  84. "Version" : "2012-10-17",
  85. "Statement": [
  86. {
  87. "Effect": "Allow",
  88. "Action": "s3:ListBucket",
  89. "Resource": "arn:${var.aws_partition}:s3:::${aws_s3_bucket.bucket[count.index].bucket}"
  90. },
  91. {
  92. "Effect": "Allow",
  93. "Action": "s3:GetObject",
  94. "Resource": "arn:${var.aws_partition}:s3:::${aws_s3_bucket.bucket[count.index].bucket}/*"
  95. }
  96. ]
  97. }
  98. EOF
  99. }
  100. resource "aws_iam_instance_profile" "bootstrap" {
  101. count = var.palo_alto_count
  102. name = "palo_alto_bootstrap_${count.index}"
  103. role = aws_iam_role.bootstrap_role[count.index].name
  104. path = "/instance/"
  105. }
  106. //AWS Provider outdated arguments <4.4.0
  107. /*resource "aws_s3_bucket" "bucket" {
  108. count = var.palo_alto_count
  109. bucket = "xdr-palo-alto-bootstrap-${count.index}"
  110. acl = "private"
  111. }
  112. */