Amazon S3 인벤토리 보고서를 생성할 수 없습니다. 왜 이런 현상이 발생합니까?

최종 업데이트 날짜: 2021년 11월 19일

Amazon Simple Storage Service(Amazon S3) 인벤토리 보고서를 구성했지만 전송되지 않고 액세스 거부 오류가 발생합니다. 인벤토리 보고서 구성으로 인해 보고서가 생성되지 않는 이유는 무엇이며, 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Amazon S3 인벤토리 구성을 생성한 경우 액세스 거부 오류가 발생하지 않도록 올바른 버킷 정책과 권한을 보유해야 합니다.

Access denied Inventory export for 2021-02-19 failed because S3 doesn’t have access to the destination bucket or KMS key. Ask the owner of the destination bucket or KMS key to grant the necessary access and then try again.

Amazon S3 인벤토리 보고서를 생성하려면 다음 요구 사항을 충족해야 합니다.

  • 대상 버킷은 소스 버킷이 Amazon S3 인벤토리 보고서를 대상 버킷에 업로드할 수 있도록 허용해야 합니다.
  • 대상 버킷은 소스 버킷과 동일한 AWS 리전에 있어야 합니다(Amazon S3 인벤토리를 설정한 위치).
  • 대상 버킷 정책은 인벤토리 보고서 파일을 암호화하는 데 사용된 AWS KMS 키에 대한 액세스 권한을 부여해야 합니다.

참고: 첫 번째 인벤토리 보고서를 전송하는 데 최대 48시간이 걸릴 수 있습니다.

해결 방법

소스 버킷이 대상 버킷에 Amazon S3 인벤토리 보고서를 업로드하도록 허용

인벤토리 보고서를 생성하여 대상 버킷에 업로드하려면 버킷 정책에서 소스 버킷이 대상 버킷에 업로드되도록 허용해야 합니다.

예를 들면 다음과 같습니다.

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId",
  "Statement": [
    {
      "Sid":"InventoryAndAnalyticsExamplePolicy",
      "Effect":"Allow",
      "Principal": {"Service": "s3.amazonaws.com"},
      "Action":"s3:PutObject",
      "Resource":["arn:aws:s3:::destinationbucket/*"],
      "Condition": {
          "ArnLike": {
              "aws:SourceArn": "arn:aws:s3:::sourcebucket"
           },
         "StringEquals": {
             "aws:SourceAccount": "123456789012",
             "s3:x-amz-acl": "bucket-owner-full-control"
          }
       }
    }
  ]
}

따라서 대상 버킷 정책에서 거부 문을 검토하십시오. 버킷에는 Amazon S3(s3.amazonaws.com)가 대상 버킷에서 PutObject를 수행하지 못하게 하는 거부 문을 포함할 수 없습니다. 명시적 거부는 허용 문보다 우선합니다. PutObject 작업에 영향을 줄 수 있는 모든 거부 문에서 Amazon S3 서비스(s3.amazonaws.com)를 제외합니다.

다음은 Amazon S3(s3.amazonaws.com)에 대한 액세스를 거부하고 지정된 IP 범위에 대한 액세스만 허용하는 버킷 정책의 예입니다.

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::destinationbucket",
               "arn:aws:s3:::destinationbucket/*"
      ],
      "Condition": {
  "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}
      }
    }
  ]
}

이전 버킷 정책을 수정하려면 다음과 같이 정책을 업데이트하십시오.

{
"Version": "2012-10-17",  "Id": "S3PolicyId",
 "Statement": [
    {
      "Sid": "IPAllow",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::destinationbucket",
        "arn:aws:s3:::destinationbucket/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": "54.240.143.0/24"
        },
        "ArnNotLike": {
          "aws:SourceArn": "arn:aws:s3:::sourcebucket"
        }
      },
      "Principal": "*"
    },
    {
      "Sid": "InventoryAndAnalyticsExamplePolicy",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::destinationbucket/*"
      ],
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::sourcebucket"
        },
        "StringEquals": {
          "aws:SourceAccount": "123456789012",
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      },
      "Principal": {
        "AWS": [
          "s3.amazonaws.com"
        ]
      }
    }
  ]
}

대상 버킷이 소스 버킷과 동일한 AWS 리전에 있는지 확인

대상 버킷이 소스 버킷과 동일한 AWS 리전에 있는지 확인하려면 다음 단계를 수행합니다.

1.    AWS Management Console에 로그인합니다.

2.    Amazon S3 콘솔을 엽니다.

3.    버킷 목록의 AWS 리전 열을 검토하여 대상 버킷이 소스 버킷과 동일한 AWS 리전에 있는지 확인합니다. (소스 버킷은 Amazon S3 인벤토리를 설정하는 곳입니다.)

4.    (선택 사항) 소스 버킷과 대상 버킷이 서로 다른 리전에 있는 경우 새 버킷을 생성하거나 선택합니다. 이는 소스 버킷과 대상 버킷이 동일한 AWS 리전에 있어야 하기 때문입니다.

참고: Amazon S3는 특정 리전에 버킷을 생성합니다. 특정 리전에 버킷을 만든 후에는 버킷에 속한 모든 객체가 해당 리전을 벗어나지 않습니다(명시적으로 전송되지 않는 한). Amazon S3 버킷 및 AWS 리전 사용에 대한 자세한 내용은 버킷 개요 단원을 참조하십시오.

인벤토리 보고서 파일을 암호화하는 데 사용된 AWS KMS 키에 대한 액세스 권한 부여

AWS KMS 키로 Amazon S3 버킷을 암호화한 경우 Amazon S3에 KMS 키에 대한 액세스 권한을 부여해야 합니다.

AWS KMS 키를 사용하여 암호화에 대한 권한을 부여하려면 다음 단계를 수행합니다.

1.    AWS 관리 콘솔에 로그인합니다.

참고: AWS KMS 키를 소유한 AWS 계정을 사용하여 로그인해야 합니다.

2.    AWS KMS 콘솔을 엽니다.

3.    좌측의 탐색 창에서 고객 관리형 키를 선택합니다.

4.    고객 관리형 키에서 인벤토리 보고서 파일을 암호화하는 데 사용할 AWS KMS 키를 선택합니다.

5.    키 정책에서 정책 보기로 전환을 선택합니다.

6. 키 정책을 업데이트하려면 편집을 선택합니다.

7.    키 정책 편집에서 기존 키 정책에 다음 키 정책을 추가합니다.

{
    "Sid": "Allow Amazon S3 use of the KMS key",
    "Effect": "Allow",
    "Principal": {
        "Service": "s3.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition":{
      "StringEquals":{
         "aws:SourceAccount":"source-account-id"
     },
      "ArnLike":{
        "aws:SourceARN": "arn:aws:s3:::source-bucket-name"
     }
   }
}

8.    변경 사항 저장을 선택합니다.

서버 액세스 로그 및 CloudTrail 기록 검토

서버 액세스 로그를 검토하여 인벤토리 보고서 전달이 중지된 시간 동안 버킷 정책에 변경 사항이 있었는지 확인합니다. Amazon S3 서버 액세스 로그 형식은 다음과 같습니다.

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE REST.PUT.BUCKETPOLICY - "GET /awsexamplebucket1?logging HTTP/1.1" 200 - 242 - 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf+7tpT6sxDwDty4LHBUOZJG96N1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1

버킷 정책이 변경되었음을 나타내는 다음 항목을 찾아봅니다.

REST.PUT.BUCKETPOLICY

또한 AWS CloudTrail 이벤트 기록에서 PutBucketPolicy 작업을 검색하여 최근 변경 사항이 적용되었는지 확인할 수 있습니다. CloudTrail 이벤트 기록은 90일간의 기간만 제공한다는 점에 유의하십시오. PutBucketPolicy 작업이 90일 이상 전에 수행된 경우에는 Amazon S3에서 직접 CloudTrail 로그를 쿼리해야 합니다. CloudTrail에서 캡처한 Amazon S3 API 호출에 대한 자세한 내용은 AWS 문서 GitHub 웹 사이트의 CloudTrail에서 Amazon S3 정보를 참조하십시오.