AWS 계정 간 S3 데이터 동기화 (Cross-Account S3 Sync)
AWS에서는 서로 다른 계정(A → B) 간에 S3 데이터를 복사(Sync)하려면 몇 가지 IAM 및 S3 정책 구성이 필요합니다.
이 포스트에서는 A 계정의 S3 버킷에서 B 계정의 S3 버킷으로 데이터를 동기화(sync) 하는 방법을 정리합니다.
DataSync 서비스를 사용하는 방법도 있으나, 아래의 방법이 가장 간단하고 효율적입니다.
✅ 전제 조건
- A 계정: 소스 S3 버킷 보유 (
dev-source-bucket
) - B 계정: 대상 S3 버킷 보유 (
prod-target-bucket
) - 동기화는 B 계정의 EC2 인스턴스에서 AWS CLI로 실행
- EC2 인스턴스는 IAM Role(
crossaccount-sync-role
)을 사용
✅ 1. A 계정 – S3 버킷 정책 설정
A 계정의 S3 버킷(dev-source-bucket
)에 다음 버킷 정책을 추가하여 B 계정 EC2 Role에게 객체 접근을 허용해야 합니다.
A 계정의 S3 버킷 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCrossAccountSyncRole",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<B_ACCOUNT_ID>:role/crossaccount-sync-role"
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::dev-source-bucket",
"arn:aws:s3:::dev-source-bucket/*"
]
}
]
}
🔐 GetObjectTagging
은 AWS CLI s3 sync
시 객체 태그 복사를 시도할 경우 필요합니다.
✅ 2. B 계정 – EC2 IAM Role 정책 구성
B 계정의 EC2 인스턴스에 연결된 IAM Role(crossaccount-sync-role
)에는 다음과 같은 정책이 필요합니다.
B 계정 IAM 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowReadFromSourceBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::dev-source-bucket",
"arn:aws:s3:::dev-source-bucket/*"
]
},
{
"Sid": "AllowWriteToTargetBucket",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::prod-target-bucket",
"arn:aws:s3:::prod-target-bucket/*"
]
}
]
}
✅ 3. EC2 인스턴스에서 동기화 명령 실행
IAM Role이 올바르게 설정되었다면, B 계정의 EC2 인스턴스에서 다음 명령을 실행하여 동기화를 수행할 수 있습니다.
aws s3 sync s3://dev-source-bucket s3://prod-target-bucket \
--source-region ap-northeast-2 \
--region ap-northeast-2
📊 구조도 (텍스트 도식화)
[A 계정: dev-source-bucket]
|
| (s3:GetObject, ListBucket)
v
[B 계정 EC2: IAM Role = crossaccount-sync-role]
|
| (s3:PutObject, ListBucket)
v
[B 계정: prod-target-bucket]
✅ 보안 팁
- A 계정 S3 버킷의 접근 권한은 정확한 Role ARN으로 제한할 것
- 동기화 주체가 EC2 인스턴스일 경우, Access Key 대신 IAM Role을 통해 인증할 것
s3:GetObjectTagging
은 AWS CLI 최신 버전에서 필요할 수 있으니 포함 추천
✅ 참고
aws s3 sync
는 내부적으로ListObjectsV2
,GetObject
,PutObject
등을 호출합니다.- AWS CLI 버전에 따라 권한 요구 사항이 다를 수 있으므로 최신 CLI 사용 권장
'AWS' 카테고리의 다른 글
AWS MSK 고가용성 설정 (0) | 2024.08.16 |
---|---|
AWS Instance 사용자 이미지 생성 및 ENA 문제 (0) | 2020.04.14 |