質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Q&A

解決済

1回答

4620閲覧

AWS Lambda関数の実行でs3.putObjectAclの部分で、Access Deniedが出て困っています。

otakoma

総合スコア19

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

0グッド

0クリップ

投稿2019/04/09 00:25

AWS Lambda関数の実行でs3.putObjectAclの部分で、Access Deniedが出て困っています。

こちら「AWSによるサーバーレスアーキテクチャ」という本を参考にしながら進めているのですが、初歩的なところでつまづいてしまっています。

lambda関数の実行コードindex.js は以下のようにしています。

javascript

1'use strict'; 2var AWS = require('aws-sdk'); 3var s3 = new AWS.S3(); 4exports.handler = function(event, context, callback){ 5 var message = JSON.parse(event.Records[0].Sns.Message); 6 var sourceBucket = message.Records[0].s3.bucket.name; 7 var sourceKey = decodeURIComponent(message.Records[0].s3.object.key.replace(/+/g, ' ')); 8 var params = { 9 Bucket: sourceBucket, 10 Key: sourceKey, 11 ACL: 'public-read' 12 }; 13 s3.putObjectAcl(params, function(err, data){ 14 if (err) { 15 callback(err); 16 } 17 }); 18};

実行ロールのポリシーで、putObjectAclは「すべてのリソース」を割り当てています。

JSON

1{ 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Sid": "VisualEditor0", 6 "Effect": "Allow", 7 "Action": "s3:PutObjectAcl", 8 "Resource": "*" 9 } 10 ] 11}

実行時のエラーメッセージは↓です。AccessDeniedが出てしまっています。

JSON

1{ 2 "errorMessage": "Access Denied", 3 "errorType": "AccessDenied", 4 "stackTrace": [ 5 "Request.extractError (/var/task/node_modules/aws-sdk/lib/services/s3.js:585:35)", 6 "Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:106:20)", 7 "Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:78:10)", 8 "Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14)", 9 "Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)", 10 "AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)", 11 "/var/task/node_modules/aws-sdk/lib/state_machine.js:26:10", 12 "Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)", 13 "Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:685:12)", 14 "Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:116:18)" 15 ] 16}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

S3バケットのパブリックアクセス設定がブロックに設定されていると正しい権限をRoleに付けていてもAccess Deniedになるようです。
同じ問題であればS3のバケット一覧画面で対象のバケットを選択して「パブリックアクセス設定を編集する」からブロックを外すとオブジェクトの権限変更が可能になります。

投稿2019/08/20 00:19

編集2019/08/20 00:20
kojikoji27

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otakoma

2019/08/23 09:17

ありがとうございます。おかげさまで解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問