我有一个 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"
}
}
您可以使用 Terraform AWS“aws_security_group_rule”扩展现有安全组,该规则接受任意但必需的安全组 ID。请参阅:https ://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule