Amazon S3 Batch Operations 문제를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 12월 16일

버킷에 저장된 객체에 대해 Amazon Simple Storage Service(Amazon S3) Batch Operations 작업을 생성하려고 합니다. 하지만 Amazon S3에서 오류가 계속 반환되거나 내 배치 작업이 계속 실패합니다. 이 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

Amazon S3 Batch Operations 작업 실행에 장애를 일으키는 문제가 발생하면 작업이 실패합니다. 예를 들어 S3가 지정된 매니페스트를 읽을 수 없거나 사용자 매니페스트의 객체가 지정된 버킷에 없는 경우 작업이 실패합니다. 실패한 작업은 하나 이상의 실패 코드 및 이유를 생성합니다. 사용자가 작업의 세부 정보를 요청하여 확인할 수 있도록 S3 Batch Operations는 해당 작업에 대한 실패 코드와 이유를 저장합니다. 또한 작업의 완료 보고서에서 실패 코드와 이유를 검토할 수도 있습니다.

작업에서 너무 많은 작업 실패가 실행되지 않도록 Amazon S3는 모든 Batch Operations 작업에 작업 실패 임계값도 적용합니다. Amazon S3는 최소 1,000개의 태스크가 실행된 후 태스크 실패율을 모니터링합니다. 작업 실패율이 50%를 초과하면 작업이 실패합니다. 이 실패를 해결하려면 작업을 다시 제출하기 전에 실패의 원인을 검토하고 수정합니다.

Amazon S3 Batch Operations가 실패하거나 오류를 반환하는 몇 가지 일반적인 이유는 다음과 같습니다.

  • 매니페스트 파일 형식(CSV 또는 JSON)
  • 매니페스트 파일이 여러 버킷 이름을 지정하거나 여러 헤더 행을 포함함
  • 매니페스트 파일을 읽을 수 있는 권한
  • 배치 작업 리전
  • S3 인벤토리 보고서의 대상 버킷
  • AWS Identity and Access Management(IAM) 역할의 신뢰 정책
  • 배치 작업 생성을 위한 IAM 역할 권한
  • 원본 버킷, S3 인벤토리 보고서 및 대상 버킷에 대한 IAM 역할 액세스
  • AWS Organizations 서비스 제어 정책(SCP)

해결 방법

매니페스트 파일 형식(CSV 또는 JSON)

Amazon S3 Batch Operations는 CSV 및 JSON(S3 인벤토리 보고서) 매니페스트 파일을 지원합니다. Amazon S3에서 새 배치 작업을 생성할 때 사용자 매니페스트 파일에 대한 올바른 매니페스트 형식을 선택하거나 지정하세요.

  • Amazon S3 인벤토리 보고서의 경우 CSV 형식의 보고서를 사용하고 인벤토리 보고서와 연결된 manifest.json 파일을 지정해야 합니다.
  • CSV 파일의 경우 사용자 매니페스트 파일의 각 행에는 매니페스트 객체 키, ETag 및 선택적 버전 ID가 포함되어야 합니다. 객체 키는 URL로 인코딩되어야 합니다. 매니페스트는 모든 객체의 버전 ID를 포함하거나 모든 객체의 버전 ID를 생략해야 합니다. 참고: 사용자 매니페스트의 객체가 버전이 지정된 버킷에 있는 경우 객체의 버전 ID를 지정해야 합니다. 그렇지 않으면 배치 작업이 실패할 수 있습니다. 또는 (배치 작업을 생성할 때 존재했던 객체 대신) 객체의 최신 버전에 배치 작업을 적용할 수 있습니다.

매니페스트 파일 및 형식에 대한 자세한 내용은 매니페스트 지정을 참조하세요.

매니페스트 파일이 여러 버킷 이름을 지정하거나 여러 헤더 행을 포함함

S3 Batch Operations를 사용하면 객체를 복사하거나 객체의 객체 잠금 보존 날짜를 수정하거나 객체 잠금 법적 보존 상태를 수정할 수 있습니다. 이러한 3가지 배치 작업을 수행하려면 매니페스트 파일에 나열된 모든 객체도 동일한 버킷에 있어야 합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다.

Reasons for failure:
Cannot have more than 1 bucket per Job. <Job ID>

이러한 3가지 배치 작업 중 하나를 수행하는 경우 사용자 매니페스트 파일에 버킷 이름을 하나만 지정해야 합니다. 또한 매니페스트 파일에는 헤더 행이 포함되어서는 안 됩니다. 예를 들어 사용자 매니페스트 파일이 다음과 같은 경우(헤더 행이 여러 개 있는 경우) Amazon S3에서 오류를 반환합니다.

bucket,key
my-batch-bucket,object001.txt
my-batch-bucket,object002.txt
my-batch-bucket,object003.txt
my-batch-bucket,object004.txt

매니페스트 파일을 읽을 수 있는 권한

S3 Batch Operations 작업을 생성하는 데 사용하는 IAM 역할에 매니페스트 파일을 읽을 수 있는 GetObject 권한이 있는지 확인합니다. 객체의 메타데이터를 확인하여 이 작업을 수행할 수 있습니다. 매니페스트 파일을 암호화하는 데 사용 중인 S3 객체 소유권 또는 지원되지 않는 AWS KMS 키와의 액세스에서 불일치를 찾습니다.

매니페스트 파일을 읽을 권한이 없는 경우 S3 Batch Operations 작업을 생성하려고 할 때 다음 오류가 발생합니다.

AWS CLI:

Reason for failure
Reading the manifest is forbidden: AccessDenied

Amazon S3 콘솔:

Warning: Unable to get the manifest object's ETag. Specify a different object to continue

참고: S3 Batch Operations는 AWS KMS로 암호화된 CSV 인벤토리 보고서를 지원합니다. S3 Batch Operations는 AWS KMS로 암호화된 CSV 매니페스트 파일을 지원하지 않습니다. 자세한 내용은 인벤토리 구성 또는 매니페스트 지정을 참조하세요.

배치 작업 리전

S3 Batch Operations 복사 작업은 객체를 복사하려는 대상 버킷과 동일한 AWS 리전에서 생성되어야 합니다. 따라서 배치 작업을 생성할 때 대상 버킷과 동일한 리전을 선택해야 합니다. 예를 들어 대상 버킷이 us-west-2 리전에 있는 경우 배치 작업의 리전으로 us-west-2를 선택합니다.

S3 인벤토리 보고서의 대상 버킷

S3 인벤토리 보고서의 대상 버킷이 존재하는지 확인합니다. 또한 S3 버킷 정책이 s3:PutObject 작업을 거부하지 않는지 확인합니다. 보고서가 다른 AWS 계정으로 전송되는 경우 대상 버킷에서 IAM 역할로 s3:PutObject 작업을 수행할 수 있는지 확인합니다.

IAM 역할의 신뢰 정책

참고: IAM 사용자가 아니라 IAM 역할을 지정해야 합니다.

IAM 사용자와 달리 IAM 역할에는 다른 보안 주체가 이를 수임하기 위해 충족해야 하는 조건을 정의하는 신뢰 정책이 있습니다. S3 Batch Operations 서비스 보안 주체가 IAM 역할을 수임하도록 허용하려면 역할에 신뢰 정책을 연결합니다.

다음 신뢰 정책 예제는 권한 에스컬레이션과 관련된 위험을 줄이면서 Amazon S3에 대한 액세스를 위임합니다.

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

배치 작업 생성을 위한 IAM 권한

S3 Batch Operations 작업을 생성하고 실행하기 전에 필요한 권한을 부여합니다. S3 Batch Operations 작업 수행에 필요한 권한이 IAM 역할에 없는 경우 배치 작업이 실패합니다.

S3 Batch Operations 작업을 생성하려면 s3:CreateJob 권한이 필요합니다. 작업을 생성하는 동일한 엔터티에도 iam:PassRole 권한이 있어야 배치 작업에 대해 지정된 IAM 역할을 전달할 수 있습니다. IAM 리소스 지정에 대한 자세한 내용은 IAM JSON 정책, 리소스 요소 섹션을 참조하세요.

원본 버킷, S3 인벤토리 보고서 및 대상 버킷에 대한 IAM 역할 액세스

S3 Batch Operations에 사용 중인 IAM 역할에서 배치 작업을 수행하는 데 필요한 권한이 있는지 확인합니다. 예를 들어 복사 작업에 대한 IAM 정책은 다음과 같습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::{{DestinationBucket}}/*"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTagging",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::{{SourceBucket}}",
                "arn:aws:s3:::{{SourceBucket}}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::{{ManifestBucket}}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::{{ReportBucket}}/*"
            ]
        }
    ]
}

자세한 내용은 Amazon S3 Batch Operations에 대한 권한 부여 섹션을 참조하세요.

AWS Organizations 서비스 제어 정책(SCP)

AWS Organizations를 사용하는 경우 Amazon S3에 대한 액세스를 거부할 수 있는 거부 명령문이 없는지 확인합니다. 예를 들어 서비스 제어 정책이 모든 S3 작업을 명시적으로 거부하는 경우 배치 작업을 생성할 때 액세스 거부(Access Denied) 오류가 발생할 수 있습니다.

다음은 모든 S3 작업을 명시적으로 거부하는 정책의 예입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {   
            "Principal":"*",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

제한적 정책을 적용하려는 경우 S3 Batch Operations에서 작업을 수행하는 데 사용할 IAM 역할을 허용 목록에 추가할 수 있습니다. 예를 들면 다음과 같습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {   
            "Principal":"*",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
            "StringNotLike": {
                "aws:userId": [
                    "AROAEXAMPLEID:*",
                    "AIDAEXAMPLEID",
                    "111111111111"
                ]
            }
        }
        }
    ]
}

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?