설명
EC2에 연결된 보안 그룹이 관리 포트나 Redis 같은 데이터 서비스 포트를 0.0.0.0/0 또는 ::/0에 허용하면 모든 주소가 해당 규칙의 출발지 범위에 포함됩니다. 실제 인터넷 연결에는 인스턴스의 주소, 라우팅, 서비스 리스닝 상태와 다른 네트워크 제어도 관여합니다.
내부 서비스에 필요한 연결만 허용하고 인증과 암호화도 별도로 구성하세요. 보안 그룹의 허용 규칙이 데이터 접근 권한을 부여하는 것은 아닙니다.
잠재적 영향
- 서비스에 도달할 수 있는 외부 클라이언트의 인증 공격이나 취약점 악용 시도가 늘어날 수 있습니다.
- 인증 또는 서비스 취약점이 함께 있으면 정보 유출이나 서비스 중단으로 이어질 수 있습니다.
해결 방법
- 민감한 포트를 전체 IPv4·IPv6 주소에 허용하는 규칙을 제거하거나 실제 클라이언트 주소로 좁히세요.
- 지원되는 환경에서는 애플리케이션 보안 그룹 참조나 사설 관리 경로를 사용하세요. 연결된 모든 그룹의 추가 허용 규칙도 확인하세요.
- 적용 후 필요한 클라이언트의 연결과 불필요한 연결 차단을 시험하고, 인증·패치·암호화 설정을 함께 점검하세요.
예시
같은 VPC의 서브넷과 호환되는 AMI를 제공하세요. 예시는 보안 그룹 연결을 보여 주며 Redis를 설치하지 않습니다. 10.0.20.0/24는 실제 애플리케이션 주소 범위로 바꾸고, 필요한 라우팅과 아웃바운드도 별도로 구성하세요.
변경 전
yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
VpcId:
Type: AWS::EC2::VPC::Id
SubnetId:
Type: AWS::EC2::Subnet::Id
ImageId:
Type: AWS::EC2::Image::Id
Resources:
UnsafeSecGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow Redis from the internet
VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 6379
ToPort: 6379
CidrIp: 0.0.0.0/0
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref ImageId
SubnetId: !Ref SubnetId
InstanceType: t3.medium
SecurityGroupIds:
- !Ref UnsafeSecGroup
TCP 6379를 모든 IPv4 주소에 허용합니다. 실제 서비스가 접근 가능하면 원치 않는 연결 시도의 대상이 될 수 있습니다.
변경 후
yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
VpcId:
Type: AWS::EC2::VPC::Id
SubnetId:
Type: AWS::EC2::Subnet::Id
ImageId:
Type: AWS::EC2::Image::Id
Resources:
SafeSecGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow Redis only from the application network
VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 6379
ToPort: 6379
CidrIp: 10.0.20.0/24
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref ImageId
SubnetId: !Ref SubnetId
InstanceType: t3.medium
SecurityGroupIds:
- !Ref SafeSecGroup
동일한 포트의 출발지를 애플리케이션 대역으로 제한합니다. 이 대역의 모든 클라이언트에 연결이 필요한지도 확인하세요.