인터넷 경로가 없는 EC2 인스턴스에서 S3 버킷에 액세스 하고 싶을 때는?
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 인터넷 경로가 없는 EC2 인스턴스에서 S3 버킷에 액세스 하고 싶을 때 어떤 서비스를 이용해 액세스 해야하는 지 정리해 봤습니다.
인터넷 경로가 있는 경우
먼저 Public Subnet과 Private Subnet에 각각 EC2 인스턴스를 생성한 상태입니다.
※ Private Subnet의 경우 NAT Gateway를 통해 SSM 접속이 가능한 상태입니다.
Public Subnet에 있는 EC2 인스턴스의 경우 S3로 문제없이 Ping을 보내고 응답을 받아볼 수 있습니다.
※ 현재 오사카 리전에서 EC2 인스턴스를 생성했으며, 도쿄 리전의 S3 버킷에 Ping을 보내고 있습니다.
Private Subnet에 있는 EC2 인스턴스도 NAT Gateway가 있기 때문에 Ping을 보내고 응답을 받아볼 수 있습니다.
NAT Gateway를 삭제하고, Private Subnet에 있는 EC2 인스턴스에서 Ping을 날려보면 전혀 응답이 돌아오지 않습니다.
※ 도쿄 리전으로 Ping을 날려보아도 응답은 돌아오지 않습니다.
게이트웨이 엔드포인트(Gateway Endpoint)
인터넷 경로 혹은 NAT Gateway를 사용하지 않고, 게이트웨이 엔드포인트(Gateway Endpoint)를 이용해서 S3 버킷에 액세스할 수 있습니다.
※ 게이트웨이 엔드포인트 사용에 추가 요금은 없습니다.
엔프도인트에서 게이트웨이 엔드포인트를 생성합니다.
- 엔드포인트의 이름을 입력합니다.
- 서비스 범주는「AWS 서비스」를 선택합니다.
S3의 게이트웨이 엔드포인트를 선택합니다.
마지막으로 라우팅 테이블을 선택합니다.
여기서 선택할 라우팅 테이블은 엔드포인트에서 사용할 라우팅 테이블 즉, 서버로 전송되는 트래픽을 가리키는 라우팅이 라우팅 테이블에 추가되므로 Private Subnet의 라우팅 테이블을 선택합니다.
이후 생성된 게이트웨이 엔드포인트를 확인할 수 있습니다.
라우팅 테이블을 확인해 보면 게이트웨이 엔드포인트의 라우팅이 추가된 것을 확인할 수 있습니다.
게이트웨이 엔드포인트를 생성하고 난 후, Ping을 날려보면 문제 없이 응답을 받을 수 있습니다.
반대로 조금 전 상황처럼 도쿄 리전으로 Ping을 날려봤지만, 도쿄 리전은 응답이 돌아오지 않았습니다.
- 게이트웨이 엔드포인트는 해당 엔드포인트를 생성한 리전에서만 사용할 수 있습니다. S3 버킷과 동일한 리전에서 게이트웨이 엔드포인트를 생성해야 합니다.
AWS 공식 문서를 살펴보면, 해당 엔드포인트가 생성된 리전에서만 사용할 수 있으며, 동일한 리전에 있는 S3 버킷에만 액세스 가능하다고 나와있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.