다른 계정 간의 S3 Object Migration
다른 계정 간의 S3 Object Migration
이번 글에서는 다른 계정 간에 S3 객체를 이전하는 방법을 알아보자.
1. 워크로드
- 계정 A: 복사할 파일의 출발지 (Source)
- 계정 B: 복사된 파일의 목적지 (Target)
계정 B에서 S3 Bucket의 권한을 갖는 IAM을 생성하고, 복사할 객체를 가지고 있는 계정 A의 Bucket의 권한을 계정 B에게 줘서 S3 Bucket 안의 Object를 이전한다.
이 방법은 S3의 모든 객체를 가져오는 것 뿐만 아니라 폴더의 구조까지 복사해 올 수 있기 때문에 기존 계정의 Bucket의 폴더 구조가 복잡하게 되어 있더라도 그대로 옮겨 올 수 있다는 장점이 있다.
2. IAM 정책 생성 → 연결
계정 B에 IAM 정책부터 생성한다. 예시로 인라인 코드를 적어보겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::Source_Bucket",
"arn:aws:s3:::Source_Bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::Target_Bucket",
"arn:aws:s3:::Target_Bucket/*"
]
}
]
}
- ‘Source-Bucket’에 계정 A에서 이전할 객체 path를 기입하고
‘Target-Bucket’에 이전된 객체가 위치할 path를 적어보자
- 정책 검토 → 정책 생성 순으로 클릭해 정책을 생성하자
- 생성한 정책을 사용자 권한에 추가하자
3. 계정 A의 Bucket Policy 설정
계정 B에 대한 세팅을 끝낸 후 계정 A의 Bucket Policy를 설정한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "Account B's AccountID"
},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::Source_Bucket/*",
"arn:aws:s3:::Source_Bucket"
]
}
]
}
4. AWS CLI에서 Sync
계정 B의 IAM 키 값을 등록하여 복사할 Source-Bucket을 조회해보자.
- 여러 계정으로 CLI를 접속해야 한다면
--profile
이라는 기능을 사용하면 좋다.
1
aws configure --profile sync-test
1
aws s3 ls s3://Bucket-Source
5. Migration
객체를 이전해보자
1
aws s3 sync s3://Bucket-Source s3://Bucket-Target
이전이 된 걸 확인할 수 있을 것이다.
This post is licensed under CC BY 4.0 by the author.