안녕하세요.
이번 글에서는 계정간에 S3 데이터를 복사하는 방법에 대해서 알아보도록 하겠습니다.
우선 이해하기 쉽도록 계정 A를 복사할 파일의 출발지, 계정 B를 복사된 파일의 목적지라고 설정해두겠습니다.
우선 계정 B에서 S3 Bucket의 권한을 갖는 IAM을 생성해 해당 키 값을 이용하고, 복사할 객체를 가지고 있는 계정 A의 Bucket Policy를 수정한 후 계정 B에서 생성한 IAM의 키 값을 이용해 AWS CLI를 통해 S3 Bucket을 통째로 복사해 B 계정의 S3 Bucket으로 이전할 수 있습니다.
이 방법은 S3의 모든 객체를 가져오는 것 뿐만 아니라 폴더의 구조까지 복사해 올 수 있기 때문에 기존 계정의 Bucket의 폴더 구조가 복잡하게 되어 있더라도 그대로 옮겨 올 수 있다는 장점이 있습니다.
먼저 계정 B에 IAM 정책을 생성합니다.
{
"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에서 복사할 버킷의 이름을 적어줍니다.
Target-Bucket에 복사할 계정 B의 버킷 이름을 적어줍니다.
정책 검토 → 정책 생성을 클릭하여 정책을 생성합니다.
생성된 정책을 사용자의 권한에 추가를 합니다.
추가 이유는 CLI를 이용하여 S3에 접근을 해야 하기 때문에, 기존 사용하던 사용자가 있을 시 기존 사용자에게 추가, 사용하던 사용자가 없다면 새로 생성하여 CLI를 쓰기 위한 키 값을 알아야 합니다.
계정 B에 대한 세팅을 끝낸 후 계정 A의 Source-Bucket의 버킷 정책을 설정합니다.
계정 A의 S3 > Source-Bucket > 권한 > 버킷 정책으로 접근하여 아래와 같은 버킷 정책을 등록해줍니다.
{
"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"
]
}
]
}
그림에 나온 대로 구성 및 권한 설정을 끝낸 후 CLI에 접속하여 복사를 수행하는 과정을 진행합니다.
계정 B의 IAM 키 값을 등록하여 복사할 Source-Bucket을 AWS CLI를 이용하여 조회 합니다.
--profile
이라는 기능을 사용하면 좋습니다.$ aws configure --profile sync-test
$ aws s3 ls s3://Bucket-Source
현재 Target-Bucket에는 아무 객체도 존재하지 않습니다.
복사 작업을 진행합니다.
$ aws s3 sync s3://Bucket-Source s3://Bucket-Target
복사가 성공적으로 되었습니다.
여기서 확인해야 할 사항이 있는데 복사가 된 Target-Bucket에서 권한 > 액세스 제어 목록에 가보면 버킷 소유자의 액세스 권한이라는 것이 보입니다.
그 곳에 아래 이미지와 같이 권한이 부여되어 있어야 올바르게 복사 된 것으로, 복사한 객체들을 컨트롤 할 수 있습니다. (삭제, 이름 변경 등)
타계정의 S3 데이터를 복사하는 방법
AWS 타계정의 S3 복사하기
다른 AWS 계정의 Amazon S3 객체 복사