我有一个 Terraform 代码库,它部署了一个私有 EKS 集群、一个堡垒主机和其他 AWS 服务。我还在 Terraform 中添加了一些安全组。其中一个安全组允许从我的家庭 IP 到堡垒主机的入站流量,以便我可以通过 SSH 连接到该节点。这个安全组称为bastionSG
,它也运行良好。
但是,最初我无法从堡垒主机运行 kubectl,堡垒主机是我用来针对 EKS 集群节点执行 kubernetes 开发的节点。原因是我的 EKS 集群是私有的,只允许来自同一 VPC 中的节点的通信,我需要添加一个安全组,允许从堡垒主机到我的cluster control plane
安全组 bastionSG 所在的节点的通信。
因此,我现在的例行工作是,一旦 Terraform 部署了所有内容,我就会找到自动生成的 EKS 安全组并bastionSG
通过 AWS 控制台(UI)将我的入站规则添加到其中,如下图所示。
我不想通过 UI 来执行此操作,因为我已经在使用 Terraform 来部署我的整个基础设施。
我知道我可以像这样查询现有的安全组
data "aws_security_group" "selectedSG" {
id = var.security_group_id
}
在这种情况下,假设selectedSG
Terraform 完成应用过程后,EKS 会创建安全组。然后我想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 控制平面。
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
是下面创建的安全组的输出,它作为变量传递到上面的代码中。
BastionSG 安全组
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”扩展现有的安全组,它接受任意但必需的安全组 ID。请参阅:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule