다른 계정 간의 S3 Object Migration
이번 글에서는 다른 계정 간에 S3 객체를 이전하는 방법을 알아보자.
처리 과정을 이해하기 쉽게 하기 위해 계정 A를 복사할 파일의 출발지, 계정 B를 복사된 파일의 목적지라고 서로 약속하자.
워크로드
- 계정 A: 복사할 파일의 출발지 (Source)
- 계정 B: 복사된 파일의 목적지 (Target)
계정 B에서 S3 Bucket의 권한을 갖는 IAM을 생성하고, 복사할 객체를 가지고 있는 계정 A의 Bucket의 권한을 계정 B에게 줘서 S3 Bucket 안의 Object를 이전한다.
이 방법은 S3의 모든 객체를 가져오는 것 뿐만 아니라 폴더의 구조까지 복사해 올 수 있기 때문에 기존 계정의 Bucket의 폴더 구조가 복잡하게 되어 있더라도 그대로 옮겨 올 수 있다는 장점이 있다.
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를 적어보자
- 정책 검토 → 정책 생성 순으로 클릭해 정책을 생성하자
- 생성한 정책을 사용자 권한에 추가하자
계정 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"
]
}
]
}
AWS CLI에서 Sync
계정 B의 IAM 키 값을 등록하여 복사할 Source-Bucket을 조회해보자.
- 여러 계정으로 CLI를 접속해야 한다면
--profile
이라는 기능을 사용하면 좋다.
1
aws configure --profile sync-test
1
aws s3 ls s3://Bucket-Source
Migration
객체를 이전해보자
1
aws s3 sync s3://Bucket-Source s3://Bucket-Target
이전이 된 걸 확인할 수 있을 것이다.
This post is licensed under CC BY 4.0 by the author.