AWS/S3

AWS 타계정의 S3 복사하기

TTwY 2020. 1. 20. 16:14
728x90
반응형

지난번 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 복사가 마무리 됩니다.

 

 

728x90
반응형