공부하는 블로그

AWS | 다른 계정으로 S3 Migration 본문

AWS

AWS | 다른 계정으로 S3 Migration

치킨닮은닭 2023. 10. 8. 20:58

 사이드 프로젝트를 진행하면서 서버 비용에 대한 부담을 조금이라도 절감하기 위해서 프리티어 계정으로 옮겨 다니기로 팀원들과 결정하였습니다.

 

 Elastic IP는 다른 계정으로 IP 주소를 그대로 옮기는 기능이 있었는데, S3 버킷을 다른 계정으로 기존 이름 그대로 마이그레이션하는 기능은 찾지 못하여 Source 버킷의 접근 권한을 변경하고, 버킷의 객체들을 CLI의 sync 명령어를 이용하여 다른 계정에서 전부 땡겨가는 방식으로 진행하였습니다.

 

Source Bucket 버킷 정책 추가

마이그레이션 대상이 되는 데이터가 위치한 Source Bucket에 Destination Account에서 접근할 수 있도록 접근 권한을 추가합니다.

 

1. Destination Account ID 확인

 

우측 상단의 계정 이름을 클릭하면 계정 ID를 확인할 수 있습니다. 클립보드 복사 버튼으로 손쉽게 복사할 수 있습니다.

 

2. Source Bucket 정책 추가

 

 

"S3 > Bucket > Source Bucket > 권한탭"에서 버킷 정책을 편집 가능합니다. 아래의 내용으로 버킷 정책을 추가해주세요

{
	"Version": "2012-10-17",
	"Id": "MyPolicy12345678",
	"Statement": [
	    {
			"Sid": "S3AccessForMigration",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::**{DESTINATION_ACCOUNT_ID}**:root"
			},
			"Action": [
				"s3:ListBucket",
				"s3:GetObject"
			],
			"Resource": [
				"arn:aws:s3:::**{SOURCE_BUCKET_NAME}**/*",
				"arn:aws:s3:::**{SOURCE_BUCKET_NAME}**"
			]
		}
	]
}

 

S3 버킷 목록을 확인하고 객체를 읽을 수 있는 권한을 목적지 계정에게 부여하였습니다.

Destination Account에 IAM 유저 생성

AWS CLI를 이용하여 데이터를 이동시키기 위해 IAM 유저를 생성하고 access key와 secret key를 발급합니다.

 

1. IAM 정책 생성

 

"IAM > 정책" 메뉴에서 정책 생성이 가능합니다. 아래의 JSON 내용으로 버킷 정책을 생성해주세요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3AccessToSourceBucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::**{SOURCE_BUCKET_NAME}**",
                "arn:aws:s3:::**{SOURCE_BUCKET_NAME}**/*"
            ]
        },
        {
            "Sid": "S3AccessToDestinationBucket",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::**{DESTINATION_BUCKET_NAME}**",
                "arn:aws:s3:::**{DESTINATION_BUCKET_NAME}**/*"
            ]
        }
    ]
}

 필요한 권한은 SourceBucket에 대한 ListBucket, GetObject 권한과 Destination Bucket에 대한 ListBucket, PutObject 권한입니다.

 

2. IAM 유저 생성

 

"IAM > 사용자" 메뉴에서 유저 생성이 가능합니다.

 

 

사용자 이름을 지정하고 다음 버튼을 눌러주세요.

 

 

권한 설정에서는 직접 정책 연결을 선택하여 위에서 생성한 s3-migration-policy를 연결하고 다음 버튼을 눌러주세요. 다음 화면에서 요약된 내용을 확인 후 사용자 생성 버튼을 누르면 사용자 생성이 완료됩니다.

Access Key 발급

AWS CLI 사용을 위해 생성한 유저의 액세스 키를 발급합니다.

 

 

생성한 IAM 사용자의 상세 페이지에서 액세스 키를 발급받을 수 있습니다.

 

 

액세스 키를 CLI에서 사용할 것이므로 사용 사례를 CLI로 선택하고 다음으로 넘어갑니다.

 

 

태그는 선택사항이므로 그냥 넘어가도 무관합니다.

 

 

액세스 키를 만들었을 때만 Secret Access Key를 확인이 가능합니다. 위 페이지 이후에는 액세스키 확인이 불가하니 ".csv 파일 다운로드"를 클릭하여 보관하거나 로컬 메모장에 기록해두도록 합니다.

AWS CLI를 이용한 Migration 진행

 AWS CLI가 설치된 환경에서 발급받은 액세스 키를 이용하여 터미널에서 마이그레이션을 진행하겠습니다.

 

 먼저 CLI를 사용하는 사용자를 aws configure 명령어를 이용하여 설정합니다.

> aws configure
AWS Access Key ID: {발급받은 액세스키 입력}
AWS Secret Access Key ID: {발급받은 비밀 액세스키 입력}
Default region name: {버킷의 리전 이름 입력 ex. ap-northeast-2}
Default output format: {결과 출력 포멧 지정 ex. json}

 

유저 설정 후 aws s3 sync 명령어로 마이그레이션을 진행합니다.

 

> aws s3 sync s3://{SOURCE_BUCKET_NAME} s3://{DESTINATION_BUCKET_NAME} --source-region {SOURCE_REGION_NAME} --region {DESTINATION_REGION_NAME}

 

명령어를 수행하면 copy 로그들이 찍히며 로그가 끝나면 마이그레이션이 완료됩니다 !

Comments