계정간 S3 데이터 이전 방법

unihit·2022년 12월 20일
0

AWS

목록 보기
2/2

안녕하세요.

이번 글에서는 계정간에 S3 데이터를 복사하는 방법에 대해서 알아보도록 하겠습니다.
우선 이해하기 쉽도록 계정 A를 복사할 파일의 출발지, 계정 B를 복사된 파일의 목적지라고 설정해두겠습니다.

S3 데이터 이전 워크로드

  • 계정 A: 복사할 파일의 출발지 (Source)
  • 계정 B: 복사된 파일의 목적지 (Target)

우선 계정 B에서 S3 Bucket의 권한을 갖는 IAM을 생성해 해당 키 값을 이용하고, 복사할 객체를 가지고 있는 계정 A의 Bucket Policy를 수정한 후 계정 B에서 생성한 IAM의 키 값을 이용해 AWS CLI를 통해 S3 Bucket을 통째로 복사해 B 계정의 S3 Bucket으로 이전할 수 있습니다.

이 방법은 S3의 모든 객체를 가져오는 것 뿐만 아니라 폴더의 구조까지 복사해 올 수 있기 때문에 기존 계정의 Bucket의 폴더 구조가 복잡하게 되어 있더라도 그대로 옮겨 올 수 있다는 장점이 있습니다.

IAM 정책 생성

먼저 계정 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를 쓰기 위한 키 값을 알아야 합니다.

Bucket 정책 설정

계정 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"
      ]
    }
  ]
}

AWS CLI를 사용한 Sync 진행

그림에 나온 대로 구성 및 권한 설정을 끝낸 후 CLI에 접속하여 복사를 수행하는 과정을 진행합니다.
계정 B의 IAM 키 값을 등록하여 복사할 Source-Bucket을 AWS CLI를 이용하여 조회 합니다.

  • 여러 계정으로 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에서 권한 > 액세스 제어 목록에 가보면 버킷 소유자의 액세스 권한이라는 것이 보입니다.
그 곳에 아래 이미지와 같이 권한이 부여되어 있어야 올바르게 복사 된 것으로, 복사한 객체들을 컨트롤 할 수 있습니다. (삭제, 이름 변경 등)


Ref

타계정의 S3 데이터를 복사하는 방법
AWS 타계정의 S3 복사하기
다른 AWS 계정의 Amazon S3 객체 복사

0개의 댓글