Как добавить группу безопасности в качестве входящего правила в другую группу безопасности в terraform

У меня есть кодовая база Terraform, в которой развертывается частный кластер EKS, хост-бастион и другие сервисы AWS. Я также добавил несколько групп безопасности в Terraform. Одна из групп безопасности разрешает входящий трафик с моего домашнего IP на хост-бастион, чтобы я мог подключиться к этому узлу по SSH. Эта группа безопасности называется , и она тоже работает нормально.

Однако изначально я не могу запустить kubectl со своего хоста-бастиона, который я использую для разработки Kubernetes на узлах кластера EKS. Причина в том, что мой кластер EKS является частным и разрешает связь только с узлами в одном VPC, и мне нужно добавить группу безопасности, которая разрешает связь с моего хоста-бастиона наcluster control planeИ здесь на помощь приходит моя группа безопасности bastionSG.

Итак, теперь моя процедура такова: как только Terraform все развернет, я затем нахожу автоматически созданную группу безопасности EKS и добавляю к ней свое правило в качестве входящего правила через консоль AWS (пользовательский интерфейс), как показано на изображении ниже.

Мне бы НЕ хотелось делать это через пользовательский интерфейс, поскольку я уже использую Terraform для развертывания всей своей инфраструктуры.

Я знаю, что могу запросить такую ​​​​существующую группу безопасности

      data "aws_security_group" "selectedSG" {
  id = var.security_group_id
}

В этом случае, скажемselectedSG— это группа безопасности, создаваемая EKS после завершения процесса применения terraform. Затем я хотел бы добавить входящее правилоbastionSGк нему без перезаписи остальных, он добавляется автоматически.

ОБНОВЛЕНИЕ: > ГРУППА УЗЛОВ EKS

      resource "aws_eks_node_group" "flmd_node_group" {
  cluster_name    = var.cluster_name
  node_group_name = var.node_group_name
  node_role_arn   = var.node_pool_role_arn
  subnet_ids      = [var.flmd_private_subnet_id]
  instance_types = ["t2.small"]

  scaling_config {
    desired_size = 3
    max_size     = 3
    min_size     = 3
  }

  update_config {
    max_unavailable = 1
  }

  remote_access {
    ec2_ssh_key = "MyPemFile"
    source_security_group_ids = [
      var.allow_tls_id,
      var.allow_http_id, 
      var.allow_ssh_id,
      var.bastionSG_id
     ]
  }

  tags = {
    "Name" = "flmd-eks-node"
  }
}

Как показано выше, группа узлов EKS содержит группу безопасности bastionSG. который, как я ожидаю, позволит моему хосту-бастиону подключиться к плоскости управления EKS.

Кластер ЭКС

      resource "aws_eks_cluster" "flmd_cluster" {
  name     = var.cluster_name
  role_arn = var.role_arn

  vpc_config {
    subnet_ids =[var.flmd_private_subnet_id, var.flmd_public_subnet_id, var.flmd_public_subnet_2_id]
    endpoint_private_access = true
    endpoint_public_access = false
    security_group_ids = [ var.bastionSG_id]
  }
}

bastionSG_id— это выходные данные группы безопасности, созданной ниже, которые передаются в приведенный выше код как переменная.

Группа безопасности БастионСГ

      resource "aws_security_group" "bastionSG" {
  name        = "Home to bastion"
  description = "Allow SSH - Home to Bastion"
  vpc_id      = var.vpc_id

  ingress {
    description      = "Home to bastion"
    from_port        = 22
    to_port          = 22
    protocol         = "tcp"
    cidr_blocks      = [<MY HOME IP address>]
  }

  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }

  tags = {
    Name = "Home to bastion"
  }
}

1 ответ

Вы можете расширить существующие группы безопасности с помощью Terraform AWS «aws_security_group_rule», который принимает произвольный, но необходимый идентификатор группы безопасности. См.:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule .

Другие вопросы по тегам