Как добавить группу безопасности в качестве входящего правила в другую группу безопасности в 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 .