이것이 점프 투 공작소

AWS 계정간 S3 데이터 옮기기 본문

aws

AWS 계정간 S3 데이터 옮기기

겅겅겅 2024. 4. 13. 21:25

다른 AWS 계정에서 사용하는 S3 데이터를 옮겨야하는 상황이 발생했습니다.

약 5개 정도의 S3를 옮기면 되어서, 간단하게 AWS CLI를 통해 데이터를 옮기는게 좋다는 생각이 들었습니다.

 

AWS CLI S3 API를 활용한 데이터 이전 흐름도

오른쪽 : 계정 A (목적지 버킷)

왼쪽 : 계정 B (소스 버킷)

1.  계정 A에서 S3에 대한 정책 생성

계정A에서 목적지 버킷에 대한 GET,PUT,LIST 권한,

소스버킷에 대한 LIST, GET 권한이 존재하는 정책을 생성 후 계정 A의 사용자에게 부여합니다.

 

s3-migration-policy라는 정책을 생성 아래 JSON을 이용해 생성하였습니다.

아래 JSON은 해당 S3 정책에 대한 예시입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetObjectTagging",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplesourcebucket",
                "arn:aws:s3:::awsexamplesourcebucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectTagging",
                "s3:GetObjectTagging",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::awsexampledestinationbucket",
                "arn:aws:s3:::awsexampledestinationbucket/*"
            ]
        }
    ]
}

 

2.  계정A에서 생성한 S3 정책을 계정A의 사용자에게 연결

계정A의 사용자에게 생성한 정책을 추가합니다.

 

3.  계정B의 소스버킷에 정책 설정

계정B의 소스 버킷 정책에 계정A에 대한 S3정책을 추가합니다.

S3 Statement에 있는 Principal, Resource를 계정A, 목적지 버킷에 대한 정보로 수정합니다.

{
	"Version": "2012-10-17",
	"Statement": [
            {
                "Sid": "AllowForS3Access",
                "Effect": "Allow",
                "Principal": {"AWS": "Account A AccountID"},
                "Action": [
                    "s3:ListBucket",
                    "s3:GetObject"
                ],
                "Resource": [
                        "arn:aws:s3:::awsexamplesourcebucket/*",
                        "arn:aws:s3:::awsexamplesourcebucket"
                ]
            }
	]
}

 

4. S3권한 정책이 부여된 계정A의 사용자 계정으로 CLI 사용

계정A의 사용자에 대한 AccessKey를 활용하여 CLI를 설정합니다.

아래의 위치에 AWS CLI 사용을 위한 자격증명 파일이 존재합니다.

  • Windows: C:\Users\username\.aws\credentials
  • Mac/Linux: ~/.aws/credentials

만약 자격증명 파일이 없다면 명령어를 사용하여 추가 가능합니다.

Set-AWSCredential `
                 -AccessKey 사용자AccessKey `
                 -SecretKey 사용자SecretKey
                 -StoreAs 프로파일명지정

 

자격증명이 정상적으로 되어있다면 아래와 같은 명령어로 소스버킷의 모든 폴더와 파일을 목적지 버킷으로 옮길 수 있습니다.

aws s3 sync s3://source-s3-bucket s3://target-s3-bucket