Private Subnet에 있는 EC2 인스턴스에 SFTP 연결을 해 봤습니다.

Private Subnet에 있는 EC2 인스턴스에 SFTP 연결을 해 봤습니다.

Private Subnet에 있는 EC2 인스턴스에 SFTP 연결을 해 봤습니다.
Clock Icon2024.12.16

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Private Subnet에 있는 EC2 인스턴스에 SFTP 연결을 해 봤습니다.

먼저 Private Subnet에 있는 EC2 인스턴스에 연결하기 위해 SSM 포트포워딩을 사용할 생각입니다.

https://dev.classmethod.jp/articles/jw-to-access-ec2-on-a-private-subnet-using-session-manager-port-forwarding/

첫 번째 패턴

먼저 첫 번째 패턴으로는 Public Subnet에 NAT Gateway를 생성하고, 로컬 환경에서 Private Subnet의 EC2 인스턴스로 SSM 포트포워딩을 실시합니다.

jw-blgftptets-1

SSM 포트포워딩을 실시했다면, 로컬 PC에서 SFTP를 통한 파일 전송이 되는지 확인해 봅시다.

jw-blgftptets-2

SSM을 이용한 접속이 되기 때문에 EC2 인스턴스의 보안 그룹은 존재하지 않는 1.2.3.4/32 라는 IP 주소를 설정합니다.

이어서 SSM 포트포워딩을 사용하기 위해 로컬 PC에 AWS CLI 환경을 준비합니다. 상세한 내용은 아래 블로그를 참고해 주세요.

https://dev.classmethod.jp/articles/setting-up-the-aws-cli-environment-in-a-mac/

준비가 다 끝났다면, 포트포워딩을 실시합니다.

aws ssm start-session --target i-05bae50ad64191f26 --document-name AWS-StartPortForwardingSession --parameters "portNumber=22,localPortNumber=13389"
  • i-05bae50ad64191f26 : EC2 인스턴스 ID
  • portNumber=22 : 접속하고자 하는 EC2 인스턴스의 포트
  • localPortNumber : 로컬 환경에서 사용하고자 하는 포트
ssh -i "test-key.pem" -p 13389 ec2-user@localhost
Last login: Mon Dec 16 02:38:01 2024 from localhost

이어서 또 다른 터미널 환경을 열어서 SSH 접속을 시도해 보면, EC2 인스턴스에 접속할 수 있습니다.

이제 SSH 접속을 확인했으니 SFTP 파일을 전송해 봅시다.

현재 Mac을 사용하고 있으므로 SFTP 전송 프로그램으로는 Cyberduck을 사용할 생각입니다. Cyberduck 설치 방법에 대해서는 아래 블로그를 참고해 주세요.

https://dev.classmethod.jp/articles/jw-send-local-files-using-aws-transfer-family/#%25EC%2582%25AC%25EC%25A0%2584-%25EC%25A4%2580%25EB%25B9%2584

jw-blgftptets-3

SSM의 포트포워딩은 SSH 기반으로 작동하므로, FTP 대신 SFTP를 사용해야 하므로, Cyberduck에서 SFTP를 선택하고, 서버, 포트, 사용자 이름을 입력하고 EC2 인스턴스의 키 페어를 선택한 다음 연결합니다.

jw-blgftptets-4

마지막으로 테스트 파일을 업로드해 보면, 성공적으로 EC2 인스턴스에 파일이 업로드된 것을 확인할 수 있습니다.

두 번째 패턴

두 번째 패턴으로는 Public Subnet에 발판 서버를 생성하고, 이 발판 서버를 이용하여 포트포워딩하는 것입니다.

jw-blgftptets-5

이렇게 발판 서버를 이용하여 포트포워딩을 했다면 로컬 환경에서 SFTP 연결을 할 수 있을 것입니다.

먼저 EC2 인스턴스의 보안 그룹은 첫 번째 패턴과 달라집니다.

jw-blgftptets-8

Public Subnet의 발판 서버 보안 그룹에는 접속하고자 하는 사용자의 IP(내 IP)를 설정합니다.

jw-blgftptets-9

Private Subnet의 EC2 인스턴스 보안 그룹에는 발판 서버에서만 접속이 가능하도록 발판 서버의 보안 그룹을 설정합니다.

보안 그룹 설정이 끝났다면, Private Subnet으로 포트포워딩하여 SFTP 연결을 시도합시다.

ssh -i "test-key.pem" -L 8080:10.0.138.22:22 ec2-user@13.114.223.236
  • test-key.pem : EC2 인스턴스의 키 페어
  • 8080 : 로컬 환경에서 사용하고자 하는 포트
  • 10.0.138.22:22 : Private Subnet의 EC2 인스턴스IP와 포트
  • ec2-user@13.114.223.236 : Public Subnet의 EC2 인스턴스 사용자와 IP
ssh -i "test-key.pem" -L 8080:10.0.138.22:22 ec2-user@13.114.223.236
[ec2-user@ip-10-0-12-196 ~]$ 

해당 명령어를 이용하면 포트포워딩에 성공하며, EC2 인스턴스로 접속이 됩니다.

jw-blgftptets-6

이어서, 조금 전과 동일하게 Cyberduck을 이용하여 SFTP 접속을 시도합시다.

jw-blgftptets-7

첫 번째 패턴에서 업로드 했던 파일이 표시되며, SFTP 연결에 성공한 것을 확인할 수 있습니다.

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 jaewookkim533@yahoo.com로 보내주시면 감사하겠습니다.

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.