라이브 복제 권한 설정하기

라이브 복제 권한 설정하기 (Setting up permissions for live replication)

Amazon S3에서 라이브 복제를 설정할 때 필요한 권한을 획득해야 해요. 여기에는 복제 규칙을 만들 IAM 보안 주체 권한, Amazon S3가 사용자를 대신해 객체를 복제할 권한, 그리고 교차 계정 시나리오의 경우 대상 버킷 소유자의 권한 부여가 포함돼요.

출처: 문서

본문

Amazon S3에서 라이브 복제를 설정할 때 다음과 같이 필요한 권한을 획득해야 해요.

  • 복제 규칙을 만들 IAM(아이덴티티 및 접근 관리) 보안 주체(사용자 또는 역할)에게 특정 권한 집합을 부여해야 해요.
  • Amazon S3에는 사용자를 대신해 객체를 복제할 권한이 필요해요. IAM 역할을 만들고 복제 구성에서 해당 역할을 지정해 이러한 권한을 부여해요.
  • 원본 및 대상 버킷이 같은 계정이 소유하지 않으면 대상 버킷의 소유자도 원본 버킷 소유자에게 복제본을 저장할 권한을 부여해야 해요.

참고 라이브 복제를 설정하는 대신 S3 Batch Operations로 요청 시 객체를 복제한다면 S3 Batch Replication에는 다른 IAM 역할과 정책이 필요해요. Batch Replication IAM 역할 및 정책 예제는 S3 Batch Replication용 IAM 역할 구성을 참고하세요.

관련 주제

1단계: 복제 규칙을 만들 IAM 보안 주체에 권한 부여

복제 규칙을 만드는 데 사용할 IAM 사용자 또는 역할에는 단방향 또는 양방향 복제에 대한 복제 규칙을 만들 권한이 필요해요. 사용자 또는 역할에 이러한 권한이 없으면 복제 규칙을 만들 수 없어요. 자세한 내용은 IAM 사용자 안내서의 IAM 아이덴티티를 참고하세요.

사용자 또는 역할에는 다음 작업이 필요해요.

  • iam:AttachRolePolicy
  • iam:CreatePolicy
  • iam:CreateServiceLinkedRole
  • iam:PassRole
  • iam:PutRolePolicy
  • s3:GetBucketVersioning
  • s3:GetObjectVersionAcl
  • s3:GetObjectVersionForReplication
  • s3:GetReplicationConfiguration
  • s3:PutReplicationConfiguration

다음은 이러한 작업이 포함된 샘플 IAM 정책이에요.

  • JSON:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
          "s3:GetAccessPoint",
          "s3:GetAccountPublicAccessBlock",
          "s3:GetBucketAcl",
          "s3:GetBucketLocation",
          "s3:GetBucketPolicyStatus",
          "s3:GetBucketPublicAccessBlock",
          "s3:ListAccessPoints",
          "s3:ListAllMyBuckets",
          "s3:PutReplicationConfiguration",
          "s3:GetReplicationConfiguration",
          "s3:GetBucketVersioning",
          "s3:GetObjectVersionForReplication",
          "s3:GetObjectVersionAcl",
          "s3:GetObject",
          "s3:ListBucket",
          "s3:GetObjectVersion",
          "s3:GetBucketOwnershipControls",
          "s3:PutBucketOwnershipControls",
          "s3:GetObjectLegalHold",
          "s3:GetObjectRetention",
          "s3:GetBucketObjectLockConfiguration"
      ],
      "Resource": [
          "arn:aws:s3:::amzn-s3-demo-bucket1-*",
          "arn:aws:s3:::amzn-s3-demo-bucket2-*/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
          "s3:List*AccessPoint*",
          "s3:GetMultiRegion*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
          "iam:Get*",
          "iam:CreateServiceLinkedRole",
          "iam:CreateRole",
          "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::*:role/service-role/s3*"
    },
    {
      "Effect": "Allow",
      "Action": [
          "iam:List*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
          "iam:AttachRolePolicy",
          "iam:PutRolePolicy",
          "iam:CreatePolicy"
      ],
      "Resource": [
          "arn:aws:iam::*:policy/service-role/s3*",
          "arn:aws:iam::*:role/service-role/s3*"
      ]
    }
  ]
}

2단계: Amazon S3가 가정할 IAM 역할 만들기

기본적으로 모든 Amazon S3 리소스(버킷, 객체 및 관련 하위 리소스)는 프라이빗이며 리소스 소유자만 리소스에 접근할 수 있어요. Amazon S3에는 원본 버킷에서 객체를 읽고 복제할 권한이 필요해요. IAM 역할을 만들고 복제 구성에서 해당 역할을 지정해 이러한 권한을 부여해요.

이 섹션은 이 IAM 역할에 연결되는 신뢰 정책과 최소 필요 권한 정책을 설명해요. 예제 연습은 IAM 역할을 만드는 단계별 지침을 제공해요. 자세한 내용은 라이브 복제 구성 예제를 참고하세요.

참고 콘솔을 사용해 복제 구성을 만든다면 이 섹션을 건너뛰고 대신 콘솔이 이 IAM 역할과 필요한 신뢰 및 권한 정책을 만들어 주도록 하는 것이 좋아요.

신뢰 정책은 어떤 보안 주체 아이덴티티가 IAM 역할을 가정할 수 있는지 식별해요. 권한 정책은 IAM 역할이 어떤 리소스에서 어떤 조건으로 어떤 작업을 수행할 수 있는지 지정해요.

  • 다음 예제는 Amazon S3를 역할을 가정할 수 있는 AWS 서비스 보안 주체로 식별하는 신뢰 정책을 보여줘요.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": { "Service": "s3.amazonaws.com" },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
  • 다음 예제는 Amazon S3와 S3 Batch Operations를 역할을 가정할 수 있는 서비스 보안 주체로 식별하는 신뢰 정책을 보여줘요. Batch Replication 작업을 만드는 경우 이 접근 방식을 사용해요. 자세한 내용은 새 복제 규칙 또는 대상에 대한 Batch Replication 작업 만들기를 참고하세요.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": { "Service": [
              "s3.amazonaws.com",
              "batchoperations.s3.amazonaws.com"
          ] },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

    IAM 역할에 대한 자세한 내용은 IAM 사용자 안내서의 IAM 역할을 참고하세요.

  • 다음 예제는 IAM 역할에 사용자를 대신해 복제 작업을 수행할 권한을 부여하는 권한 정책을 보여줘요. Amazon S3가 역할을 가정하면 이 정책에서 지정한 권한을 가져요. 이 정책에서 amzn-s3-demo-source-bucket은 원본 버킷이고 amzn-s3-demo-destination-bucket은 대상 버킷이에요.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetReplicationConfiguration",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::amzn-s3-demo-source-bucket"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObjectVersionForReplication",
            "s3:GetObjectVersionAcl",
            "s3:GetObjectVersionTagging"
          ],
          "Resource": [
            "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:ReplicateObject",
            "s3:ReplicateDelete",
            "s3:ReplicateTags"
          ],
          "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
        }
      ]
    }
    

    이 권한 정책은 다음 작업에 대한 권한을 부여해요.

    • s3:GetReplicationConfiguration 및 s3:ListBucket – amzn-s3-demo-source-bucket 버킷에 대한 이러한 작업 권한은 Amazon S3가 복제 구성을 검색하고 버킷 콘텐츠를 나열할 수 있게 해요. (현재 권한 모델은 삭제 마커에 접근하기 위해 s3:ListBucket 권한이 필요해요.)
    • s3:GetObjectVersionForReplication 및 s3:GetObjectVersionAcl – 모든 객체에 부여된 이러한 작업 권한은 Amazon S3가 특정 객체 버전과 객체와 관련된 ACL(액세스 제어 목록)을 가져올 수 있게 해요.
    • s3:ReplicateObject 및 s3:ReplicateDelete – amzn-s3-demo-destination-bucket 버킷의 모든 객체에 대한 이러한 작업 권한은 Amazon S3가 대상 버킷으로 객체 또는 삭제 마커를 복제할 수 있게 해요. 삭제 마커에 대한 정보는 삭제 작업이 복제에 미치는 영향을 참고하세요.

      참고 amzn-s3-demo-destination-bucket 버킷의 s3:ReplicateObject 작업 권한은 객체 태그와 ACL 같은 메타데이터의 복제도 허용해요. 따라서 s3:ReplicateTags 작업에 대한 권한을 명시적으로 부여할 필요가 없어요.

    • s3:GetObjectVersionTagging – amzn-s3-demo-source-bucket 버킷의 객체에 대한 이 작업 권한은 Amazon S3가 복제를 위해 객체 태그를 읽을 수 있게 해요. 객체 태그에 대한 자세한 내용은 객체 태깅을 참고하세요. Amazon S3에 s3:GetObjectVersionTagging 권한이 없으면 객체는 복제하지만 객체 태그는 복제하지 않아요.
    • s3:GetObjectVersionAnnotationForReplication – 원본 버킷의 객체에 대한 이 작업 권한은 Amazon S3가 복제를 위해 주석을 읽을 수 있게 해요. Amazon S3에 이 권한이 없으면 주석 복제가 실패해요. 주석에 대한 자세한 내용은 객체에 주석 달기를 참고하세요.

    Amazon S3 작업 목록은 Service Authorization Reference의 Amazon S3에 대한 작업, 리소스 및 조건 키를 참고하세요. S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한을 참고하세요.

    중요 IAM 역할을 소유한 AWS 계정에는 역할에 부여하는 작업에 대한 권한이 있어야 해요. 예를 들어 원본 버킷에 다른 AWS 계정이 소유한 객체가 포함되어 있다고 가정해요. 객체 소유자는 객체의 ACL(액세스 제어 목록)을 통해 IAM 역할을 소유한 AWS 계정에 필요한 권한을 명시적으로 부여해야 해요. 그렇지 않으면 Amazon S3가 객체에 접근할 수 없고 객체 복제가 실패해요. ACL 권한에 대한 정보는 ACL(액세스 제어 목록) 개요를 참고하세요.

    여기에 설명된 권한은 최소 복제 구성과 관련되어 있어요. 선택적 복제 구성을 추가하기로 선택하면 Amazon S3에 추가 권한을 부여해야 해요.

    • 암호화된 객체를 복제하려면 필요한 AWS Key Management Service(AWS KMS) 키 권한도 부여해야 해요. 자세한 내용은 암호화된 객체 복제하기(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)를 참고하세요.
    • 복제와 함께 Object Lock을 사용하려면 복제 설정에 사용하는 IAM 역할에서 원본 S3 버킷에 2개의 추가 권한을 부여해야 해요. 2개의 추가 권한은 s3:GetObjectRetention 및 s3:GetObjectLegalHold이에요. 역할에 s3:Get* 권한 구문이 있으면 해당 구문이 요구 사항을 충족해요. 자세한 내용은 S3 Replication과 함께 Object Lock 사용을 참고하세요.

(선택 사항) 3단계: 원본 및 대상 버킷이 다른 AWS 계정이 소유할 때 권한 부여

원본 및 대상 버킷이 같은 계정이 소유하지 않으면 대상 버킷의 소유자는 다음 예제와 같이 원본 버킷 소유자에게 복제 작업을 수행할 권한을 부여하는 버킷 정책도 추가해야 해요. 이 예제 정책에서 amzn-s3-demo-destination-bucket은 대상 버킷이에요.

Amazon S3 콘솔을 사용해 이 버킷 정책을 자동으로 생성할 수도 있어요. 자세한 내용은 원본 버킷에서 복제된 객체 수신 활성화를 참고하세요.

참고 역할의 ARN 형식은 다르게 나타날 수 있어요. 콘솔로 역할을 만들었다면 ARN 형식은 arn:aws:iam::account-ID:role/service-role/role-name이에요. AWS CLI로 역할을 만들었다면 ARN 형식은 arn:aws:iam::account-ID:role/role-name이에요. 자세한 내용은 IAM 사용자 안내서의 IAM 역할을 참고하세요.

  • JSON:
{
  "Version": "2012-10-17",
  "Id": "PolicyForDestinationBucket",
  "Statement": [
    {
      "Sid": "Permissions on objects",
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111122223333:role/service-role/source-account-IAM-role" },
      "Action": [
          "s3:ReplicateDelete",
          "s3:ReplicateObject"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
    },
    {
      "Sid": "Permissions on bucket",
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111122223333:role/service-role/source-account-IAM-role" },
      "Action": [
          "s3:List*",
          "s3:GetBucketVersioning",
          "s3:PutBucketVersioning"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket"
    }
  ]
}

예제는 다른 계정의 버킷에 대한 복제 구성을 참고하세요.

원본 버킷의 객체에 태그가 있는 경우 다음 사항을 확인하세요.

  • 원본 버킷 소유자가 IAM 역할을 통해 객체 태그를 복제할 s3:GetObjectVersionTagging 및 s3:ReplicateTags 작업 권한을 Amazon S3에 부여하면 Amazon S3는 객체와 함께 태그를 복제해요. IAM 역할에 대한 정보는 2단계: Amazon S3가 가정할 IAM 역할 만들기를 참고하세요.
  • 대상 버킷의 소유자가 태그를 복제하지 않으려면 다음 구문을 대상 버킷 정책에 추가해 s3:ReplicateTags 작업에 대한 권한을 명시적으로 거부할 수 있어요. 이 정책에서 amzn-s3-demo-destination-bucket은 대상 버킷이에요.
    ...
       "Statement":[
        {
          "Effect":"Deny",
          "Principal": { "AWS":"arn:aws:iam::source-bucket-account-id:role/service-role/source-account-IAM-role" },
          "Action":"s3:ReplicateTags",
          "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
        }
       ]
    ...
    
  • 마찬가지로 원본 버킷 소유자가 IAM 역할을 통해 주석을 복제할 s3:GetObjectVersionAnnotationForReplication 작업 권한을 Amazon S3에 부여하면 Amazon S3는 객체와 함께 주석을 복제해요. IAM 역할에 대한 정보는 2단계: Amazon S3가 가정할 IAM 역할 만들기를 참고하세요. 대상 버킷의 소유자가 주석을 복제하지 않으려면 다음 구문을 대상 버킷 정책에 추가해 s3:ReplicateObjectAnnotation 작업에 대한 권한을 명시적으로 거부할 수 있어요. 이 정책에서 amzn-s3-demo-destination-bucket은 대상 버킷이에요.
    ...
       "Statement":[
        {
          "Effect":"Deny",
          "Principal": { "AWS":"arn:aws:iam::source-bucket-account-id:role/service-role/source-account-IAM-role" },
          "Action":"s3:ReplicateObjectAnnotation",
          "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
        }
       ]
    ...
    

참고

  • 암호화된 객체를 복제하려면 필요한 AWS Key Management Service(AWS KMS) 키 권한도 부여해야 해요. 자세한 내용은 암호화된 객체 복제하기(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)를 참고하세요.
  • 복제와 함께 Object Lock을 사용하려면 복제 설정에 사용하는 IAM 역할에서 원본 S3 버킷에 2개의 추가 권한을 부여해야 해요. 2개의 추가 권한은 s3:GetObjectRetention 및 s3:GetObjectLegalHold이에요. 역할에 s3:Get* 권한 구문이 있으면 해당 구문이 요구 사항을 충족해요. 자세한 내용은 S3 Replication과 함께 Object Lock 사용을 참고하세요.

원본 버킷에서 복제된 객체 수신 활성화

대상 버킷에 앞선 정책을 수동으로 추가하는 대신 Amazon S3 콘솔을 통해 원본 버킷에서 복제된 객체 수신을 활성화하는 데 필요한 정책을 빠르게 생성할 수 있어요.

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  2. 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택해요.
  3. 버킷(Buckets) 목록에서 대상 버킷으로 사용할 버킷을 선택해요.
  4. 관리(Management) 탭을 선택하고 **복제 규칙(Replication rules)**까지 스크롤해요.
  5. **작업(Actions)**에서 **복제된 객체 수신(Receive replicated objects)**을 선택해요. 프롬프트를 따라 원본 버킷 계정의 AWS 계정 ID를 입력한 다음 **정책 생성(Generate policies)**을 선택해요. 콘솔이 Amazon S3 버킷 정책과 KMS 키 정책을 생성해요.
  6. 이 정책을 기존 버킷 정책에 추가하려면 **설정 적용(Apply settings)**을 선택하거나 **복사(Copy)**를 선택해 변경 사항을 수동으로 복사해요.
  7. (선택 사항) AWS Key Management Service 콘솔에서 원하는 KMS 키 정책에 AWS KMS 정책을 복사해요.

(선택 사항) 4단계: 복제본 소유권 변경 권한 부여

다른 AWS 계정이 원본 및 대상 버킷을 소유할 때 Amazon S3에 복제본의 소유권을 대상 버킷을 소유한 AWS 계정으로 변경하도록 지시할 수 있어요. 복제본 소유권을 재정의하려면 추가 권한을 부여하거나 대상 버킷의 S3 Object Ownership 설정을 조정해야 해요. 소유자 재정의에 대한 자세한 내용은 복제본 소유자 변경을 참고하세요.

더 알아보기 (Learn more)