AWS 계정 전체에 Amazon Simple Storage Service(Amazon S3) 객체를 복사하고 대상 계정이 복사한 객체를 소유하고 있는지 확인하고 싶습니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
**중요:**Amazon S3의 개체가 개체를 업로드한 AWS 계정에 의해 자동으로 소유되는 것은 아닙니다. S3 개체 소유권 설정을 변경할 때는 버킷 소유자 적용 설정을 사용하는 것이 좋습니다. 하지만 이 옵션은 버킷의 모든 개체에 있는 모든 버킷 액세스 제어 목록(ACL) 및 ACL을 끕니다.
S3 개체 소유권에서 버킷 소유자 적용 설정을 사용할 경우 동일한 버킷 소유자가 Amazon S3 버킷의 모든 개체를 자동으로 소유하게 됩니다. 버킷 소유자 적용 설정은 Amazon S3에 저장된 데이터에 대한 액세스 관리를 간소화합니다. 기존 버킷의 경우, 명시적으로 ACL을 해제하지 않으면 S3 개체는 여전히 업로드한 AWS 계정이 소유하게 됩니다.
기존 방법에서 ACL을 사용하여 객체를 공유하는 경우 ACL을 사용하여 객체에 액세스하는 주체를 식별하세요. 자세한 내용을 보려면 ACL 해제를 위한 사전 요구 사항을 참조하세요.
ACL을 끌 수 없는 경우 다음 단계에 따라 버킷 정책을 조정할 수 있을 때까지 다음 단계를 완료하여 개체에 대한 소유권을 가져가세요.
- 소스 계정에서 IAM ID(사용자 또는 역할)에 필요한 권한을 부여하는 AWS IAM(Identity and Access Management) 고객 관리형 정책을 생성합니다. IAM 사용자는 소스 버킷에서 개체를 검색하고 대상 버킷에 개체를 다시 넣을 수 있는 액세스 권한이 있어야 합니다. 다음 예와 유사한 IAM 정책을 사용할 수 있습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::source-DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*"
]
}
]
}
참고: 위의 예제 IAM 정책에는 개체를 나열하고 다른 계정의 버킷 간에 개체를 복사하는 데 필요한 최소한의 권한만 포함되어 있습니다. 사용 사례에 따라 허용된 S3 작업을 사용자 지정합니다. 예를 들어 사용자가 개체 태그가 있는 개체를 복사해야 하는 경우 s3:GetObjectTagging에 대한 권한도 부여해야 합니다. 오류가 발생하면 관리자 권한으로 다음 단계를 수행해 보세요.
- 소스 계정에서 고객 관리형 정책을 IAM ID에 연결합니다.
- 대상 계정에서 대상 버킷의 S3 개체 소유권을 버킷 소유자 선호로 설정합니다. ACL을 bucket-owner-full-control로 설정하여 업로드한 새 객체는 대상 버킷의 계정에서 자동으로 소유됩니다.
- 대상 계정에서 대상의 버킷 정책을 수정하여 원본 계정에 객체 업로드 권한을 부여합니다. 또한 버킷 정책에 오브젝트 업로드가 ACL을 bucket-owner-full-control로 설정해야 한다는 조건을 포함하세요. 다음 예제와 유사한 문을 사용하세요.
{
"Version": "2012-10-17",
"Id": "Policy1611277539797",
"Statement": [
{
"Sid": "Stmt1611277535086",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::222222222222:user/Jane"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
},
{
"Sid": "Stmt1611277877767",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::222222222222:user/Jane"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
}
]
}
참고: destination-DOC-EXAMPLE-BUCKET을 대상 버킷의 이름으로 바꿉니다. arn:aws:iam::222222222222:user/Jane을 소스 계정의 IAM ID의 ARN으로 바꿉니다.
위의 예제 버킷 정책에는 필요한 ACL이 있는 개체를 업로드하는 데 필요한 최소한의 권한만 포함되어 있습니다. 사용 사례에 따라 허용된 S3 작업을 사용자 지정합니다.
- 소스 계정의 IAM ID가 대상 버킷에 객체를 업로드할 수 있도록 ACL을 bucket-owner-full-control로 설정해야 합니다. 예를 들어, 소스 IAM ID는 --acl 옵션과 함께 cp AWS CLI 명령을 실행해야 합니다.
aws s3 cp s3://source-DOC-EXAMPLE-BUCKET/object.txt s3://destination-DOC-EXAMPLE-BUCKET/object.txt --acl bucket-owner-full-control
위 예제에서 명령은 object.txt 파일을 복사합니다. 전체 폴더를 복사하려면 다음 명령을 실행합니다.
aws s3 cp directory/ s3://bucketname/directory --recursive --acl bucket-owner-full-control
중요: S3 버킷에 AWS Key Management Service(AWS KMS)가 활성화된 기본 암호화가 있는 경우, AWS KMS 키 권한도 수정해야 합니다. 자세한 내용을 보려면 Amazon S3 버킷에 사용자 지정 AWS KMS 키를 사용하여 기본 암호화가 설정되어 있습니다를 참조하세요. 사용자가 버킷에서 다운로드하고 버킷에 업로드하도록 허용하려면 어떻게 해야 합니까?
관련 정보
버킷 소유자가 계정 간 버킷 권한을 부여하는 중
다른 AWS 계정에서 개체를 업로드할 때 Amazon S3 버킷의 개체 소유권을 변경하려면 어떻게 해야 하나요?
리소스 기반 정책을 사용하여 다른 계정의 Amazon S3 버킷에 대한 액세스 위임