Amazon S3 인벤토리 보고서를 생성할 수 없는 이유는 무엇입니까?
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" } } } ] }
대상 버킷 정책에서 Deny 문이 있는지 검토하십시오. 버킷은 Amazon S3(s3.amazonaws.com)가 대상 버킷에서 PutObject를 수행하지 못하게 하는 Deny 문을 포함하면 안 됩니다. 명시적 거부는 모든 Allow 문보다 우선합니다. 모든 Deny 문에서 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에 로그인합니다.
3. 버킷 목록의 AWS 리전 열을 검토하여 대상 버킷이 원본 버킷과 동일한 AWS 리전에 있는지 확인하십시오. (원본 버킷은 Amazon S3 인벤토리를 설정한 위치입니다.)
4. (선택 사항) 원본 버킷과 대상 버킷이 서로 다른 리전에 있는 경우 새 버킷을 만들거나 선택하십시오. 원본 버킷과 대상 버킷이 동일한 AWS 리전에 있어야 하기 때문입니다.
참고: Amazon S3는 특정 리전에 버킷을 생성합니다. 특정 리전에 버킷을 생성한 후에는 해당 버킷에 속한 모든 객체가 해당 리전을 떠나지 않습니다(명시적으로 전송되지 않는 한). Amazon S3 버킷 및 AWS 리전 사용에 대한 자세한 내용은 버킷 개요를 참조하십시오.
인벤토리 보고서 파일을 암호화하는 데 사용된 AWS KMS 키에 대한 액세스 권한 부여
AWS KMS 키로 Amazon S3 버킷을 암호화한 경우에는 Amazon S3에 AWS KMS 키에 대한 액세스 권한을 부여해야 합니다.
AWS KMS 키를 사용하는 암호화 권한을 부여하려면 다음을 수행하십시오.
1. AWS Management Console에 로그인합니다.
참고: AWS KMS 키를 소유한 AWS 계정을 사용하여 로그인해야 합니다.
2. AWS KMS 콘솔을 엽니다.
3. 왼쪽 탐색 창에서 Customer managed keys(고객 관리형 키)를 선택합니다.
4. Customer managed keys(고객 관리형 키) 아래에서 인벤토리 보고서 파일을 암호화하는 데 사용할 AWS KMS 키를 선택합니다.
5. Key policy(키 정책)에 대해 Switch to policy view(정책 보기로 전환)를 선택합니다.
6 키 정책을 업데이트하려면 Edit(편집)를 선택합니다.
7. Edit key policy(키 정책 편집) 아래에서 기존 키 정책에 다음 키 정책을 추가합니다.
{ "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. Save changes(변경 사항 저장)를 선택합니다.
참고: Amazon S3 콘솔의 Inventory configurations(인벤토리 구성) 아래에서 Last export(마지막 내보내기) 열을 선택합니다. 이 열이 비어 있는 경우 Amazon S3는 대상 버킷의 인벤토리 상태를 쿼리하여 403 AccessDenied 응답을 받았습니다. 마지막 내보내기 열이 비어 있다고 해서 항상 보고서가 전달되지 않았음을 나타내는 것은 아닙니다. 인벤토리 보고서가 성공적으로 전달되었을 수도 있습니다. 이 경우 대상 버킷의 지정된 경로에서 인벤토리 보고서를 찾을 수 있습니다.
서버 액세스 로그 및 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 Event history(이벤트 기록)에서 PutBucketPolicy 작업을 검색하여 최근에 변경된 사항이 있는지 확인할 수 있습니다. 참고로 CloudTrail 이벤트 기록은 90일 동안만 제공됩니다. PutBucketPolicy 작업이 90일보다 이전에 수행된 경우에는 Amazon S3에서 직접 CloudTrail 로그를 쿼리해야 합니다. CloudTrail에서 캡처하는 Amazon S3 API 호출에 대한 내용은 AWS Docs GitHub 웹 사이트의 CloudTrail의 Amazon S3 정보를 참조하십시오.
관련 정보
S3 버킷 및 객체에 대한 CloudTrail 이벤트 로깅 활성화
관련 콘텐츠
- 질문됨 3달 전lg...
- 질문됨 일 년 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 9달 전
- AWS 공식업데이트됨 3년 전