본문 바로가기
AWS

AWS 계정 간 S3 데이터 동기화 (Cross-Account S3 Sync)

by SecuOf 2025. 5. 1.

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