핵심요약
Amazon EFS에서 NFS I/O hang 현상은 mount target의 Security Group에서 기본 Outbound 규칙(Allow All)을 제거했을 때 발생할 수 있습니다. EFS 백엔드 서버 교체 시 발생하는 TCP RST 패킷이 차단되어 발생하며, tcpdump를 통한 진단과 All TCP Outbound 규칙 추가로 해결 가능합니다.
Amazon EFS 트러블슈팅: NFS I/O Hang과 Security Group Outbound 규칙의 상관관계
문제 개요
Amazon EFS 파일 시스템은 내부 유지보수 과정에서 NFS I/O hang 현상이 발생할 수 있습니다. 특히 EFS mount target의 security group에서 기본 Outbound 규칙(Allow All)을 제거한 경우, 유지보수 시 약 1~2분간 I/O가 멈추는 현상이 발생할 수 있습니다. 이 문제는 데이터 유실 없이 자동으로 복구되지만, 애플리케이션의 응답 불가를 야기합니다.
배경: TCP 연결, Security Group Stateful 동작, EFS 유지보수
- TCP 연결과 RST: NFS는 TCP 위에서 동작하며, 연결 강제 종료 시 RST 패킷을 사용합니다. RST 패킷은 ACK 플래그가 포함되지 않습니다.
- Security Group Stateful 동작: Inbound 허용 트래픽에 대한 응답은 Outbound 규칙 없이 자동으로 허용됩니다. 하지만 ACK 없는 RST와 같은 새로운 패킷은 자동으로 허용되지 않을 수 있습니다.
- EFS 유지보수: EFS 백엔드 서버 교체 시, 새로운 서버가 클라이언트에 RST를 보내 재연결을 유도합니다. 기본 Outbound 규칙이 없으면 이 RST가 차단됩니다.
근본 원인 분석
- RST 차단: EFS mount target security group에서 기본 Outbound 규칙(Allow All)을 제거하고 명시적 규칙이 없을 경우, EFS 백엔드 서버가 보내는 RST 패킷이 Security Group에서 차단됩니다.
- NFS I/O Hang: RST가 클라이언트에 도달하지 못하면, 클라이언트는 연결 끊김을 인지하지 못하고 요청을 반복합니다. TCP Keep Alive 실패 후 약 1~2분 뒤에야 복구되며, 이 동안 NFS I/O가 hang 상태가 됩니다.
- Outbound 규칙의 중요성: NFS 포트(2049)만 허용하는 것으로는 부족하며, EFS 서비스팀의 테스트 결과 All TCP(0-65535) 범위의 Outbound 규칙이 필요합니다. Destination을 EC2 Client Security Group으로 제한하는 것이 권장됩니다.
진단 방법: tcpdump
- VPC Flow Logs로는 RST 패킷 차단을 확인할 수 없습니다. EC2 클라이언트에서 tcpdump를 사용하여 실제 RST 패킷의 송수신 여부를 확인해야 합니다.
- EFS mount helper + TLS 환경에서는 stunnel을 통한 로컬 트래픽 캡처가 필요합니다.
- 캡처 분석 시, 정상 환경에서는 RST 수신 후 즉시 새 포트로 재연결이 발생하지만, 문제 환경에서는 RST 패킷 없이 재전송만 반복되는 것을 확인할 수 있습니다.
해결 방법
- Option 1 (권장): EFS mount target security group에 EC2 인스턴스의 security group으로 향하는 All TCP Outbound 규칙을 추가합니다.
- Option 2: 보안 강화 목적으로 기본 Outbound 규칙(Allow All)을 제거하지 않고 유지합니다.
결론
Security Group Outbound 규칙 부재는 EFS 유지보수 시 NFS I/O hang을 유발하는 숨겨진 문제입니다. mount target의 security group Outbound 규칙을 즉시 확인하고, 필요시 EC2 인스턴스로의 All TCP Outbound 규칙을 추가하여 문제를 예방해야 합니다.