Developing

AWS 다른 계정으로 S3 Data Migration 하는 방법 본문

Tips(Reference)/aws

AWS 다른 계정으로 S3 Data Migration 하는 방법

DEV_BLOG 2023. 8. 9. 22:33

S3 데이터를 AWS 다른계정으로 이관해야 할 일이 생겨서 관련 포스팅을 진행하고자 한다.

A -> B 계정으로 S3 이관을 진행한다고 가정할 때, 이루어지는 과정은 다음과 같다.

 

1.  A계정 S3 Bucket Policy 변경

 

1-1) 기존에 Bucket Policy가 이미 설정되있는 경우

 

Bucket Policy에 cloudfront같은 설정이 포함되어있을 수 있다.

기존에 작성된 내용에서 "Statement"의 마지막 부분에 다음의 내용을 추가해준다.

여기서의 {B계정에 IAM 권한 설정한 사용자이름}에 관한 부분은 2~3번 내용을 먼저 참고한 뒤에 작성하면 된다!

{
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{B계정의 계정ID 띄어쓰기 없이 12자}:user/{B계정에 IAM 권한 설정한 사용자이름}"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::{A계정의 Bucket이름}/*",
                "arn:aws:s3:::{A계정의 Bucket이름}"
            ]
}

 

1-2) 기존에 Bucket Policy가 설정되지 않은 경우

 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DelegateS3Access",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{B계정의 계정ID 띄어쓰기 없이 12자}:user/{B계정에 IAM 권한 설정한 사용자이름}"
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::{A계정의 Bucket이름}/*",
        "arn:aws:s3:::{A계정의 Bucket이름}"
      ]
    }
  ]
}

 

1-3) 공식문서 예제 참고용

 

{
  "Version": "2012-10-17",
  "Id": "Policy1611277539797",
  "Statement": \[
    {
      "Sid": "Stmt1611277535086",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "Stmt1611277877767",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
    }
  \]
}

 

 

 

2.  B계정의 IAM 권한 설정

 

 

IAM > 정책 > 정책 생성 > JSON 항목으로 이동하여 다음의 내용을 입력한다.

 

 

 

2-1. 검색하여 작성한 예시

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::{A계정의 Bucket이름}",
                "arn:aws:s3:::{A계정의 Bucket이름}/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:ListBucket",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::{B계정의 복사시킬 Bucket이름}",
                "arn:aws:s3:::{B계정의 복사시킬 Bucket이름}/*"
            ]
        }
    ]
}

 

2-2.AWS 공식문서 예시

 

{
  "Version": "2012-10-17",
  "Statement": \[
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:GetObject"
      \],
      "Resource": \[
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/\*"
      \]
    },
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:PutObject",
        "s3:PutObjectAcl"
      \],
      "Resource": \[
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*"
      \]
    }
  \]
}

 

 

3. B계정의 사용자 설정 및 권한 설정

직접 정책 연결 선택 뒤 2번에서 생성한 권한을 연결해준다. 4번에서 곧 얘기할 AWS-CLI가 잘 접속됬는지 확인하고 싶다면 "AmazonS3FullAccess" 권한도 넣어주자.

 

4.  3번에서 생성해준 B계정의 사용자로 AWS-CLI 접속

 

aws configure

AWS ACCESS KEY ID : {파일로 내려받은 ACCESS KEY ID입력하기}
AWS Secret Access Key : {파일로 내려받은 SECRET ACCESS KEY 입력하기}
Default region name : ap-northeast-2

 

 

만약 amazons3FullAccess 권한이 부여된 상태라면 다음 명령어를 통해 B계정의 사용자로 잘 aws-cli 접속하였는지 확인하자.

aws s3 ls

 

B계정의 Bucket 이름이 출력되면 성공적이다.

 

 

5. Migration 명령 수행

aws s3 sync s3://{A계정 복사하려는 Bucket이름}/{기타 자신이 원하는 경로} s3://{B계정 복사시킬 Bucket이름}/{기타 자신이 원하는 경로}

 

 

 

Reference

https://interconnection.tistory.com/119

https://velog.io/@unihit/계정간-S3-데이터-이전-방법

https://repost.aws/ko/knowledge-center/copy-s3-objects-account