설명
보안 그룹이 업무에 필요한 범위보다 넓은 출발지 CIDR을 허용하면 의도하지 않은 호스트도 해당 서비스에 연결을 시도할 수 있습니다. 넓은 사설 대역도 신뢰 경계를 넘는 접근을 허용할 수 있으므로 사설 주소라는 이유만으로 모든 호스트를 신뢰해서는 안 됩니다.
적절한 범위는 연결된 리소스와 승인된 클라이언트에 따라 달라집니다. 작은 CIDR이라도 불필요한 주체를 포함할 수 있으며, 실제 연결에는 포트·프로토콜, 라우팅, 다른 보안 그룹과 서비스 인증도 영향을 줍니다.
잠재적 영향
- 접근이 필요 없는 호스트의 서비스 탐색이나 로그인 시도를 허용할 수 있습니다.
- 여러 리소스가 그룹을 공유하면 한 규칙의 불필요한 접근 허용이 여러 서비스에 영향을 줄 수 있습니다.
해결 방법
- 연결된 리소스와 필요한 통신을 확인하고 승인된 출발지, 포트와 프로토콜만 허용하세요. 가능한 환경에서는 보안 그룹 참조를 사용하세요.
- 리소스에 적용되는 모든 그룹을 함께 검토하고 불필요한 범위를 제거하세요. CIDR 크기만으로 적절성을 판단하지 마세요.
- Ansible의
purge_rules가 기존 규칙에 미치는 영향을 확인하고 유지할 전체 인바운드 규칙을 정의하세요. 변경 후 필요한 연결과 거부할 연결을 시험하세요.
예시
vpc_id 변수에 실제 VPC를 지정하고 실행 환경에 AWS 인증을 구성하세요. 두 예시는 같은 그룹의 대안 구성이며 TCP 80 접근 범위만 비교합니다. 실제 서비스가 사용하는 포트와 승인된 클라이언트 주소에 맞게 조정하세요.
변경 전
yaml
- name: example ec2 group
amazon.aws.ec2_security_group:
name: example
description: an example EC2 group
vpc_id: "{{ vpc_id }}"
region: eu-west-1
rules:
- proto: tcp
from_port: 80
to_port: 80
cidr_ip: 0.0.0.0/0
모든 IPv4 출발지에서 TCP 80으로 들어오는 연결을 허용합니다.
변경 후
yaml
- name: example ec2 group2
amazon.aws.ec2_security_group:
name: example
description: an example EC2 group
vpc_id: "{{ vpc_id }}"
region: eu-west-1
rules:
- proto: tcp
from_port: 80
to_port: 80
cidr_ip: 10.1.1.1/32
출발지를 10.1.1.1/32로 제한합니다. 이 주소가 승인된 클라이언트의 실제 주소인지 확인하고 같은 리소스에 적용된 다른 그룹의 허용 규칙도 점검하세요.