[CLOUD] Private Subnet EC2와 SSM 통신

Ryu whi young·2026년 3월 16일

Cloud

목록 보기
6/6
post-thumbnail

들어가기

AWS JAM 문제를 풀다가 꽤 어렵고, 흥미로운 트러블슈팅을 진행했다.

Private Subnet에 있는 EC2 인스턴스(Private-ProductionServer)가 AWS Systems Manager(SSM) 서비스와 통신을 못 하는 상황이었고, 원인이 단순히 보안 그룹 하나가 아니라 네트워크 레벨OS 레벨 두 곳에 동시에 있었다.

이 글에서는 문제의 원인을 파악한 과정, 트래픽 흐름, 해결 방법, 그리고 왜 이런 구조를 선택했는지까지 정리해보려고 한다.


환경 구성

[내 PC]
   ↓ RDP
[Bastion-JumpServer] - 퍼블릭 서브넷, 퍼블릭 IP 있음
   ↓ RDP
[Private-ProductionServer] - 프라이빗 서브넷, 퍼블릭 IP 없음
  • Bastion-JumpServer: 퍼블릭 서브넷에 위치했고, 외부에서 RDP로 접근 가능했었다.
  • Private-ProductionServer: 프라이빗 서브넷에 위치했고, 인터넷 접근 불가, SSM Agent 설치되었다.

VPC EndPoint는 왜 갑자기 사용하는가?

Private-ProductionServer에는 SSM Agent 프로그램이 설치되어 있었다.
이 Agent의 역할은 AWS SSM 서비스에 주기적으로 HTTPS(포트 443)로 연결해서 Health Cheak를 하는데,

SSM Agent → (HTTPS/443) → AWS SSM 서비스
"나 살아있음. 명령을 하긴 했음?"

이 통신이 정상적으로 이루어져야 SSM Fleet Manager 콘솔에서 해당 인스턴스가 Online 상태로 표시된다.

Private-ProductionServer이 Internet과 통신이 안되는데?

프라이빗 서브넷은 인터넷 게이트웨이(IGW)로 향하는 라우팅이 없는 서브넷이다.
따라서 SSM Agent가 아무리 SSM 서비스에 연결하려 해도, 인터넷으로 나가는 길 자체가 없다.

SSM Agent → 인터넷 (라우팅 불가능)

NAT Gateway vs VPC 엔드포인트

위 문제를 해결하기 위해 방법을 모색했고, 해결책 몇 가지를 찾게 되었다.

프라이빗 서브넷의 인스턴스가 AWS 서비스와 통신.

방법트래픽 경로보안특징
NAT Gateway프라이빗 서브넷 → NAT → 인터넷 → SSM인터넷을 경유하기 때문에 떨어진다.인터넷 전체에 접근 가능
VPC 엔드포인트 (PrivateLink)프라이빗 서브넷 → VPC 엔드포인트 → AWS 내부 네트워크 → SSM인터넷을 경유하지 않아 보안성이 높다.특정 AWS 서비스에만 접근

이 환경에서는 NatGateway를 생성할 수 없게 권한이 막혀있었고, 문제에서도 권장한 VPC EndPoint를 사용하게 되었다.

VPC 엔드포인트(PrivateLink)란?

VPC 엔드포인트는 인터넷을 거치지 않고 AWS 내부 네트워크로만 AWS 서비스에 접근할 수 있게 해주는 전용 통로다.

[정상 트래픽 흐름]

Private-ProductionServer
        ↓ (HTTPS/443)
VPC 엔드포인트 (ssm.region.amazonaws.com)
        ↓ (AWS 내부 네트워크 = PrivateLink)
AWS SSM 서비스

인터넷 게이트웨이, NAT 디바이스가 전혀 필요 없고, 트래픽이 AWS 네트워크 밖으로 나가지 않는다.

이 환경에서는 아래 두 개의 VPC 엔드포인트가 구성되어 있었다.

  • ssm.region.amazonaws.com
  • `ec2messages.region.amazonaws.com'

문제 원인 분석

네트워크 부분에서 2가지의 문제가 생겼다.

문제 1 - 네트워크 레벨: VPC 엔드포인트 보안 그룹

VPC 엔드포인트에도 보안 그룹이 붙어있다.
Private-ProductionServer가 VPC 엔드포인트에 포트 443으로 요청을 보낼 때, 이 보안 그룹이 트래픽을 허용할지 결정한다.

네트워크 부분을 확인했을 때, 이 보안 그룹의 인바운드 규칙에서 포트 443이 막혀버렸다.

Before (문제 상황):
Private-ProductionServer → (포트 443) → VPC 엔드포인트 X 보안 그룹이 막음

After (해결 후):
Private-ProductionServer → (포트 443) → VPC 엔드포인트 O → SSM 서비스

문제 2 - OS 레벨: hosts 파일 문제

SSM Agent가 ssm.us-east-1.amazonaws.com 에 접속하려면, 먼저 이 도메인의 IP 주소를 DNS로 조회해야 한다.

그런데 Windows의 hosts 파일은 DNS보다 우선순위가 높다.
hosts 파일에 해당 도메인이 등록되어 있으면, DNS 서버에 물어보지도 않고 hosts 파일의 IP로 접속을 시도한다.

네트워크 감사 이후 hosts 파일에 SSM 엔드포인트 주소가 잘못된 IP로 등록되어 있었다.

hosts 파일 (문제 상황):
ssm.us-east-1.amazonaws.com → 잘못된 IP  ← DNS보다 먼저 참조됨

결과:
SSM Agent가 엉뚱한 IP로 접속 시도 → 연결 실패
hosts 파일 (해결 후):
잘못된 항목 삭제 → DNS 서버가 올바른 IP 반환

진단 방법: ssm-cli

OS 레벨 문제를 확인하는 데 유용한 도구가 있다.
Private-ProductionServer에서 관리자 권한 PowerShell로 아래 명령을 실행하면 된다.

cd 'C:\Program Files\Amazon\SSM'
.\ssm-cli.exe get-diagnostics --output table

이 명령은 SSM Agent가 자가진단을 수행하고 결과를 테이블로 출력한다.
아래 두 항목이 핵심이다.

항목의미
Connectivity to ssm endpointSSM 서비스 엔드포인트 연결 가능 여부
Connectivity to ec2messages endpointEC2 메시지 서비스 연결 가능 여부

둘 다 Success 가 되어야 SSM이 정상 동작한다.


해결 순서 정리

1. AWS 콘솔 → VPC → 보안 그룹 → VPC-엔드포인트보안그룹
   → 인바운드 규칙에 포트 443, 소스: Private-ProductionServer IP 대역 추가

2. Bastion → Private-ProductionServer RDP 접속
   → hosts 파일 (C:\Windows\System32\drivers\etc\hosts) 확인
   → SSM 엔드포인트 관련 잘못된 항목 삭제

3. PowerShell에서 ssm-cli 진단 실행
   → 두 항목 모두 Success 확인

4. SSM Fleet Manager 콘솔에서 Online 상태 확인

최종 트래픽 흐름 (정상 상태)

[내 PC]
   ↓ RDP (포트 3389)
[Bastion-JumpServer] - 퍼블릭 서브넷
   ↓ RDP (포트 3389)
[Private-ProductionServer] - 프라이빗 서브넷
   ↓
[SSM Agent]
   ↓ HTTPS (포트 443)
[VPC 엔드포인트 - PrivateLink]
   ↓ AWS 내부 네트워크 (인터넷 미경유)
[AWS SSM 서비스]
   ↓
[Fleet Manager: Online]

정리 및 느낀 점

이번 JAM 문제를 풀면서 느낀 것은,

  • 일단 네트워크 문제는 레이어별로 쪼개서 생각해야 한다.
    보안 그룹(네트워크 레벨)을 고쳐도 hosts 파일(OS 레벨)이 잘못되어 있으면 아예 불가능했었다. 하나씩 레이어를 따라가면서 확인하는 방법이 느리긴 해도 문제를 확실히 해결할 수 있었다.

  • 이번 문제에서는 NatGateway를 허용하지 않아 VPC EndPoint를 사용하게 되었는데, NatGateway를 허용했을 때 VPC EndPoint와 NatGateway 중 어떤 리소스를 사용해야 하나? 생각해보아야 한다.
    일단 내 생각에는, NatGateway를 사용했을 때 Internet을 경유하기 때문에 보안성이 떨어져 VPC EndPoint를 사용할 것 같다.

감사합니다.

profile
최적화를 사랑하는 클라우드 엔지니어 whi02입니다.

0개의 댓글