네이버클라우드는 Object storage라는 서비스가 있습니다. 버킷을 생성하고, 파일을 업로드하는 저장 공간입니다.
문득, 궁금한 점이 생겼습니다.
다른 사용자가 가진 버킷의 파일을, 내 버킷으로 가져올 수 있는 방법은 없을까?
NCUC에도 문의를 해보고, 네이버클라우드에도 문의를 해봤습니다.
멀티프로파일 설정이 문제가 있어 aws s3 sync 명령어로는 다른 계정의 버킷으로 전송이 어렵다는 의견을 받았습니다. 그 외에도 로컬에 직접 내려받고, 다시 다른 계정으로 업로드를 해야한다는 의견을 주셨습니다.
네이버클라우드의 문의하기 답변은 다음과 같습니다.
https://www.ncloud.com/support/faq/prod/2883
내용을 잠깐 살펴보면, 다음과 같은 명령어를 활용해보면 좋다고 합니다. 메인 계정에서 다른 계정으로 동기화하는 명령어를 소개합니다.
aws --endpoint-url=https://kr.object.ncloudstorage.com s3 sync s3://a s3://b
또한, 두 계정에 전체 권한을 부여를 위한 명령어도 소개합니다.
(CANONICAL_USER_ID: Object Storage에서 NCP 계정을 식별하는 사용자ID(예: ncp-xxxxxxx-0))
aws --endpoint-url=https://kr.object.ncloudstorage.com s3 sync s3://a s3://b --grants full=id=CANONICAL_USER_ID1,id=CANONICAL_USER_ID2
이러한 답변 외에, 혼자 검색해서 다른 서드파티나 오픈소스를 찾아보았습니다.
이유는 대상 계정의 콘솔에는 접근할 수 없고, 오직 인증키 정보와 엔드포인트만 제공하는 경우가 있었습니다. 그러한 경우에도 작동하는 방법을 찾기 위함입니다.
RCLONE
그래서 찾아본 것이 RCLONE입니다.
https://nangman14.tistory.com/36
찾아보니 유명한 클라우드나 서버 스토리지 혹은 Local에서 파일 전송 도구라고 합니다. 간단한 명령어로 다른 두 네이버클라우드 계정이 소유한 버킷 간 파일 전송을 시도해보기로 했습니다.
두 가지 방법이 있습니다. copy(복사)와 sync(동기화)입니다. 비슷해보이지만, 저는 안전하게 복사를 해보기로 했습니다.
RCLONE 설치 및 스토리지 설정
제가 가진 네이버클라우드 ubuntu 20.04 서버를 사용했습니다. apt-get 명령어를 사용하여 설치합니다.
apt-get -y install rclone
전송을 원하는 원격 스토리지 이름을 원하는대로 지정합니다.
rclone config
해당 설정화면에서 n을 눌러, 새로운 스토리지 정보를 등록합니다.
다음으로 Storage 종류를 고릅니다. 네이버클라우드는 Amazon S3 Compliant Storage Provider인 4번으로 설정합니다.
위에서 고른 4번 이후, 더 구체적인 S3 provider를 고를 수 있습니다. 여기서 10번인 Other를 선택했습니다.
네이버클라우드의 AWS 호환 인증키를 알고 있으므로, 이를 바로 입력하고자 1번을 입력합니다.
대상 버킷의 인증키 정보(Access Key, Secret Key)를 모두 입력합니다.
Region을 고르는 부분은, 1번을 눌러 생략할 수 있습니다.
대상 엔드포인트를 입력합니다. 네이버클라우드 기준으로 민간존이면, kr.object.ncloudstorage.com로 입력하시고, 공공존은 kr.object.gov-ncloudstorage.com으로 입력합니다. 저는 민간존으로, 전자를 입력했습니다.
또한, 그 아래 location_constraint을 묻는 부분은, region을 입력하지 않았으므로, 그냥 비워두고 바로 엔터를 입력합니다.
다음은 서버측의 ACL 설정인데, 저는 테스트용이므로 과감하게 2번 public-read를 사용했습니다. 실제 상황에서는 필요한 권한을 최소로 설정해주는게 좋다고 합니다.
그 외에 advance 설정은 no로 넘어가면 아래와 같이 확인 부분이 나옵니다. 입력한 정보가 맞다면, y를 입력하여 최종 확정해줍니다. 등록이 완료되면, 오른쪽 그림처럼 나타납니다.
이 상태에서, n을 눌러서 같은 방법으로 하나 더 등록합니다. 아래처럼 총 두 개의 remote가 생성되었습니다.
계정별 버킷 내부 파일 목록 확인
이제, 각 remote에 해당하는 버킷의 내부를 확인해보겠습니다. 먼저, swift라는 remote가 가진 버킷을 살펴보겠습니다. 콘솔에서 보면, send라는 버킷이 있습니다. 내부 파일들을 확인해보고, 비교해봅니다.
명령어는 다음과 같습니다.
rclone lsf swift:send/
swfit의 send 버킷에는 1.txt, 2.txt, 3.txt, 4.txt 파일을 확인할 수 있습니다.
같은 원리로, graph에 있는 receive 버킷을 확인합니다.아무것도 들어있지 않습니다. 비어있네요.
파일 복사하여 옮기기
파일 이동은 동기화 명령어 sync, 복사 명령어 copy를 사용할 수 있습니다.
아래처럼 remote에서 remote로 옮기면, remote1에 해당하는 계정의 버킷(bucket1)의 모든 파일을 remote2 계정의 bucket2로 복사하거나 동기화할 수 있습니다.
혹은, remote에 해당하는 계정의 버킷내 파일을 /local/path 와 같은 현재 사용하시는 서버의 특정 경로로 copy/sync를 통해 "다운로드"할 수도 있습니다. 이를 반대로 작성한다면, 현재 쓰는 서버의 특정 경로내 파일이나 폴더를 remote 계정의 버킷으로 "업로드"하게 됩니다.
rclone copy|sync remote1:bucket1/ remote2:bucket2/
rclone copy|sync remote:bucket/ /local/path/ #remote에서 다운로드
rclone copy|sync /local/path/ remote:bucket/ #remote로 업로드
제 목적은 특정 버킷내 모든 파일을 복사하여 다른 계정의 버킷으로 전송하는 것입니다. 즉, remote1의 bucket의 모든 파일과 폴더를 remote2의 bucket으로 옮긴다면, 아래와 같은 명령어를 입력합니다. 이 때, 완료될 때까지 세부적인 내용(진행시간, 진행률 등)을 보려면 --progress 옵션을 줍니다.
rclone copy --progress remote1:bucket remote2:bucket
swift라는 리모트 내에 있는 send 버킷의 4가지 파일을 복사하여, graph의 receive 버킷으로 전송해보겠습니다.
명령어는 아래와 같습니다.
rclone copy --progress swift:send/ graph:receive/
파일이 모두 전송되어, Transferred가 100%로 표기되었습니다.
그 결과를 확인해보겠습니다. 문제가 없다면, send 버킷은 그대로일 것이고, receive 버킷에는 send 버킷에 있는 1.txt, 2.txt, 3.txt, 4.txt 파일이 추가되었을 것입니다.
위에서 보면, 두 계정의 send, receive 버킷 모두에서 1.txt, 2.txt, 3.txt, 4.txt 파일을 확인할 수 있습니다. 콘솔에도 확인해봅니다.
이렇게 두 계정의 버킷에서 모두 같은 파일이 복사되어 전송된 것을 확인할 수 있습니다.
비록, 인바운드가 아닌 아웃바운드 전송비용이 부과되기는 하지만, 가볍게 테스트 용도로는 활용해볼 수 있을 것이라 생각합니다. 다음에는 s3 browser라는 도구로도 서로 다른 두 네이버클라우드 계정의 버킷에서 파일 전송을 시도해보겠습니다.
감사합니다.
'네이버클라우드' 카테고리의 다른 글
[NCTM] 퇴근길 테크 밋업 후기: 클로바 스튜디오의 미래 (1) | 2024.02.03 |
---|---|
[Ncloud] S3 Browser로 두 계정의 bucket to bucket 파일 전송 (0) | 2024.01.28 |
[Ncloud] Clova Studio 시작 및 응용 준비하기 (0) | 2023.12.08 |
NAVER Cloud Platform Certified Expert (NCE) 시험 후기 및 조언 (3) | 2023.10.27 |
NAVER Cloud Platform Certified Associate (NCA) 시험 후기 (0) | 2023.10.19 |