AWS Transfer Family를 이용해서 로컬 파일을 S3 버킷으로 전송해 봤습니다.

AWS Transfer Family를 이용해서 로컬 파일을 S3 버킷으로 전송해 봤습니다.

AWS Transfer Family를 이용해서 로컬 파일을 S3 버킷으로 전송하는 방법에 대해서 정리해 봤습니다.
Clock Icon2024.09.25

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 AWS Transfer Family를 이용해서 로컬 파일을 S3 버킷으로 전송하는 방법에 대해서 정리해 봤습니다.

사전 준비

AWS Transfer Family를 생성하기에 앞서 먼저 아래 네 가지를 준비할 필요가 있습니다.

  • FTP, SFTP 전송 소프트웨어 준비
  • 로컬 PC에서 전송한 파일을 담을 S3 버킷 생성
  • IAM 권한 생성
  • SSH 퍼블릭 키 생성

먼저 AWS Transfer Family를 이용하여 로컬 PC의 파일을 전송하기 위해서 Cyberduck이라는 FTP, SFTP 전송 소프트웨어를 다운로드합니다.

https://cyberduck.io/download/

Cyberduck을 설치했다면, 파일을 담을 S3 버킷을 생성합니다.

jw-testblg-tf-1

S3 버킷을 생성하고, uploads → jaewook 폴더를 생성해 최종적으로 jaewook 폴더에 로컬 PC의 파일을 담을 예정입니다.

이어서 AWS Transfer Family에서 S3 버킷으로 파일을 전송하기 위한 권한을 생성합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListingOfUserFolder",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::test-jaewook-bucket2"
            ]
        },
        {
            "Sid": "HomeDirObjectAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::test-jaewook-bucket2/uploads/*"
        }
    ]
}

「test-jaewook-bucket2」을 본인이 생성한 S3 버킷의 이름으로 수정합니다.

이렇게 생성한 권한은 이후 AWS Transfer Family의 사용자를 생성하고, 해당 사용자에게 권한을 할당하여 S3 버킷으로 로컬 파일을 안전하게 전송할 수 있도록 사용할 수 있습니다.

마지막으로 AWS Transfer Family의 사용자에게 퍼블릭 키를 할당하기 위해 ssh-keygen으로 키를 생성합니다.

ssh-keygen -t rsa -b 4096 -f test-key-jaewook

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in test-key-jaewook
Your public key has been saved in test-key-jaewook.pub
The key fingerprint is:

터미널에서 해당 명령어를 입력하면, 비밀번호를 입력할 필요가 있으며, 사용자 임의의 비밀번호를 입력합니다. 해당 비밀번호는 cyberduck을 이용해 AWS Transfer Family에 접근할 때 필요합니다.

AWS Transfer Family 생성

사전 준비가 끝났다면, AWS Transfer Family를 생성합니다.

jw-testblg-tf-2

AWS transfer Family 콘솔 화면에서「서버」→「서버 생성」을 클릭합니다.

jw-testblg-tf-3

프로토콜은 디폴트 값인 SFTP를 선택합니다.

jw-testblg-tf-4

자격 증명 공급자는「서비스 관리형」을 선택합니다.

jw-testblg-tf-5

엔드포인트는「공개적으로 액세스 가능」을 선택하고 넘어갑니다.

jw-testblg-tf-6

도메인은 Amazon S3를 선택합니다.

jw-testblg-tf-7

마지막으로 추가 세부정보는 디폴트 값을 유지한 상태로 AWS Transfer Family를 생성합니다.

Transfer Family 사용자 생성

jw-testblg-tf-8

AWS Transfer Family를 생성했다면, 이제 사용자를 생성해 보도록 합시다.

jw-testblg-tf-9

사용자 구성에서 이름, 역할, 홈 디렉터리를 입력 혹은 선택합니다.

S3 버킷에서 파일을 저장할 장소는 uploads/jaewook가 되므로 홈 디렉터리에 S3 버킷을 선택하고 저장할 경로를 입력합니다.

jw-testblg-tf-10

또한, S3 버킷 항목에서「제한됨」을 체크하여 지정한 경로 이외에는 접근할 수 없도록 설정합니다.

SSH 퍼블릭 키에는 앞서 생성한 퍼블릭 키(test-key-jaewook.pub)의 내용을 복사 붙여넣기하고 사용자를 추가합니다.

Cyberduck을 이용하여 파일 전송

jw-testblg-tf-11

Cyberduck을 이용하여 파일을 전송하기에 앞서 접속하고자 하는 AWS Transfer Family 서버의 엔드포인트를 확인합니다.

jw-testblg-tf-12

이제 Cyberduck을 실행하고, AWS Transfer Family 서버의 엔드포인트를 입력합니다. 그리고 조금 전 생성한 사용자 이름을 입력하고 SSH Private Key에는「test-key-jaewook」를 불러옵니다. 「test-key-jaewook.pub」가 아닌 「test-key-jaewook」를 선택하도록 합시다.

마지막으로 Connect를 클릭하면, 비밀번호를 요구하며 퍼블릭 키를 생성했을 때 입력한 비밀번호를 입력합니다.

jw-testblg-tf-13

비밀번호까지 입력했다면, 성공적으로 연결된 것을 확인할 수 있습니다.

jw-testblg-tf-14

이제 테스트 이미지를 업로드합니다. Cyberduck에 보이는 화면에는 문제없이 업로드된 것으로 보입니다.

jw-testblg-tf-15

S3 버킷에서 확인해 보면, 성공적으로 파일이 업로드된 것을 확인할 수 있습니다. 또, Cyberduck에서 파일을 삭제하면 S3 버킷에서도 파일이 삭제됩니다.

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

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.