본문 바로가기

Data Engineering/Cloud

[AWS] S3 다른 계정간 Bucket 개체 복사

aws 공식문서

Source / Target 으로 분리해서 구축

서로 다른 계정을 가진 S3끼리 CLI로 쉽게 개체를 복사하는 방법을 소개하려고 한다.

우선, Target에 있는 계정에서 정책을 생성한다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:<source-s3-arn>",
                "arn:aws:<source-s3-arn>/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:<target-s3-arn>",
                "arn:aws:<target-s3-arn>/*"
            ]
        }
    ]
}

 

위의 정책을 생성하는데, 간략하게 설명하자면, source의 버킷을 조회하고 target의 s3에서 조회, 그리고 source의 개체들을 target에 put한다는 정책을 만드는 것이다. 즉 소스의 파일들을 복사 및 이동할 수 있다는 이야기이다.

위의 정책은 역할에 부여할 수도 있지만 사용자에 붙여서 사용할 수 있다.

 

Target 보안자격증명

 

Target의 보안자격증명에서 액세스키와 시크릿키를 부여받은 후 terminal에서 aws configure --profile tmp-s3-test로 다중 프로필을 등록하여 멀티 프로필로 cli를 관리한다.

그 후, 아래의 Source 버킷에 권한을 허용하는 과정이 필요하다. target의 accout를 허락하고, 소스의 버킷을 조회한다는 등의 권한을 허락한다는 내용이다.

Source S3 버킷 권한

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<target-accout>:user/<user-name>"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetObjectTagging",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:<source-bucket>/*",
                "arn:aws:<source-bucket>"
            ]
        }
    ]
}

CLI profile

cat ~/.aws/credentials

 

위의 명령어로 현재 aws configure에 mapping 되어있는 프로필들을 확인한다.

Target의 보안자격증명을 통해 다운로드 받았던 키들을 입력하기 위해 

aws configure --profile tmp-s3-test

 

액세스, 시크릿키, 리전, format 입력한 다음, 프로필을 아래의 명령어로 설정한다

export AWS_PROFILE=tmp-s3-test
echo $AWS_PROFILE

위의 명령어로 환경변수 확인할 수 있다.

vim ~/.aws/credentials

만약 오타가 있거나 하면 vim으로 열어서 수정하면 된다. (화자는 Mac)


sync로 동기화 하거나 cp로 복사 

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

 

교차 계정에서 잘 복사해왔다는것을 똑같은 시간대로 확인할 수 있다.

 

[AWS 참고링크]

https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/copy-data-from-an-s3-bucket-to-another-account-and-region-by-using-the-aws-cli.html

 

AWS CLI를 사용하여 S3 버킷에서 다른 계정 및 리전으로 데이터 복사 - AWS 권장 가이드

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

반응형