如何让Fargate负载均衡器仅接受特定IP地址的流量
限制MLFlow Fargate服务仅允许特定CIDR访问
问题核心在于:公网流量先经过网络负载均衡(NLB),默认情况下NetworkLoadBalancedFargateService创建的NLB安全组允许所有公网IP访问,仅修改Fargate服务的安全组无法实现访问限制。需要修改NLB的安全组规则,同时可加固Fargate服务的安全组策略。
修改步骤与代码示例
- 定义需要授权的目标CIDR地址(替换为你的实际IP段)
- 修改NLB的安全组,仅允许指定CIDR访问5000端口
- 可选:加固Fargate服务的安全组,仅接受NLB的流量
以下是修改后的关键代码片段(替换原代码中Fargate服务创建后的相关部分):
# 定义允许访问的CIDR,替换为你的目标IP段 ALLOWED_CIDR = "192.168.1.0/24" fargate_service = ecs_patterns.NetworkLoadBalancedFargateService( scope=self, id="MLFLOW", service_name=service_name, cluster=cluster, task_definition=task_definition, ) # 1. 修改NLB的安全组:限制仅允许指定CIDR访问5000端口 nlb_security_group = fargate_service.load_balancer.connections.security_groups[0] # 移除默认的全开放规则(如果存在) for rule in nlb_security_group.ingress_rules: if rule.peer.to_string() == "0.0.0.0/0" and rule.connection == ec2.Port.tcp(5000): nlb_security_group.add_ingress_rule(peer=rule.peer, connection=rule.connection, remove_rule=True) # 添加允许特定CIDR的规则 nlb_security_group.add_ingress_rule( peer=ec2.Peer.ipv4(ALLOWED_CIDR), connection=ec2.Port.tcp(5000), description="Allow inbound from allowed CIDR to MLFlow NLB" ) # 2. 可选:修改Fargate服务的安全组,仅允许NLB的安全组访问(替代原VPC全段规则) fargate_service.service.connections.security_groups[0].add_ingress_rule( peer=nlb_security_group, connection=ec2.Port.tcp(5000), description="Allow inbound from NLB to Fargate service", remove_rule=True # 移除之前允许整个VPC访问的规则 ) # 保留原自动扩缩容配置 scaling = fargate_service.service.auto_scale_task_count(max_capacity=2) scaling.scale_on_cpu_utilization( id="AUTOSCALING", target_utilization_percent=70, scale_in_cooldown=Duration.seconds(60), scale_out_cooldown=Duration.seconds(60), )
说明
- 将
ALLOWED_CIDR替换为你实际需要授权的IP段,比如公司办公网IP、固定公网IP等 - 移除NLB默认全开放规则是为了确保没有意外的访问权限,若确认默认规则不存在可跳过该步骤
- 可选的Fargate安全组修改是进一步加固措施,确保服务仅接受来自NLB的流量
内容的提问来源于stack exchange,提问作者siavashk
相关产品推荐
相关产品推荐

