2017-10-27 4 views
0

S3でアイテムがアップロードされるたびにラムダ関数を実行します。私の関数が呼び出されましたが、アクセスエラーがあるようです。間違いは何ですか?AWSでバケツアクセスエラーが発生しました

私はロールlambdas3を定義しました。その信頼できるエンティティはラムダです。これは、ポリシーを、次のこと。これは、関数が実行中にlambdas3役割を担っているラムダ関数

var aws = require('aws-sdk'); 
var s3 = new aws.S3(); 

exports.handler = function(event,context){ 
    var bucket = event.Records[0].s3.bucket.name; 
    var key = decodeURIComponent(
     event.Records[0].s3.object.key.replace(/\+/g,'')); 
    var params = { 
     Bucket:bucket, 
     Key:key 
    }; 
    s3.getObject(params,function(err,data){ 
     if(err){ 
      console.log(err); 
      context.fail('Error getting object'+ 
      key+' from bucket'+bucket); 
     }else{ 
      context.succeed('hello '+data.Body); 
     } 

    }); 
}; 

あるs3lambda

Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Stmt1509114309000", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucketname" 
      ] 
     }, 
     { 
      "Sid": "Stmt1509114340000", 
      "Effect": "Allow", 
      "Action": [ 
       "logs:CreateLogGroup", 
       "logs:CreateLogStream", 
       "logs:PutLogEvents" 
      ], 
      "Resource": [ 
       "arn:aws:logs:*:*:*" 
      ] 
     } 
    ] 
} 

と呼ばれています。

答えて

1

バケット内のすべてのオブジェクトにアクセス許可を与えたい場合は、完全なアクセス許可(リソースで '*')を与えなければなりません。それはIAM役割ではなく、バケット方針だ、以下

Version": "2012-10-17", 
 
    "Statement": [ 
 
     { 
 
      "Sid": "Stmt1509114309000", 
 
      "Effect": "Allow", 
 
      "Action": [ 
 
       "s3:GetObject" 
 
      ], 
 
      "Resource": [ 
 
       "arn:aws:s3:::mybucketname/*" 
 
      ] 
 
     }, 
 
     { 
 
      "Sid": "Stmt1509114340000", 
 
      "Effect": "Allow", 
 
      "Action": [ 
 
       "logs:CreateLogGroup", 
 
       "logs:CreateLogStream", 
 
       "logs:PutLogEvents" 
 
      ], 
 
      "Resource": [ 
 
       "arn:aws:logs:*:*:*" 
 
      ] 
 
     } 
 
    ] 
 
}

+0

を更新ポリシーをご覧ください。それは "public"へのアクセスを与えません。 –

+0

@マークあなたは正しいです。私はそれに気付かなかった。回答を更新しました –

2

GetObjectポリシーのResource S3 ARNに/ *を追加する必要があります。 S3:GetObjectはS3のオブジェクトARNに対して機能します。たとえば:

arn:aws:s3:::mybucketname/* 
関連する問題