AWS 보안그룹(securitygroup)에서는 임시포트에 대한 설정을 안해도 통신이 될까?
목차
일반적인 http, https 통신방식
80포트로 통신하다고 하면
위 그림처럼 외부로 임시 포트로 나간뒤 호스트에서 80포트로 받고 임시포트로 보내고 클라이언트에서는 임시프트로 받는다.
그래서 iptables에서 화이트리스트 설정을 할때 outbound나 inbound에 임시포트인 49152~65535 를 열어 둔다.
그러다가 갑자기 AWS security group에서는 임시포트에 대한 설정을 하지 않는다는 기억이 났다.(ACL은 차단 가능함)
어떻게 되는거지?
AWS security group의 보안방식
임시 포트에 대한 정책을 알고 싶어서 temp port라고 검색하는데 죽어도 안나왔습니다.
검색하다가 ephemeral ports 라고 치니까 바로 나오더군요
https://www.reddit.com/r/aws/comments/59ec7u/why_do_nacls_require_ephemeral_ports_but_security/
공식문서에서 충분히 잘설명이 되어 있더군요..
- 보안 그룹은 상태가 저장됩니다. 사용자가 인스턴스에서 요청을 전송하면 해당 요청의 응답 트래픽은 인바운드 보안 그룹 규칙에 관계없이 인바운드 흐름이 허용됩니다. VPC 보안 그룹의 경우, 허용된 인바운드 트래픽에 대한 응답은 아웃바운드 규칙에 관계없이 아웃바운드 흐름이 허용됩니다. 자세한 내용은 보안 그룹 연결 추적 섹션을 참조하세요.
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/security-group-rules.html
즉, AWS Security Group에서는 임시포트에대해 자동으로 허용을 해줍니다.
몇가지 연결추적에 관한 중요사항을 첨부하였다.
- 보안 그룹은 연결 추적을 사용해 인스턴스가 송수신하는 트래픽에 대한 정보를 추적합니다. 규칙은 트래픽의 연결 상태를 기반으로 적용되어 해당 트래픽을 허용 또는 거부할지 결정합니다.
- TCP, UDP 또는 ICMP 이외의 프로토콜에 대해서는 IP 주소와 프로토콜 번호만 추적됩니다. 인스턴스에서 다른 호스트로 트래픽이 전송되고, 600초 이내에 동일한 트래픽 유형이 호스트에서 인스턴스로 전송되는 경우 인스턴스에 대한 보안 그룹에서는 인바운드 보안 그룹 규칙과 관계없이 해당 트래픽이 수락됩니다. 해당 트래픽이 원본 트래픽에 대한 응답 트래픽으로 간주되어 보안 그룹에서 수락됩니다.
- 보안 그룹 규칙을 변경하면 추적된 연결이 즉시 중단되지 않습니다. 기존 연결 시간이 초과할 때까지 보안 그룹에서 패킷이 계속 허용됩니다
- 모든 트래픽 흐름이 추적되지는 않습니다. 모든 트래픽(0.0.0.0/0 또는 ::/0)에 대한 TCP 또는 UDP 흐름이 보안 그룹 규칙에서 허용되고 포트(0-65535)에 대한 모든 응답 트래픽(0.0.0.0/0 또는 ::/0)이 허용되는 해당 규칙이 다른 방향에 있는 경우에는 자동으로 추적되는 연결의 일부가 아니면 트래픽 흐름이 추적되지 않습니다.
자동으로 추적되는 연결
- 외부 전용 인터넷 게이트웨이
- Gateway Load Balancer
- Global Accelerator 액셀러레이터
- NAT 게이트웨이
- Network Firewall 방화벽 엔드포인트
- Network Load Balancers
- AWS PrivateLink(인터페이스 VPC 엔드포인트)
- Transit Gateway Attachment
- AWS Lambda(Hyperplane 탄력적 네트워크 인터페이스)
연결 추적시간
- TCP 설정 제한 시간: 설정된 상태의 유휴 TCP 연결에 대한 제한 시간(초)입니다. 최솟값: 60초. 최댓값: 43만 2,000초(5일). 기본값: 43만 2,000초. 권장값: 43만 2,000초 미만.
- UDP 제한 시간: 단일 방향 또는 단일 요청-응답 트랜잭션의 트래픽만 확인한 유휴 UDP 흐름의 제한 시간(초)입니다. 최솟값: 30초. 최댓값: 60초. 기본값: 30초.
- UDP 스트림 제한 시간: 둘 이상의 요청-응답 트랜잭션을 확인한 스트림으로 분류된 유휴 UDP 흐름의 제한 시간(초)입니다. 최솟값: 60초. 최댓값: 180초(3분) 기본값: 180초
추적시간을 수정해야하는 경우
- EC2 인스턴스의 네트워크 성능 모니터링Amazon EC2 네트워크 성능 지표를 사용하여 추적된 연결을 모니터링하는 경우 conntrack_allowance_exceeded 및 conntrack_allowance_available 지표를 사용하면 삭제된 패킷과 추적된 연결 사용률을 모니터링하여 스케일 업 또는 아웃 작업을 통해 EC2 인스턴스 용량을 사전에 관리하여 패킷을 삭제하기 전에 네트워크 연결 수요를 충족할 수 있습니다. EC2 인스턴스에서 conntrack_allowance_exceeded 삭제가 관찰되는 경우 부적절한 클라이언트 또는 네트워크 미들 박스로 인해 발생하는 오래된 TCP/UDP 세션을 설명하기 위해 더 낮은 TCP 설정 제한 시간을 설정하는 것이 도움이 될 수 있습니다.
- 일반적으로 로드 밸런서 또는 방화벽에는 60~90분 범위의 TCP 설정 유휴 제한 시간이 있습니다. 네트워크 방화벽과 같은 어플라이언스에서 매우 많은 수(10만 개 이상)의 연결을 처리할 것으로 예상되는 워크로드를 실행하는 경우 EC2 네트워크 인터페이스에서 유사한 제한 시간을 구성하는 것이 좋습니다.
- DNS, SIP, SNMP, Syslog, Radius 및 UDP를 주로 사용하여 요청을 처리하는 기타 서비스와 같이 연결 수가 많은 워크로드를 실행하는 경우 'UDP-Stream' 제한 시간을 60초로 설정하면 기존 용량의 규모/성능이 향상되고 그레이 페일(gray failure)이 발생하지 않습니다.
- 네트워크 로드 밸런서(NLB)와 Elastic Load Balancer(ELB)를 통한 TCP/UDP 연결의 경우 모든 연결이 추적됩니다. TCP 흐름의 유휴 제한 시간 값은 350초이고 UDP 흐름은 120초이며 인터페이스 수준 제한 시간 값에 따라 다릅니다. ELB/NLB의 기본값보다 제한 시간에 대한 유연성을 더 높이기 위해 네트워크 인터페이스 수준에서 제한 시간을 구성할 수 있습니다.
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/security-group-connection-tracking.html
REFERENCE
보안그룹 관련
https://alliescomputing.com/knowledge-base/how-to-handle-ephemeral-ports
끝