2016-03-22 4 views
1

В настоящее время я пишу приложение в узле, который должен иметь возможность создавать, удалять и копировать файлы в ведро. Функции create и delete работают как шарм, но проблема связана с функцией «copyObject» (http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#copyObject-property). Он возвращает сообщение об ошибке «Доступ запрещен».«Доступ запрещен» при копировании файлов на AWS через SDK узла

Я провел некоторое исследование и пробовал различные политики Bucket, но ничего не работает. Это политика настоящее время я использую:

{ 
    "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" 
     } 
    ] 
} 

(где 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. Копирование также требует PutObject при записи на S3. Я думаю, что это должно сработать:

{ 
    "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" 
     } 
    ] 
} 
Смежные вопросы