Amazon S3 배치 작업 문제를 해결하려면 어떻게 해야 하나요?

7분 분량
0

버킷 내의 객체에 대해 Amazon Simple Storage Service(S3) 배치 작업의 작업을 생성할 때, Amazon S3에서 오류가 반환됩니다. 혹은, 배치 작업이 실패합니다.

간략한 설명

Amazon S3 배치 작업을 성공적으로 실행할 수 없게 만드는 문제가 발생하면 작업이 실패합니다. 실패한 작업은 한 개 이상의 실패 코드와 이유를 생성합니다. Amazon S3 배치 작업의 실패 코드 및 이유를 보려면 작업의 세부 정보를 요청합니다. 작업의 완료 보고서에서 실패 코드와 이유를 검토할 수도 있습니다.

작업이 너무 많은 실패한 작업이 실행되는 것을 방지하기 위해 Amazon S3는 모든 배치 작업에 작업 실패 임계값을 설정합니다. Amazon S3는 최소 1,000개의 작업이 실행된 후 작업 실패율을 모니터링합니다. 작업이 실패율 50%를 초과하면 작업이 실패합니다. 이 실패를 해결하려면 실패의 원인을 검토하고 수정합니다. 그 뒤, 작업을 다시 제출합니다.

해결 방법

매니페스트 파일 형식이 잘못됨(.csv 또는 JSON)

Amazon S3 배치 작업에는 .csv 및 JSON(Amazon S3 인벤토리 보고서) 매니페스트 파일이 지원됩니다. 매니페스트 파일이 올바르지 않은 경우 Amazon S3에서 새 배치 작업을 생성해서 올바른 형식을 지정해야 합니다.

  • Amazon S3 인벤토리 보고서의 경우 CSV 형식의 보고서를 사용하고 인벤토리 보고서와 연결된 manifest.json 파일을 지정해야 합니다.

  • .csv 파일의 경우 매니페스트 파일의 각 행에 버킷 이름과 개체 키가 포함되어야 합니다. 선택 사항으로, 개체 버전을 포함시킵니다. 매니페스트에 버전 ID를 포함시키는 경우 모든 개체에 ID를 지정해야 합니다. 그렇지 않은 경우, 버전 ID를 포함하지 말아야 합니다. 객체 키는 URL 인코딩되어야 합니다.

    참고: 매니페스트의 개체가 버전이 지정된 버킷 내에 있는 경우 개체의 버전 ID를 지정해야 합니다. 그렇지 않는 경우, 배치 작업이 실패합니다. 혹은, Amazon S3이 개체의 잘못된 버전에 배치 작업을 적용할 수 있습니다.

자세한 내용은 매니페스트 지정을 참조합니다.

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

S3 배치 작업의 경우, 매니페스트 파일에 나열된 모든 개체가 동일한 버킷에 존재해야 합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다.

"실패 사유: 작업당 버킷이 1개 이상일 수 없습니다. JOB_ID"

S3 배치 작업 내 작업의 경우 매니페스트 파일에 버킷 이름이 하나만 지정되어 있고 헤더 행이 포함되어 있지 않은지 확인합니다. 이 예시에서는 매니페스트 파일에 헤더 행이 여러 개 포함되어 있기 때문에 Amazon S3가 오류를 반환합니다.

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

IAM 역할에 매니페스트 파일을 읽을 수 있는 권한이 없음

S3 배치 작업을 만드는 AWS IAM(신원 및 액세스 관리) 역할에는 매니페스트 파일에 대한 GetObject 읽기 권한이 있어야 합니다. 개체의 메타데이터에 S3 개체 소유권과 액세스 권한이 일치하지 않는 부분이 존재하는지 확인하세요. 또한 매니페스트 파일을 암호화하는 지원되지 않는 AWS Key Management Service(AWS KMS) 키가 있는지 확인하세요.

IAM 역할에 올바른 권한이 없는 경우 S3 배치 작업을 만들 때 다음과 같은 오류가 발생합니다.

AWS CLI 오류 예시

"실패 사유 매니페스트 읽기가 금지되어 있습니다: AccessDenied"

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참조하세요. 또한, 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

Amazon S3 콘솔 오류 예시

"경고: 매니페스트 개체의 ETag를 가져올 수 없습니다. 계속하려면 다른 개체를 지정하세요."

참고: S3 배치 작업은 AWS KMS로 암호화된 CSV 인벤토리 보고서를 지원합니다. S3 배치 작업은 AWS KMS로 암호화된 .csv 매니페스트 파일은 지원하지 않습니다. 자세한 내용은 S3 콘솔을 사용하여 인벤토리 구성을 참조하세요.

배치 작업이 다른 리전에 존재함

S3 배치 작업 복사 작업은 개체를 복사할 대상 버킷과 동일한 AWS 리전에 있어야 합니다. 배치 작업을 생성할 때 대상 버킷과 동일한 리전을 선택하세요. 예를 들어, 대상 버킷이 us-west-2 리전에 있는 경우, us-west-2를 배치 작업의 리전으로 선택합니다.

S3 인벤토리 보고서의 대상 버킷이 누락됨

S3 배치 작업이 생성하는 매니페스트의 대상 버킷이 존재해야 합니다. 또, Amazon S3 버킷 정책이 s3:PutObject 작업을 허용해야 합니다. 보고서가 다른 AWS 계정으로 전송되는 경우, 대상 버킷이 IAM 역할이 s3:PutObject 작업을 수행할 수 있도록 허용하는지 확인합니다.

IAM 역할의 신뢰 정책이 없음

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

IAM 역할에 대한 신뢰 정책은 다른 주체가 역할을 맡기 위해 충족해야 하는 조건을 정의합니다. S3 배치 작업 서비스 주체가 IAM 역할을 맡을 수 있도록 하려면 신뢰 정책을 역할에 첨부합니다.

이 신뢰 정책 예시에서는 Amazon S3에 대한 액세스 권한을 부여합니다. 이는 권한 상승과 관련된 모든 위험을 줄입니다.

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

배치 작업을 만들 수 있는 IAM 권한이 누락됨

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

S3 배치 작업을 만들려면 IAM 역할에 s3:CreateJob 권한을 부여해야 합니다. 작업을 만드는 개체에 iam:PassRole 권한이 함께 존재해야 합니다. 이렇게 하면 개체가 배치 작업에 대해 지정한 IAM 역할을 전달할 수 있습니다. 자세한 내용은 IAM JSON 정책 요소: 리소스를 참조하세요.

소스 버킷, S3 인벤토리 보고서 또는 대상 버킷에 대한 액세스가 누락됨

S3 배치 작업에 사용하는 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 배치 작업에 대한 권한 부여를 참조하세요.

조직 SCP에 제한이 존재함

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

이 예시 정책의 경우 모든 S3 작업을 명시적으로 거부합니다.

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

제한 정책을 적용하려면 S3 일괄 작업이 작업을 수행하는 데 사용하는 IAM 역할을 허용 목록에 추가해야 합니다. 이 예시에서는 정책에 예외를 추가합니다.

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

매니페스트에 개체의 버전 ID가 누락됨

배치 작업에서 매니페스트에 버전 ID 필드가 비어 있는 개체를 발견하면 다음 오류가 발생합니다.

"오류: BUCKET_NAME,prefix/file_name, 실패, 400, InvalidRequest, VersionId 누락으로 인해 작업이 실패했습니다"

작업 중 매니페스트 형식이 버전 ID를 사용하는 경우, 버전 ID 필드는 빈 문자열일 수 없습니다. 대신 버전 ID 필드가 "null" 문자열이어야 합니다. 버전이 없는 작업에는 이 오류가 발생하지 않습니다. 버전이 없는 작업은 매니페스트에 있는 버전 ID가 아닌, 각 개체의 가장 최신 버전에서 작동합니다. 이 오류를 해결하려면 비어 있는 버전 ID를 null 문자열로 변환하세요.

참고: 해당 특정 개체에 대한 배치 작업이 실패하지만 전체 작업은 실패하지 않습니다.

Amazon S3 개체 잠금 보존 모드가 켜져 있는 경우 작업 보고서가 전달되지 않음

거버넌스 모드 또는 규정 준수 모드에서 대상 버킷에 개체 잠금 보존 모드를 구성하면 다음 오류가 발생할 수 있습니다.

"오류: 실패 사유입니다. 작업 보고서를 버킷에 쓸 수 없습니다. 권한을 확인하세요."

Amazon S3는 보존 모드 구성이 존재하는 대상 버킷에 대한 개체 잠금을 지원하지 않습니다. 보존 모드가 구성된 경우 버킷은 WORM(Write-once-read-many)으로 보호됩니다. 이 오류를 해결하려면 개체 잠금 보존 모드가 구성되지 않은 작업 완료 보고서 대상 버킷을 선택하세요.

참고: 실패한 것은 작업이 아니라 완료 보고서입니다. 작업은 성공적으로 완료되고 모든 개체가 처리됩니다.

ETag 버전이 일치하지 않음

배치 작업에서 매니페스트를 지정할 때 매니페스트 개체 키, ETag 및 선택적 버전 ID를 지정할 수 있습니다. 매니페스트 파일을 지정할 때 ETag의 값이 S3 버킷에 있는 매니페스트 개체의 최신 버전의 ETag와 일치하는지 확인합니다. Amazon S3 콘솔 내 배치 작업 탭의 매니페스트 파일 속성에서 매니페스트 개체 ETag를 확인합니다. AWS CLI에서 매니페스트 사양이 통과하는 Etag의 값을 확인합니다.

콘솔 또는 AWS CLI에 채워진 ETag가 S3 버킷의 Etag와 일치하지 않으면 다음과 같은 오류가 발생합니다.

"매니페스트를 읽는 동안 오류가 발생했습니다. 원인: ETag 불일치. 예상된 ETag: 69f52a4e9f797e987155d9c8f5880897"

이 오류의 예상 ETag를 기록하고 두 버전의 ETag가 일치하는지 확인하세요. 자세한 내용은 매니페스트 지정을 참조합니다.

AWS 공식
AWS 공식업데이트됨 7달 전