2016-03-22 6 views
1

現在ノード上にバケット内のファイルの作成、削除、コピーが可能なアプリケーションを作成しています。作成と削除の機能は魅力的ですが、問題は 'copyObject'機能(http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#copyObject-property)です。 「アクセスが拒否されました」というエラーが返されます。ノードSDKを使用してAWS上のファイルをコピーするときに「アクセスが拒否されました」

私はいくつかの調査を行い、異なるバケットポリシーを試しましたが、何も動作していないようです。 (bucketnameは私のバケットの名前です)

{ 
    "Version": "2008-10-17", 
    "Id": "Policy1458587151478", 
    "Statement": [ 
     { 
      "Sid": "AllowPublicRead", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::bucketname/*" 
     }, 
     { 
      "Sid": "AllowPublicList", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:ListBucket", 
      "Resource": "arn:aws:s3:::bucketname" 
     } 
    ] 
} 

私は、ファイルをコピーするために使用するコードは次のとおりです:

copyJson:function(creativeData, callback){ 

    var s3 = new AWS.S3({params: {Bucket: 'bucketname'}}); 

    var params = { 
     CopySource: 'json_files/' + creativeData.user_id + '/'+creativeData.old_id + '.json', 
     Key: 'json_files/' + creativeData.user_id + '/' + creativeData.new_id + '.json', 
     ACL: 'bucket-owner-full-control' 
    }; 

    s3.copyObject(params, function(err, data) { 
     if (err) callback(err, null); 
     else  callback(null, data); 
    }); 

    } 

エラーこれは私が現在使用している政策でありますis:

{ 
    "message": "Access Denied", 
    "code": "AccessDenied", 
    "region": null, 
    "time": "2016-03-22T09:02:25.761Z", 
    "requestId": "45EE85638A6099DD", 
    "extendedRequestId": "ag6GzYUc5gyZ1AuNQXpcLEgMI/ry814fS5oG66JwU3+4EfEuwfmAY2vagXemAkAJWyMx9EgvQ/8=", 
    "statusCode": 403, 
    "retryable": false, 
    "retryDelay": 3.5066229524090886 
} 

ここに何か不足しているものがありますか?

ありがとうございます。

答えて

0

あなたのIAMロールは、GetObjectとListObjectにのみアクセスできます。コピーするには、S3に書き込むときにPutObjectが必要です。私はこれがうまくいくと思います:

{ 
    "Version": "2008-10-17", 
    "Id": "Policy1458587151478", 
    "Statement": [ 
     { 
      "Sid": "AllowPublicRead", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": ["s3:GetObject","s3:PutObject"], 
      "Resource": "arn:aws:s3:::bucketname/*" 
     }, 
     { 
      "Sid": "AllowPublicList", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:ListBucket", 
      "Resource": "arn:aws:s3:::bucketname" 
     } 
    ] 
}