2017-04-26 1 views
1

내 웹 사이트에서 aws javascript SDK를 통해 삭제할 수있는 객체가 포함 된 s3 버킷이 있습니다. 참고로, 내 웹 사이트는 us-east-1 지역의 s3에서 호스팅되며 웹 사이트를 통해 삭제해야하는 객체가 포함 된 내 버킷은 us-west-1에 있습니다.AWS javascript sdk로 s3 버킷의 객체를 삭제할 수없는 이유는 무엇입니까?

var bucketInstance = new AWS.S3({region: 'us-west-1'}); 
var params = { 
    Bucket: 'MyBucketName', 
    Key: 'photoToDelete.JPG' 
}; 
bucketInstance.deleteObject(params, function (err, data) { 
    if (data) { 
     console.log("Photo deleted successfully");   
    } 
    else { 
     console.log("Check if you have sufficient permissions : "+err);         
    } 
}); 

을하지만 그것은 successed하지 않습니다 - 다음과 같은 오류가 콘솔에 나타납니다 :

내 웹 사이트에 다음 코드를 시도

1)은 XMLHttpRequest https://MyBucketName.s3-us-west-1.amazonaws.com/photoToDelete.JPG을로드 할 수 없습니다. 프리 플라이트 요청에 대한 응답이 액세스 제어 검사를 통과하지 못합니다. 'Access-Control-Allow-Origin'헤더가 요청 된 자원에 없습니다. 따라서 'https : // MyDomain .com'은 액세스 할 수 없습니다. 2122 옵션 https://MyBucketName.s3.amazonaws.com/?max-keys=0 403 (금지)

3)은 XMLHttpRequest https://MyBucketName.s3.amazonaws.com/?max-keys=0를로드 할 수 없습니다 : 응답은 HTTP 상태 코드 (403)

2) AWS-sdk.js했다. 프리 플라이트 요청에 대한 응답이 액세스 제어 검사를 통과하지 못합니다. 'Access-Control-Allow-Origin'헤더가 요청 된 자원에 없습니다. 따라서 'https : // MyDomain .com'은 액세스 할 수 없습니다. 응답의 HTTP 상태 코드는 403입니다.

그리고 이러한 오류는 콘솔에서 약간 반복되는 것 같습니다.

무슨 일입니까? 나는 이러한 객체가 삭제 될 그 필요에있는 S3 버킷 등의 문제를 일으킬 수있는 생각

AWS.config.region = 'us-east-1'; // 1. Enter your region 

    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
     IdentityPoolId: 'us-east-1:*MyIdentityPoolId*' 
    }); 

서쪽 1에 있습니다 이전에 내 코드에서 참고로

는 그래서 같은 AWS SDK를 config (설정) 내 웹 사이트와 내가 설정 한 모든 람다 함수와 API 게이트웨이는 동쪽 -1에 있으므로 당연히 내 AWS.config.region과 자격 증명을 동쪽 값으로 구성했습니다. 비록 이것이이 문제를 일으키는 지 모르겠다. 명시 적으로 서부 지역에 s3 지역을 설정하고 있는데, 우리가 의심 스럽기 때문에이 설정 값이 오류를 일으키는 것처럼 IdentityPool을 us-west-1에 만들 수는 없지만 그럴 수 있습니다.

마지막으로, S3의 다음 버킷 정책이 삭제 될 필요가있는 객체가 양동이 우리 서쪽-1 :

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>MyDomain.com</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedMethod>PUT</AllowedMethod> 
    <AllowedMethod>POST</AllowedMethod> 
    <AllowedMethod>DELETE</AllowedMethod> 
    <MaxAgeSeconds>3000</MaxAgeSeconds> 
    <AllowedHeader>Authorization</AllowedHeader> 
</CORSRule> 
</CORSConfiguration> 
:

{ 
    "Version": "2012-10-17", 
    "Id": "Policy2354434234", 
    "Statement": [ 
     { 
      "Sid": "MakeItPublic", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": [ 
       "s3:GetObject", 
       "s3:DeleteObject", 
       "s3:PutObject" 
      ], 
      "Resource": "arn:aws:s3:::MyBucketName/*" 
     } 
    ] 
} 

을 그리고 난 그렇게 같은 CORS 구성을 설정

또한 버킷의 모든 사용자에 대해 읽기 및 쓰기 권한을 설정했습니다. 왜 내가이 매우 실망스러운 오류가 발생하는지 어떤 생각?

+1

이 카드 wiled 오류에 보여줍니다 같은 방법으로 추가 할 필요가있는 것은 어디에서 일이 잘못 가고있다 . 허용 된 원점을 '*'로 간단히 재검사 해 볼 수 있습니까? – c3st7n

+0

제안에 감사드립니다 - 나는 원점을 *로 바꾸 었으며 동일한 결과가 발생했습니다! –

+1

여기에서 빨대를 심각하게 짚고 있지만, 찾을 수있는 모든 예제/샘플은'xmlns' 또는 버전/인코딩 정보를 지정하지 않습니다. – c3st7n

답변

0

도메인이 & AllowedHeader 그것은이 CORS의 설정과 같은

<?xml version="1.0" encoding="UTF-8"?> 
 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
 
<CORSRule> 
 
    
 
    <AllowedOrigin>https://example.com</AllowedOrigin> 
 
    <AllowedMethod>PUT</AllowedMethod> 
 
    <AllowedMethod>POST</AllowedMethod> 
 
    <AllowedMethod>DELETE</AllowedMethod> 
 
    <AllowedHeader>*</AllowedHeader> 
 
</CORSRule> 
 
<CORSRule> 
 
    <AllowedOrigin>*</AllowedOrigin> 
 
    <AllowedMethod>GET</AllowedMethod> 
 
</CORSRule> 
 
</CORSConfiguration>