버킷 간에 복제를 설정해도 Amazon S3 객체가 복제되지 않는 이유는 무엇입니까?
Amazon Simple Storage Service(S3) 버킷 간에 크로스 리전 복제(CRR) 또는 동일 리전 복제(SRR)를 설정했습니다. 그런데 객체가 대상 버킷에 복제되지 않습니다.
해결 방법
대상 버킷에 S3 객체가 복제되지 않는 문제를 해결하려면 버킷의 여러 권한 유형을 확인하십시오. 또한 퍼블릭 액세스 설정과 버킷 소유권 설정도 확인하십시오.
팁:
- 각 구성 변경 후 객체를 소스 버킷에 업로드하여 복제를 테스트하십시오. 복제 설정 문제를 파악하려면 한 번에 하나의 구성을 변경하는 것이 좋습니다.
- 복제 실패에 대한 s3:Replication:OperationFailedReplication 이벤트 유형 알림을 활성화하십시오. 오류 코드는 실패 원인을 파악하는 데 도움이 될 수 있습니다.
복제 실패 원인을 해결한 후에도 소스 버킷에 복제되지 않은 객체가 있을 수 있습니다. 기본적으로 S3 복제에서는 기존 객체나 복제 상태가 FAILED 또는 REPLICA인 객체를 복제하지 않습니다. 객체의 복제 상태를 확인하려면 한 Amazon S3 버킷에서 다른 버킷으로 복제에 실패한 객체를 보려면 어떻게 해야 합니까?를 참조하십시오. 해당 객체를 복제하려면 S3 배치 복제를 사용하십시오.
최소 Amazon S3 권한 부여
복제 규칙에 사용된 AWS Identity and Access Management(IAM) 역할에 올바른 권한이 있는지 확인합니다. 소스 버킷과 대상 버킷이 서로 다른 AWS 계정에 있는 경우 대상 계정의 버킷 정책에서 복제 역할에 충분한 권한을 부여하는지 확인합니다.
다음 예제 IAM 정책에는 복제에 필요한 최소 권한이 있습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::SourceBucket" ] }, { "Effect": "Allow", "Action": [ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::SourceBucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ReplicateObject", "s3:ReplicateTags" ], "Resource": "arn:aws:s3:::DestinationBucket/*" } ] }
참고: SourceBucket 및 DestinationBucket을 S3 버킷 이름으로 바꾸십시오.
복제 규칙 옵션에 따라 추가 권한을 부여해야 할 수 있습니다.
IAM 역할에는 Amazon S3가 객체를 복제하는 역할을 맡을 수 있도록 허용하는 신뢰 정책이 있어야 합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
추가 Amazon S3 권한 부여
복제 규칙을 대상 버킷 소유자로 객체 소유권 변경으로 설정하는 경우, IAM 역할에 s3:ObjectOwnerOverrideToBucketOwner 권한이 있어야 합니다. S3 객체 리소스에 권한을 부여합니다.
{ "Effect": "Allow", "Action": [ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource": "arn:aws:s3:::DestinationBucket/*" }
또한 대상 계정은 버킷 정책에 s3:ObjectOwnerOverrideToBucketOwner 권한을 부여해야 합니다.
{ "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action": [ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource": "arn:aws:s3:::DestinationBucket/*" }
참고: 대상 버킷의 객체 소유권이 버킷 소유자 적용인 경우 복제 규칙에서 대상 버킷 소유자로 객체 소유권 변경은 필요하지 않습니다. 이 변경은 기본적으로 적용됩니다.
복제 규칙에서 삭제 마커 복제를 활성화한 경우 IAM 역할에 s3:ReplicateDelete 권한이 있어야 합니다.
{ "Effect": "Allow", "Action": [ "s3:ReplicateDelete" ], "Resource": "arn:aws:s3:::DestinationBucket/*" }
대상 버킷이 다른 계정에 있는 경우 대상 버킷 소유자도 버킷 정책에서 해당 권한을 부여해야 합니다.
{ "Version": "2012-10-17", "Id": "PolicyForDestinationBucket", "Statement": [ { "Sid": "Stmt1644945277847", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateTags", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateDelete" ], "Resource": "arn:aws:s3:::DestinationBucket/*" } ] }
참고: arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role을 복제 역할의 ARN으로 바꾸십시오. DestinationBucket은 S3 버킷 이름으로 바꾸십시오.
AWS KMS 권한 부여
버킷의 소스 객체가 AWS Key Management Service(AWS KMS) 키로 암호화된 경우, 복제 규칙에는 AWS KMS로 암호화된 객체가 포함되어야 합니다.
다음 단계를 완료하십시오.
- Amazon S3 콘솔을 엽니다.
- 소스 객체가 포함된 S3 버킷을 선택합니다.
- 관리 탭에서 복제 규칙을 선택합니다.
- 편집을 선택합니다.
- 암호화에서 AWS KMS로 암호화된 객체 복제를 선택합니다.
- 대상 객체 암호화를 위한 AWS KMS 키에서 AWS KMS 키를 선택합니다. 기본 옵션은 AWS KMS 키(aws/S3)를 사용하는 것입니다.
자세한 내용은 정책 예시 - 복제와 함께 SSE-S3 및 SSE-KMS 사용을 참조하십시오.
중요: 대상 버킷이 다른 계정에 있는 경우, 대상 계정이 소유한 AWS KMS 고객 관리형 키를 지정하십시오. 기본 aws/S3 키는 소스 계정이 소유한 AWS 관리형 키를 사용하여 객체를 암호화합니다. AWS 관리형 키를 다른 계정과 공유할 수 없기 때문에 대상 계정은 대상 버킷의 객체에 액세스할 수 없습니다.
교차 계정 시나리오를 위한 추가 AWS KMS 권한 부여
대상 계정의 AWS KMS 키를 사용하여 대상 객체를 암호화하려면 대상 계정에 키 정책에서 복제 역할을 부여해야 합니다.
{ "Sid": "AllowS3ReplicationSourceRoleToUseTheKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": "*" }
참고: AWS KMS 키 정책에서 Resource에 별표(*)를 사용하는 경우, 정책은 복제 역할에만 권한을 부여합니다. 정책에서는 복제 역할의 권한을 확장하도록 허용하지 않습니다.
또한 소스 계정에서 복제 역할의 IAM 정책에 다음과 같은 최소 권한을 추가해야 합니다.
[ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "SourceKmsKeyArn" ] }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": [ "DestinationKmsKeyArn" ] } ]
기본적으로 AWS KMS 키 정책은 루트 사용자에게 키에 대한 전체 권한을 부여합니다. 이러한 권한을 같은 계정의 다른 사용자에게 위임할 수 있습니다. 또한 IAM 정책을 사용하여 소스 KMS 키에 복제 역할 권한을 부여할 수도 있습니다. 소스 KMS 키 정책에 거부 문이 없는 한 이 방법으로 충분합니다.
명시적 거부 및 조건부 허용 문 확인
권한을 검증한 후에도 객체가 여전히 복제되지 않는 경우 복제 실패의 원인이 될 수 있는 명시적 거부 문이 있는지 확인하십시오.
대상 버킷 정책 또는 AWS KMS 키 정책에서 다음에 대한 액세스를 제한하는 거부 문을 제거합니다.
- 특정 CIDR 범위
- 가상 프라이빗 클라우드(VPC) 엔드포인트
- S3 액세스 포인트
IAM 역할에 연결된 거부 문 또는 권한 경계를 제거합니다. 또한 소스 또는 대상 계정에 연결된 AWS Organizations 서비스 제어 정책(SCP)의 거부 문을 제거합니다.
팁: 명시적 거부 문을 제거하기 전에 거부 이유를 확인하십시오. 또한 해당 명령문이 데이터 보안에 영향을 미치는지 여부도 확인하십시오.
Amazon S3 버킷 키 확인
소스 또는 대상 KMS 키가 암호화 컨텍스트에 따라 권한을 부여하는 경우 S3 버킷 키가 사용되는지 확인합니다. 버킷에서 버킷 키를 사용하는 경우 암호화 컨텍스트는 버킷 수준 리소스에 대한 것이어야 합니다.
"kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::SOURCE_BUCKET_NAME" ] "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::DESTINATION_BUCKET_NAME" ]
참고: SOURCE_BUCKET_NAME 및 DESTINATION_BUCKET_NAME을 소스 및 대상 버킷 이름으로 바꾸십시오.
버킷 키가 소스 또는 대상 버킷에 사용되지 않는 경우 암호화 컨텍스트는 객체 수준 리소스여야 합니다.
"kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::SOURCE_BUCKET_NAME/*" ] "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::DESTINATION_BUCKET_NAME/*" ]
참고: SOURCE_BUCKET_NAME 및 DESTINATION_BUCKET_NAME을 소스 및 대상 버킷 이름으로 바꾸십시오.
객체 ACL 및 퍼블릭 액세스 차단 확인
소스 및 대상 버킷이 액세스 제어 목록(ACL)을 사용하는지 확인합니다. 객체에 퍼블릭 액세스를 허용하는 ACL이 포함되어 있어도 대상 버킷이 퍼블릭 액세스 차단을 사용하면 복제에 실패합니다.
소스 객체 소유권 확인
다른 계정에서 소스 버킷에 객체를 업로드한 경우 소스 계정에 해당 객체에 대한 권한이 없을 수 있습니다. 소스 버킷에서 ACL이 비활성화되어 있는지 확인하십시오.
소스 버킷에서 ACL이 비활성화되어 있으면 버킷에 있는 모든 객체의 소유자는 소스 계정입니다. 소스 버킷에서 ACL이 비활성화되지 않은 경우 객체 소유권이 객체 소유자 선호 또는 버킷 소유자 선호로 설정되어 있는지 확인합니다. 소유권이 버킷 소유자 선호로 설정된 경우에는 소스 버킷 객체에 bucket-owner-full-control ACL 권한이 있어야 합니다.
소스 계정은 ACL을 비활성화하여 버킷에 있는 모든 객체의 소유권을 가질 수 있습니다. 대부분의 사용 사례는 ACL을 사용하여 액세스를 관리할 필요가 없습니다. IAM 및 버킷 정책을 사용하여 S3 리소스에 대한 액세스를 관리하는 것이 가장 좋은 방법입니다. S3 버킷에서 ACL을 비활성화하려면 객체 소유권 제어 및 버킷 ACL 비활성화를 참조하십시오. ACL을 비활성화할 때 Amazon S3 액세스에 영향을 주지 않도록 버킷 및 IAM 정책에서 충분한 권한을 부여해야 합니다.
올바른 복제 규칙 필터 지정
복제 규칙 필터를 올바르게 지정했는지 확인합니다.
키 접두사와 객체 태그의 조합으로 규칙 필터를 지정하는 경우, S3는 논리적 AND 연산을 수행하여 필터를 결합합니다. 이 규칙은 특정 키 접두사와 특정 태그를 가진 객체의 하위 집합에 적용됩니다.
관련 정보
관련 콘텐츠
- 질문됨 2달 전lg...
- 질문됨 3달 전lg...
- 질문됨 일 년 전lg...
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전