経緯
チュートリアル:S3 バッチ操作、AWS Lambda および AWS Elemental MediaConvert
ステップ6:S3 バッチ操作の IAM ロールを作成する、でのエラー
Lambdaを呼び出すためにS3バッチのロールとして下記のポリシーをアタッチする。
その後S3バッチオペレーションのジョブを実行すると下記のエラーが発生
tutorial-bucket-1,mov_hts-samp002.mp4,,failed,403,AccessDeniedException,User: arn:aws:sts::<userID>:assumed-role/tutorial-s3batch-role/s3-batch-operations_2d09be84-8186-496a-9457-3c5023895557 is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:ap-northeast-1:<userID>:function:test-lambda-convert:$LATEST because no identity-based policy allows the lambda:InvokeFunction action
S3バッチのロールにアタッチしたポリシーを見にいくと警告が出ていることに気づく。
対処
問題は2つあるようでした。
1. IAMユーザーにLambdaを実行する権限がない。
2. IAMロールのポリシーの設定が適切でない。
1. IAMユーザーにLambdaを実行する権限がない。
ユーザーにはAdministoratorAccessがアタッチされているので問題なし
2. IAMロールのポリシーの設定が適切でない。
ポリシーのResourceの欄を関数のARNではなくフルアクセスにする
tutorial-bucket-1,mov_hts-samp004.mp4,,succeeded,200,,The input video object was converted successfully.
ただこの場合S3バッチに全てのLambdaの実行許可を与えることになっているので推奨されるやり方ではないと思われる。Lambdaにadd-permissionを与えたり他にもいろいろ試しましたがうまくいかなかったので現状はこの方法のみ記載。
より良い方法が見つかれば記載する予定。