Search

AWS S3 Bucket 마이그레이션 하기 (서로 다른 계정 간)

Created time
2022/02/27 16:01
Modified
2022/11/14 12:56
Tags
aws
s3
보통 레거시 서비스를 마이그레이션 하면서 세 가지가 가장 큰 숙제라고 봅니다.
1.
DB 마이그레이션 : Legacy DB ⇒ New DB
2.
DB를 사용하는 애플리케이션 마이그레이션 : Legacy Application ⇒ New Application
3.
미디어 저장소 마이그레이션 : Legacy Media(jpg, mp4, ...) Storage ⇒ New Media Storage
여기서는 3. 애플리케이션용 미디어 마이그레이션을 다루겠습니다.
미디어 저장소로 AWS S3를 사용하는 경우 마이그레이션입니다.

AWS 새로운 계정의 S3 Bucket으로 Object를 옮기는 과정

마이그레이션에 준비해야하는 것

1.
AWS 계정 2개
Source Account :기존 S3 Bucket Objects가 있는 계정
Destination Account : 기존 S3 Bucket Objects가 옮겨질 계정
2.
Destination Account 안에서 생성한 IAM user 1개
3.
AWS CLI 모듈이 설치된 시스템 환경에 IAM user에서 가져온 credentials 값 셋팅

마이그레이션 과정

1.
S3 Objects를 옮기게 될 Destination Account의 Account Id를 가져옵니다.
2.
Source Account의 S3 Bucket에 Bucket Policy를 셋팅합니다.
3.
Destination Account의 S3 Bucket을 생성합니다.
4.
Destination Account의 IAM user 생성
5.
생성된 IAM user를 이용해서 AWS CLI 셋팅
6.
마지막으로 AWS CLI에서 명령어를 통해서 마이그레이션

"마이그레이션에 앞서 준비해야하는 것"을 준비하는 과정을 설명하겠습니다.

1. S3 Objects를 옮기게 될 Destination Account의 Account Id를 가져옵니다.

가져올 Account Id는 숫자로 된 12자리입니다.
다음 단계에서 쓰일 것이니 저장해둡니다.

2. Source Account의 S3 Bucket에 Bucket Policy를 셋팅합니다.

여기서 Bucket Policy를 Source Account의 S3 Bucket에 셋팅하는 이유는 다음과 같습니다.
일단, 해당하는 Bucket에서 Bucket List를 가져올 수 있습니다.
그리고 Bucket에 들어있는 옮기게 될 Object를 가져올 수 있습니다.
우선 Source account에 로그인하고, Source Account의 S3 Bucket으로 들어갑니다.
아래에...
"ACCOUNT_ID"는 아까 첫 번째에서 가져온 "Account Id" 숫자 12자리 숫자입니다.
"SOURCE_BUCKET_NAME"는 Objects를 옮기려는 Bucket의 이름입니다.
Resource의 "SOURCE_BUCKET_NAME", "SOURCE_BUCKET_NAME/*"는 Source bucket과 내용에 대해 모두 접근 가능하게 됩니다.
위 두 가지 "ACCOUNT_ID", "SOURCE_BUCKET_NAME"를 가져와서 바꾸어주고,
다음 S3 bucket policy를 넣어주고 save 해줍니다.( Bucket Policy를 더 공부하시려면 다음 링크를 참고하세요.)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateS3Access", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::SOURCE_BUCKET_NAME/*", "arn:aws:s3:::SOURCE_BUCKET_NAME" ] } ] }
JSON
복사

3. Destination Account의 S3 Bucket을 생성합니다.

여기서 Source Account의 S3 bucket objects를 옮길 Destination Account의 S3 bucket을 생성합니다.

4. Destination Account의 IAM user 생성

Destination Account의 IAM user를 생성하는 이유는 다음과 같습니다.
이미 Source Account의 S3 bucket에 대한 접근은 두 번째 과정에서 허용받았기 때문에,
Destination Account의 S3 bucket에 IAM user로 AWS CLI에 셋팅하고,
IAM user의 권한으로 Destination Account의 S3 bucket에 Objects를 마이그레이션하기 위함입니다.
이제 Destination Account에 Service "IAM"에 들어갑니다.
"User" 클릭 > "Add user" 클릭
AWS CLI에서 사용하기 위해서 사용할 IAM user를 생성하기 위해서 다음 과정을 따라갑니다.
User name 입력 > Access type: Programmatic access 선택 > Next: Permissions 클릭
AWS CLI에서 Source Bucket, Destination Bucket에 IAM user의 키를 활용해서 접근하기 위해서 user에 policy를 생성해주기 위해서 추가합니다.
"Attach existing policies directly" 클릭 > "Create policy" 클릭
다음 Policy를 아래 과정에 넣어줍니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::SOURCE_BUCKET_NAME", "arn:aws:s3:::SOURCE_BUCKET_NAME/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::DESTINATION_BUCKET_NAME", "arn:aws:s3:::DESTINATION_BUCKET_NAME/*" ] } ] }
JSON
복사
"JSON" 클릭 >"Review policy" 클릭
"Name" 입력 > "Create policy" 클릭
최종적으로 Policy가 생성이 되어집니다.
다시 아까 Add user로 돌아가서,
방금 생성한 policy를 검색 > IAM user 생성의 policy 클릭 > "Next: Tags"
IAM user에 tag를 붙일 수도 있습니다. 나중에 구분하는 구분자이기 때문에 원하시는 분은 넣어주셔도 됩니다.
여기서는 넣지는 않겠습니다. > "Next: Review"
"Create user" 클릭
최종적으로 IAM user가 생성됩니다.
"Download .csv" 클릭 > "Close"
.csv 파일로 된 IAM user의 "Access key ID", "Secret access key"를 다운로드합니다.
이제 IAM user가 생성된 것을 확인하실 수 있습니다.

5. 생성된 IAM user를 이용해서 AWS CLI 셋팅

이제 생성된 IAM user에서 .csv 파일로 된 IAM user의 "Access key ID", "Secret access key"를 활용해서 AWS CLI에 셋팅을 해보겠습니다.
일단은 IAM user를 셋팅하기 위한 AWS CLI를 여러분의 맥, 윈도우, EC2 등에 설치하겠습니다.
설치를 끝나게 되면 $ aws --version 를 통해서 확인해보시고 정상적으로 설치가 되었으면 ,
AWS CLI에 IAM user를 셋팅해보겠습니다.
CLI로 들어갑니다.
"AWS Access Key ID", "AWS Secret Access Key"는 IAM user .csv 파일에서 확인합니다."Default region name"은 링크를 통해 찾아서 본인에 맞는 리전을 넣습니다."Default output format"는 json을 넣습니다.
아래 처럼 셋팅을 마무리 합니다.
// Previous IAM user setting $ aws configure AWS Access Key ID [None]: IAM user .csv 파일에서 확인 AWS Secret Access Key [None]: IAM user .csv 파일에서 확인 Default region name [None]: ap-northeast-2 Default output format [None]: json
Bash
복사

6. 마지막으로 AWS CLI에서 명령어를 통해서 마이그레이션

다음 Command를 가지고, 명령어를 실행하면 ex)를 가지고 설명드리면,
source-bucket에 있는 Objects를 destination-bucket으로 Objects를 옮깁니다.
$ aws s3 sync s3://SOURCE-BUCKET-PATH s3://DESTINATION-BUCKET-PATH --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME ex) aws s3 sync s3://source-bucket s3://destination-bucket --source-region ap-northeast-2 --region ap-northeast-2
Bash
복사
차근 차근 내려오셨는지 모르겠네요.
Bucket 마이그레이션에 대해서 어려움을 가지고 계신 분들이 이 글을 보고 쉽게 해결하셨으면 합니다.
이상으로 AWS S3 Bucket 마이그레이션 하기 (계정 간) 를 마치겠습니다.