S3 Replication 을 통한 객체 복사 작업

신동수·2024년 2월 24일
0

AWS

목록 보기
9/26

개요

  • A 버킷의 업데이트되는 객체를 B 버킷에 동일하게 복사를 하기위한 작업이 필요하여 본 포스팅을 작성 하였다.

S3


테스트를 위해 하나의 계정에서 진행하며, 테스트를 위해 pdf 파일을 origin 버킷에 업로드한 상태이다.

dobby-origin-bucket 에는 위와 같이 객체를 업로드한 상태이다.

IAM


IAM > 역할 > 역할 생성

# S3-Replication-role 에 있는 정책
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<원본 Bucket>"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectVersionForReplication",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::<원본 Bucket>/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateDelete",
                "s3:ReplicateTags"
            ],
            "Resource": "arn:aws:s3:::<대상 Bucket>/*"
        }
    ]
}

복사를 위한 정책은 위와 같이 설정을 하였다.
S3 객체 복제를 위한 권한 부여

S3 Replication


Amazon S3 > 버킷 > 지정한 버킷(dobby-origin-bucket) > 관리 > 복제 규칙 > 복제 규칙 생성


/tmp 라는 폴더 안에 객체들이 존재하기에 접두사는 객체를 복사할 경로를 선택하였다.
만약 버킷의 모든 객체를 복사하고 싶다면 버킷의 모든 객체에 적용을 선택한다. (객체 버전 관리 활성화 필요)


대상에는 현재의 계정 또는 다른 계정의 버킷을 지정할 수 있으며, 작성자의 경우 동일한 계정의 버킷을 선택하였다.

그리고 복제를 하려고 한다면 버전 관리를 활성화해야 한다는 경고가 나오기에 활성화도 같이 진행한다.

만약 다른 계정의 버킷을 지정한다면 다른 계정의 버킷의 정책에 접근할 수 있도록 S3 정책에 아래와 같은 정책을 추가해줘야한다.

# 복제를 위한 다른 계정의 S3 버킷 정책
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SetPermissionForObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<소스 Account>:role/service-role/<소스Role>"
            },
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateDelete"
            ],
            "Resource": [
                "arn:aws:s3:::<대상 Bucket>/*",
                "arn:aws:s3:::<대상 Bucket>"
            ]
        },
        {
            "Sid": "SetPermissionsOnBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<소스 Account>:role/service-role/<소스 Role>"
            },
            "Action": [
                "s3:List*",
                "s3:GetBucketVersioning",
                "s3:PutBucketVersioning"
            ],
            "Resource": [
                "arn:aws:s3:::<대상 Bucket>/*",
                "arn:aws:s3:::<대상 Bucket>"
            ]
        }
    ]
}

다른 계정의 S3 복제를 위한 권한 부여


IAM 역할에는 복사를 위한 Role 을 선택한다.


암호화나 추가 옵션은 따로 진행하지 않겠다.
만약 KMS 를 통한 암호화가 필요하다면 추가 권한이 필요하며 아래 링크를 참고하면 좋을거 같다.
S3 KMS를 사용한 Replication

결과


관리 탭에서 복제 규칙이 생성된 것을 확인할 수 있다.
간단히 정리하자만 dobby-origin-bucket/tmp 라는 폴더안에 객체가 추가가 된다면 대상 버킷으로 올라온 객체를 복사하는 것이다.


소스 버킷에 default.conf 라는 파일을 업로드 하였다.


대상 버킷에 /tmp 라는 폴더가 생겼으며, 동일하게 default.conf 파일이 복사된 것을 확인할 수 있었다.
==하지만 default.conf 를 제외한 다른 객체는 복사가 되지 않았다.==
이는 S3 Batch 를 통해 기존 객체를 복사해야 하며, 다음 포스팅에 작성 하도록 하겠다.

+추가로 해당 작업은 파일을 복사하는 작업으로 각 각의 객체로 되어 있어 복사된 객체를 삭제하여도 다른쪽의 파일은 버킷에 저장이 되어 있다.

profile
조금씩 성장하는 DevOps 엔지니어가 되겠습니다. 😄

0개의 댓글