안녕하세요. 갓대희 입니다. 이번 포스팅은 [ AWS - S3 에 FileZilla, MobaXterm으로 S3 파일 전송해보기 ] 입니다. : )
0. 들어가기 앞서
- AWS는 EBS, EFS, FSx, S3, Glacier 등등, 요구사항에 맞춰 다양한 스토리지 서비스를 제공한다.
- 예전에 SFTP를 사용하기 위해 리눅스에 직접 SFTP 설치, 설정을 했었던 기억이 있다. (https://goddaehee.tistory.com/73 )
- AWS Transfer Family와 S3를 통해 구지 서버 없이도, 즉 Serverless 하게 SFTP를 구현할 수 있어 이와 관련된 실습을 해보려 한다.
1. AWS Transfer Family 란?
https://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/what-is-aws-transfer-family.html
- AWS S3 또는 EFS 서비스에 파일을 직접 송수신할 수 있는 완전관리형 서비스 이다.
- 즉, AWS Transfer Family 서비스로 SFTP이 구축이 가능하며, 저장소는 S3와 EFS를 사용할 수 있다.
- AWS Transfer의 가격은 하기 내용을 참고 하도록 하자.
https://aws.amazon.com/ko/aws-transfer-family/pricing/
- 실습 이후 하기 튜토리얼 문서를 참고하여 더 자세한 내용을 확인하면 좋을 것 같다.
https://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/getting-started.html
※ 비용이 싸진 않기 때문에 꼭 써야 할까? SFTP에 접속할 수 있는 엔드포인트를 기준만으로도 비용이 어느정도 발생하기
때문에 실무환경이 아닌 경우 꼭 죽여 놓길 바란다. ㅠㅠ
실제 나의 약 한달간 사용했을때의 비용 예시..
2. SSH 퍼블릭 키 생성
SFTP의 경우 인증을 위해 SSH키 파일이 필요하다. AWS Transfer에 유저를 생성할 예정이고, 해당 유저에게 부여할 SSH 키를 미리 만들어 주자.
1) PuTTygen - Download : https://www.puttygen.com/
- 본인의 환경에 맞는 PUTTYgen을 다운 로드 한다.
- PuttyGen을 실행 후 Generate 버튼을 클릭한다.
2) Public Key와 Private Key 생성
- 난수 생성을 위해 화면안에서 마우스를 움직이라고 요청하니, 이리 저리 움직여 준다. ① Public Key : AWS Transfer Family SFTP 서버 생성시 공개키입력에 복사해야 한다. 퍼블릭 키를 복사해 별도로 저장해보자. ② Private Key : 적당한 파일명으로 저장 후 Client에서 키 인증시 사용
3. AWS Transfer 생성 전 사전 설정
1) 데이터를 저장할 S3 버킷 생성
- AWS Transfer는 S3 혹은 EFS로 파일 전송이 가능한데, 이번 포스팅에서는 S3에서 파일을 저장할 예정이다. - 원하는 버킷 이름을 입력하고 기본셋팅대로 생성 (이번엔 모든 퍼블릭 엑세스 차단도 체크해 보자.)
2) IAM 역할 생성 - S3에 접근을 위한 역할(role)생성
- AWS Transfer에서 S3에 데이터를 읽고 쓰기 위해서는 해당 버킷에 접근하기 위한 역할이 필요 하다.
- IAM > 역할 > "역할 만들기" 클릭.
- 서비스 또는 사용 사례 > "Transfer" 검색, 클릭.
- "Transfer" 클릭 및 "다음" 클릭 하여 진행 하자.
- 권한 중 AmazonS3FullAccess 를 선택한다.
(추후에 사용자, 유저별로 권한 제한할 예정이기 때문에 일단 FullAccess를 부여한다.)
- 적절한 이름으로 역할을 생성한다. > "다음" 클릭하여 진행.
ex) AWSTransfer-S3-Full-Role
4. AWS Transfer 생성
- AWS Transfer로 이동 > 서버 생성을 클릭 한다.
- 1단계 (프로토콜 선택) : 활성화 프로토콜중 "SFTP"를 선택한다.
- 2단계(자격 증명 공급자 선택) : "서비스 관리형" 클릭
- 3단계(엔드포인트 선택) : "공개적 엑세스"를 선택하고 호스트이름은 없음으로 선택합니다.
( 참고, Route53을 통해 엔드포인트를 보유한 도메인으로 연결시킬 수 있다. 하지만 해당 내용은 추후 진행)
- 4단계(도메인 선택) : "Amazon S3"를 선택. 이번엔 S3를 통한 설정 실습을 진행 한다.
- 5단계(추가 세부 정보 구성) : 기본 설정 그대로 진행 한다.
- 6단계(검토 및 생성) : 설정한 내용을 검토 후 진행 한다.
- 정상적으로 신규 AWS Transfer가 생성된 것을 볼 수 있다.
5. AWS Transfer 유저 생성
- 생성된 서버를 클릭하여 상세 페이지로 이동 > "사용자 추가" 클릭.
- 사용할 사용자 이름을 입력.
- 역할은 내가 위에서 생성했던 역할을 선택한다. (나의 경우 AWSTransfer-S3-Full-Role)
- 정책은 없음으로 선택.
- 내가 생성했던 s3 선택 및 홈 디렉터리 지정
- 위에서 생성했던 "SSH 퍼블릭 키"를 입력 하고 "추가" 클릭
6. 접속 테스트
- "엔드포인트" url을 복사 한다.
- SFTP Client 프로그램을 실행시킨 후 다음과 같이 입력 한다. 나의 경우 "파일질라", "MobaXterm"을 통해 접속 해보려 한다.
1) Filezilla
- 새 연결 > 프로토콜은 "SFTP"로 선택, 호스트는 복사한 엔드포인트를 붙여넣자.
- 사용자 : 내가 만든 사용자명 입력 하고, puttyGen으로 생성했던 Private 키 파일을 선택 한다.
- "연결" 을 클릭하면 다음과 같은 경고가 뜨는데 "확인" 클릭.
- 이후 정상적으로 접속 된 것을 볼 수 있다.
- 원하는 파일도 전송(더블클릭 또는 드래그) 하면 잘 되는것을 볼 수 있다.
- S3 콘솔에서도 정상 업로드 여부를 확인해 보자.
1) MobaXterm
- Session > SFTP 클릭
- 호스트 : 위에서 복사하였던 엔드 포인트, Username : 내가 만든 사용자명 입력 하고, puttyGen으로 생성했던 Private 키 파일을 선택 한다. 이후 "OK" 클릭.
- 처음 접속시 나오는 문구도 확인 후 "Accept" 클릭.
- 정상적으로 접속 되는것을 볼 수 있다.
- 이번 포스팅에서는 AWS Transfer를 통해 간단히 Serverless 로 SFTP 서버를 구축해보았다.
- CloudFormation 템플릿으로 미리 구성해 둘 수도 있는데, 이번 포스팅에서는 해당 내용은 생략 하려고 한다.