설명
ELB의 보안 그룹이 필요한 백엔드 연결이나 상태 검사를 허용하지 않으면 요청 전달이 실패하거나 대상이 비정상으로 표시될 수 있습니다. 연결된 모든 보안 그룹과 독립형 규칙을 함께 확인해야 합니다.
CloudFormation에서 새 보안 그룹의 egress 규칙을 생략하면 기본적으로 전체 아웃바운드를 허용합니다. 설정의 생략을 통신 차단으로 간주하지 말고 실제 규칙을 확인하세요. 보안 그룹은 상태를 유지하므로 허용된 연결의 응답을 위해 반대 방향 규칙을 별도로 열 필요는 없습니다.
잠재적 영향
- 필요한 백엔드 포트나 상태 검사 경로가 막히면 서비스 이용에 장애가 생길 수 있습니다.
- 문제 해결을 위해 목적지 전체를 허용하면 필요 이상의 아웃바운드 접근이 유지될 수 있습니다.
해결 방법
ELB의 실제 아웃바운드 규칙에서 백엔드 서비스와 상태 검사에 필요한 목적지와 포트를 허용하세요. 대상 인스턴스의 인바운드 규칙은 ELB 보안 그룹에서 오는 트래픽을 허용하도록 구성하세요. 다른 연결된 그룹의 넓은 허용도 점검하고 실제 요청과 상태 검사를 시험하세요.
예시
보안 그룹 연결과 egress 설정만 비교합니다. 리스너와 ELB 서브넷 설정은 생략했습니다. VpcId에는 ELB와 동일한 VPC의 실제 식별자를 제공하세요.
변경 전
yaml
Resources:
LoadBalancerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: ELB security group
VpcId: !Ref VpcId
MyLoadBalancer:
Type: AWS::ElasticLoadBalancing::LoadBalancer
Properties:
SecurityGroups:
- !GetAtt LoadBalancerSecurityGroup.GroupId
egress를 명시하지 않은 새 그룹은 기본 전체 허용 규칙을 받습니다. 이 발췌가 아웃바운드 통신을 차단한다는 뜻은 아닙니다.
변경 후
yaml
Resources:
LoadBalancerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: ELB security group
VpcId: !Ref VpcId
SecurityGroupEgress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
MyLoadBalancer:
Type: AWS::ElasticLoadBalancing::LoadBalancer
Properties:
SecurityGroups:
- !GetAtt LoadBalancerSecurityGroup.GroupId
모든 IPv4 목적지에 TCP 80을 허용합니다. 실제 백엔드 CIDR이나 보안 그룹으로 목적지를 좁히고 상태 검사에 필요한 포트도 확인하세요. 이 규칙 자체는 HTTP 데이터를 암호화하지 않습니다.