1. ホーム
  2. node.js

[解決済み] AccessDeniedException: User is not authorized to perform: lambda:InvokeFunction

2022-12-13 08:01:33

質問

ノードからラムダ関数を呼び出そうとしています。

var aws = require('aws-sdk');
var lambda = new aws.Lambda({
    accessKeyId: 'id',
    secretAccessKey: 'key',
    region: 'us-west-2'
});

lambda.invoke({
    FunctionName: 'test1',
    Payload: JSON.stringify({
        key1: 'Arjun',
        key2: 'kom',
        key3: 'ath'
    })
}, function(err, data) {
    if (err) console.log(err, err.stack);
    else     console.log(data);
});

キーはIAMユーザーのものです。このユーザは AWSLambdaExecuteAWSLambdaBasicExecutionRole のポリシーが添付されています。

パーミッションエラーが発生するのですが。 AccessDeniedException: User: arn:aws:iam::1221321312:user/cli is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-west-2:1221321312:function:test1

ドキュメントといくつかのブログを読みましたが、このユーザーにラムダ関数を呼び出すことを許可することができません。どうすればこのユーザーにラムダを起動させることができるでしょうか?

どのように解決するのですか?

この AWSLambdaExecuteAWSLambdaBasicExecutionRole では、エラーで表現されているようなパーミッションは提供されません。これらのマネージドポリシーは、どちらもLambda関数自体に付けることを想定しているので を実行します。 をこれらのポリシーで実行します。

nodejsプログラムを実行しているユーザーには、Lambda関数を起動する権限がないというエラーです。

IAMユーザーに lambda:InvokeFunction パーミッションを与える必要があります。

  1. IAM管理コンソールでUserを探し、クリックします。
  2. "Permissions"タブで、"Inline Policies" セクションを展開し、"click here" link to add a policy" をクリックします。
  3. カスタム ポリシーを選択します。
  4. ポリシーに名前を付けます。何でもかまいません。
  5. このポリシーを[ポリシー ドキュメント]フィールドに入力します。

ポリシーのサンプルです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1464440182000",
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeAsync",
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

このポリシーでは、ラムダメソッドを呼び出すためのメソッドを両方とも入れています。

更新しました。

という名前の IAM Managed Policy も存在するようになりました。 AWSLambdaRole という名前の IAM Managed Policy があり、IAM ユーザーまたは IAM ロールに割り当てることができます。これにより、必要なパーミッションが与えられるはずです。