지난번 AMI를 타계정에 공유 및 복사하는 방법에 대하여 이야기 했는데요.
요즘은 계정을 분리해서 구축을 하는 경우도 꽤 있다고 합니다. 이런 저런 이유로 타계정의 S3를 복사하는 경우가 발생하는데요.
이번에는 타계정에서 S3를 복사하는 방법에 대해서 알아보겠습니다.
S3 복사하기를 구글링 해보면 여러가지 방법들이 많이 나오는데요. 저의 경험으로는 이 방법이 효율적이고 정확하다고 생각합니다.
복사할 Bucket을 Source-Bucket, 복사한 내용을 담을 Bucket을 Target-Bucket 으로 명명하고 진행을 하겠습니다.
결론부터 말씀드리자면 복사를 할 대상인 Target-Bucket S3에서 S3 Bucket권한을 갖은 IAM 객체를 만들어 해당 키값을 이용하고 복사할 객체를 가지고 있는 Source-Bucket의 Bucket Policy를 수정한 후 IAM 객체의 키 값을 이용하여 AWS CLI를 통해 S3 복사하기를 합니다.
# 테스트 구성 그림
계정 B에 IAM에서 정책(Policy)를 생성합니다.
{
"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의 버킷 이름을 적어줍니다.
정책 검토 > 정책 생성을 클릭하여 정책(Policy)을 생성합니다.
생성된 정책을 사용자(User)의 권한에 추가를 합니다. 추가 이유는 CLI를 이용하여 S3에 접근을 해야 하기 때문에, 기존 사용하던 사용자(User)가 있을 시 기존 사용자에게 추가, 사용 하던 사용자(User)가 없다면 새로 생성하여 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를 이용하여 조회 합니다.
여기서는 AWS CLI 설치방법은 다루지 않고 구글에서 검색을 하면 OS 별로 설치 방법에 대하여 AWS DOC에서 자세하게 설명이 나와있습니다.
* 여러 계정으로 CLI를 접속해야 한다면 --profile 이라는 기능을 사용하면 좋습니다.
$ aws s3 ls s3://Bucket-Source
ex) $ aws s3 ls s3://s3-bucket-copy-test
현재 Target-Bucket에는 아무 객체도 존재하지 않습니다.
복사 작업을 진행합니다.
$ aws s3 sync s3://Bucket-Source s3://Bucket-Target
$ aws s3 sync s3://s3-bucket-copy-test s3://s3-bucket-copy-target
복사가 성공적으로 되었습니다.
여기서 확인해야 할 사항이 있습니다.
복사가 된 Target-Bucket에서 권한 > 액세스 제어 목록에 가보면 버킷 소유자의 액세스 권한이라는 것이 보일 겁니다. 그 곳에 아래 이미지와 같이 권한이 부여 되어 있어야 올바르게 복사 된 것으로, 복사한 객체들을 컨트롤 할 수 있습니다.(삭제, 이름 변경 등)
액세스 권한까지 맞게 적용이 되어야 타계정간 S3 복사가 마무리 됩니다.
'AWS > S3' 카테고리의 다른 글
AWS S3를 이용한 정적 웹 사이트 호스팅 방법 - 3. CloudFront(CDN) / HTTPS (1) | 2021.04.19 |
---|---|
AWS S3를 이용한 정적 웹 사이트 호스팅 방법 - 2. Route 53 연동(DNS) (5) | 2021.04.16 |
AWS S3를 이용한 정적 웹 사이트 호스팅 방법 - 1. S3 앤드포인트 (6) | 2021.04.13 |