Batch Operations 권한 부여
Batch Operations 권한 부여 (Granting permissions for Batch Operations)
S3 Batch Operations 작업을 만들고 실행하기 전에 필요한 권한을 부여해야 해요. Amazon S3 Batch Operations 작업을 만들려면 s3:CreateJob 사용자 권한이 필요해요. 그리고 작업을 만드는 주체가 작업에 지정된 AWS Identity and Access Management(IAM) 역할을 Batch Operations에 전달하기 위해 iam:PassRole 권한도 있어야 해요.
출처: 문서
본문
다음 절에서는 IAM 역할을 만들고 정책을 연결하는 방법에 대한 정보를 제공해요. IAM 리소스 지정에 대한 일반적인 정보는 IAM 사용자 안내서의 IAM JSON 정책 요소: Resource를 참고하세요.
항목
- S3 Batch Operations IAM 역할 만들기
- 권한 정책 연결
S3 Batch Operations IAM 역할 만들기
Amazon S3가 여러분을 대신해 S3 Batch Operations를 수행하려면 권한이 있어야 해요. 이 권한은 AWS Identity and Access Management(IAM) 역할을 통해 부여돼요. S3 Batch Operations 작업을 만들 때 작업이 사용할 IAM 역할을 지정해요. 이것은 기존 IAM 역할일 수도 있고, Amazon S3 콘솔로 작업을 만들 경우 Amazon S3가 여러분을 위해 만든 IAM 역할일 수도 있어요.
Amazon S3가 IAM 역할을 만들어 주도록 선택하면, 역할에 신뢰 정책과 권한 정책을 자동으로 만들고 연결해요. 신뢰 정책은 S3 Batch Operations 서비스 보안 주체(batchoperations.s3.amazonaws.com)가 역할을 수임(assume)하도록 허용해요. 권한 정책은 작업을 위해 지정하는 설정에 따라 작업을 실행하는 데 필요한 모든 필수 작업을 허용해요. 예를 들어 AWS 계정 안에서 한 버킷에서 다른 버킷으로 객체를 복사하도록 작업을 구성하면, 권한 정책은 s3:GetObject와 s3:PutObject 같은 작업을 허용해요. 작업을 제출하기 전에 역할의 신뢰 정책과 권한 정책을 검토할 수 있어요. 이 옵션은 Amazon S3 콘솔로 작업을 만들고, 필터를 사용하거나 복제 구성을 기반으로 하는 S3 생성 객체 목록을 사용하도록 작업을 구성한 경우에만 사용할 수 있어요. 작업을 제출한 뒤 IAM 역할은 여러분의 계정에 유지돼요. 그다음 같은 작업을 수행하는 이후 작업에 다시 사용하거나, 작업 실행이 끝나면 삭제할 수 있어요.
IAM 역할을 직접 만들고 싶다면 이 절의 정책 예제가 역할을 만드는 데 도움이 될 거예요. 역할 생성 및 구성에 대한 자세한 내용은 IAM 사용자 안내서의 IAM 역할을 참고하세요. S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한을 참고하세요. 추가 예제는 작업 태그로 Batch Operations 권한 제어와 S3 Batch Operations로 객체 복사를 참고하세요.
IAM 정책에서 조건 키를 사용해 S3 Batch Operations 작업에 대한 접근 권한을 필터링할 수도 있어요. 자세한 내용과 Amazon S3 특정 조건 키의 전체 목록은 *서비스 권한 부여 참조(Service Authorization Reference)*의 Amazon S3용 작업, 리소스 및 조건 키를 참고하세요.
S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한을 참고하세요.
다음 동영상에는 Amazon S3 콘솔을 사용해 Batch Operations 작업에 대한 IAM 권한을 설정하는 방법이 포함돼 있어요.
신뢰 정책
S3 Batch Operations 서비스 보안 주체가 IAM 역할을 수임하도록 허용하려면 다음 신뢰 정책을 역할에 연결해요.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
권한 정책 연결
작업 유형에 따라 다음 정책 중 하나를 연결할 수 있어요. 권한을 구성하기 전에 다음을 확인하세요.
- 작업과 관계없이 Amazon S3는 S3 버킷에서 매니페스트 객체를 읽고, 선택적으로 버킷에 보고서를 쓰기 위한 권한이 필요해요. 따라서 아래 모든 정책에는 이러한 권한이 포함돼 있어요.
- Amazon S3 Inventory 보고서 매니페스트의 경우 S3 Batch Operations는
manifest.json객체와 연결된 모든 CSV 데이터 파일을 읽을 수 있는 권한이 필요해요. s3:GetObjectVersion같은 버전별 권한은 객체의 버전 ID를 지정할 때만 필요해요.- 암호화된 객체에서 S3 Batch Operations를 실행한다면 IAM 역할이 객체를 암호화하는 데 사용한 AWS KMS 키에 대한 접근 권한도 있어야 해요.
- AWS KMS로 암호화된 Inventory 보고서 매니페스트를 제출하면 IAM 정책에
manifest.json객체와 연결된 모든 CSV 데이터 파일에 대한"kms:Decrypt"및"kms:GenerateDataKey"권한이 포함되어야 해요. - Batch Operations 작업이 접근 제어 목록(ACL)이 활성화되어 있고 다른 AWS 계정에 있는 버킷에 매니페스트를 생성하면, 일괄 작업에 구성된 IAM 역할의 IAM 정책에
s3:PutObjectAcl권한을 부여해야 해요. 이 권한을 포함하지 않으면 일괄 작업이Error occurred when preparing manifest: Failed to write manifest오류로 실패해요.
객체 복사: PutObject
{
"Version":"2012-10-17",
"Statement":[
{
"Action":[
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging"
],
"Effect":"Allow",
"Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
},
{
"Action":[
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:ListBucket"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::amzn-s3-demo-source-bucket",
"arn:aws:s3:::amzn-s3-demo-source-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"
]
}
]
}
객체 태그 교체: PutObjectTagging
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectTagging",
"s3:PutObjectVersionTagging"
],
"Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
},
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"
]
}
]
}
객체 태그 삭제: DeleteObjectTagging
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:DeleteObjectTagging",
"s3:DeleteObjectVersionTagging"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"
]
}
]
}
접근 제어 목록 교체: PutObjectAcl
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl"
],
"Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
},
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"
]
}
]
}
객체 복원: RestoreObject
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:RestoreObject"
],
"Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
},
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"
]
}
]
}
Object Lock 보존 적용: PutObjectRetention
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":"s3:GetBucketObjectLockConfiguration",
"Resource":[
"arn:aws:s3:::amzn-s3-demo-destination-bucket"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObjectRetention",
"s3:BypassGovernanceRetention"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"
]
}
]
}
Object Lock 법적 보류 적용: PutObjectLegalHold
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":"s3:GetBucketObjectLockConfiguration",
"Resource":[
"arn:aws:s3:::amzn-s3-demo-destination-bucket"
]
},
{
"Effect":"Allow",
"Action":"s3:PutObjectLegalHold",
"Resource":[
"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"
]
}
]
}
기존 객체 복제: S3 생성 매니페스트와 함께 InitiateReplication
S3 생성 매니페스트를 사용하고 저장하는 경우 이 정책을 사용해요. Batch Operations를 사용해 기존 객체를 복제하는 방법에 대한 자세한 내용은 Batch Replication으로 기존 객체 복제를 참고하세요.
{
"Version":"2012-10-17",
"Statement":[
{
"Action":[
"s3:InitiateReplication"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::amzn-s3-demo-source-bucket/*"
]
},
{
"Action":[
"s3:GetReplicationConfiguration",
"s3:PutInventoryConfiguration"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::amzn-s3-demo-source-bucket"
]
},
{
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*",
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
}
]
}
기존 객체 복제: 사용자 매니페스트와 함께 InitiateReplication
사용자가 제공한 매니페스트를 사용하는 경우 이 정책을 사용해요. Batch Operations를 사용해 기존 객체를 복제하는 방법에 대한 자세한 내용은 Batch Replication으로 기존 객체 복제를 참고하세요.
{
"Version":"2012-10-17",
"Statement":[
{
"Action":[
"s3:InitiateReplication"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::amzn-s3-demo-source-bucket/*"
]
},
{
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"
]
}
]
}
체크섬 계산: GetObject, GetObjectVersion, RestoreObject, PutObject 허용
S3 Batch Operations와 함께 Compute checksum 작업을 사용하려는 경우 이 정책을 사용해요. 저장된 데이터의 바이트를 얻고 읽으려면 GetObject, GetObjectVersion, RestoreObject에 대한 권한이 필요해요. 사용자 입력 플레이스홀더를 여러분의 정보로 바꾸세요. Compute checksum에 대한 자세한 내용은 Amazon S3에서 보관 중인 데이터의 객체 무결성 확인을 참고하세요.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion",
"s3:RestoreObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-bucket1/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-bucket2/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-bucket3/*"
]
}
]
}
객체 암호화 업데이트
Batch Operations가 매니페스트를 읽고, 객체의 암호화 유형을 업데이트하고, 완료 보고서를 쓸 수 있도록 다음 권한 정책을 연결해야 해요. 이 권한 정책을 사용하려면 사용자 입력 플레이스홀더를 여러분의 정보로 바꾸세요. 이 작업을 사용하고 IAM 보안 주체가 사용하는 역할에 연결해야 하는 권한에 대한 자세한 내용은 객체 암호화 업데이트를 참고하세요.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"S3BatchOperationsUpdateEncryption",
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion",
"s3:UpdateObjectEncryption"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-bucket-target",
"arn:aws:s3:::amzn-s3-demo-bucket-target/*"
]
},
{
"Sid":"S3BatchOperationsPolicyForManifestFile",
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-bucket-manifest/*"
]
},
{
"Sid":"S3BatchOperationsPolicyForCompletionReport",
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-bucket-completion-report/*"
]
},
{
"Sid":"S3BatchOperationsPolicyManifestGeneration",
"Effect":"Allow",
"Action":[
"s3:PutInventoryConfiguration"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-bucket-target"
]
},
{
"Sid":"AllowKMSOperationsForS3BatchOperations",
"Effect":"Allow",
"Action":[
"kms:Decrypt",
"kms:GenerateDataKey",
"kms:Encrypt",
"kms:ReEncrypt*"
],
"Resource":[
"arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
]
}
]
}