CSV 매니페스트로 AWS 계정 간 객체 복사하기
CSV 매니페스트로 AWS 계정 간 객체 복사하기
소스 계정에 있는 CSV 매니페스트를 이용하면 S3 Batch Operations로 AWS 계정 간에 객체를 복사할 수 있어요. 인벤토리 보고서를 매니페스트로 쓰고 싶다면 다른 방법을 써야 하므로, 이 문서에서는 CSV 방식의 권한 설정을 단계별로 살펴볼게요.
출처: 문서
본문
Amazon S3 Batch Operations를 쓰면 S3 객체에 대해 대규모 배치 작업을 수행할 수 있어요. S3 Batch Operations를 이용해 Copy(CopyObject) 작업을 만들면 같은 계정 안에서 또는 다른 대상 계정으로 객체를 복사할 수 있죠.
소스 계정에 저장된 CSV 매니페스트를 사용하면 S3 Batch Operations로 AWS 계정 간에 객체를 복사할 수 있어요. 인벤토리 보고서를 매니페스트로 쓰려면 Using an inventory report to copy objects across AWS accounts 문서를 참고하세요. 매니페스트 파일의 CSV 형식 예제는 Creating a manifest file 문서에서 확인할 수 있고요.
다음 절차는 소스 계정에 저장된 CSV 매니페스트 파일을 사용해, S3 Batch Operations 작업이 소스 계정에서 대상 계정으로 객체를 복사하도록 권한을 설정하는 방법을 보여줘요.
- 대상 계정에 IAM 역할 만들기 — 대상 계정에 S3 Batch Operations 신뢰 정책(trust policy)을 기반으로 한 AWS Identity and Access Management(IAM) 역할을 만들어요. 여기서 대상 계정은 객체가 복사되어 들어가는 계정이에요. 신뢰 정책에 대한 자세한 내용은 Trust policy 문서를, 역할 생성 방법은 IAM User Guide의 Creating a role to delegate permissions to an AWS service 문서를 참고하세요. 콘솔로 역할을 만들면 역할 이름을 입력하는데(아래 예제 역할은
BatchOperationsDestinationRoleCOPY라는 이름을 써요), S3 서비스를 선택한 다음 S3 Batch Operations 사용 사례를 선택하면 그 역할에 신뢰 정책이 적용돼요. 그다음 Create policy를 선택해서 다음 정책을 역할에 연결하면 됩니다. 이 정책을 사용하려면 사용자 입력 플레이스홀더를 자신의 정보로 바꾸세요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsDestinationObjectCOPY",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectVersionAcl",
"s3:PutObjectAcl",
"s3:PutObjectVersionTagging",
"s3:PutObjectTagging",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging",
"s3:GetObjectAnnotation",
"s3:GetObjectVersionAnnotation"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-destination-bucket/*",
"arn:aws:s3:::amzn-s3-demo-source-bucket/*",
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
}
]
}
이 정책 덕분에 이 역할은 batchoperations.s3.amazonaws.com이 소스 매니페스트 버킷에서 매니페스트를 읽을 수 있게 해 줘요. 그리고 소스 객체 버킷에서 객체, ACL(액세스 제어 목록), 태그, 어노테이션, 버전을 가져올(GET) 권한과, 대상 객체 버킷에 객체, ACL, 태그, 버전을 넣을(PUT) 권한을 부여하죠.
- 소스 계정에서 매니페스트 버킷에 버킷 정책 만들기 — 이전 단계에서 만든 역할이 소스 매니페스트 버킷에서 객체와 버전을 가져올 수 있도록, 매니페스트가 들어 있는 버킷에 버킷 정책을 만들어요. 이렇게 하면 S3 Batch Operations가 신뢰받는 역할을 통해 매니페스트를 읽을 수 있어요. 이 버킷 정책을 매니페스트가 들어 있는 버킷에 적용하세요. 다음은 소스 매니페스트 버킷에 적용할 버킷 정책 예시예요. 사용하려면 사용자 입력 플레이스홀더를 자신의 정보로 바꾸세요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsSourceManifestRead",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/ConsoleUserCreatingJob",
"arn:aws:iam::111122223333:role/BatchOperationsDestinationRoleCOPY"
]
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
}
]
}
이 정책은 대상 계정에서 작업을 만드는 콘솔 사용자에게도, 같은 버킷 정책을 통해 소스 매니페스트 버킷에서 같은 권한을 부여해 줘요.
- 소스 계정에서 소스 버킷에 버킷 정책 만들기 — 소스 객체 버킷에서 객체, ACL, 태그, 버전을 가져올 수 있도록, 만든 역할에 권한을 주는 버킷 정책을 소스 계정에 만들어요. 그러면 S3 Batch Operations가 신뢰받는 역할을 통해 소스 버킷에서 객체를 가져올 수 있게 돼요. 다음은 소스 객체가 들어 있는 버킷에 대한 버킷 정책 예시예요. 사용하려면 사용자 입력 플레이스홀더를 자신의 정보로 바꾸세요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsSourceObjectCOPY",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/BatchOperationsDestinationRoleCOPY"
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging",
"s3:GetObjectAnnotation",
"s3:GetObjectVersionAnnotation"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
}
]
}
- 대상 계정에 S3 Batch Operations 작업 만들기 — 대상 계정에서 만든 역할의 Amazon Resource Name(ARN)이 필요해요. 작업 생성에 대한 자세한 내용은 Creating an S3 Batch Operations job 문서를 참고하세요.