AccessDeniedException: ユーザーに実行権限がありません: lambda:InvokeFunction 質問する

AccessDeniedException: ユーザーに実行権限がありません: lambda:InvokeFunction 質問する

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

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 ユーザー用です。ユーザーにはAWSLambdaExecuteポリシーAWSLambdaBasicExecutionRoleが添付されています。

権限エラーが発生します: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

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

ベストアンサー1

更新 (TL;DR)

IAM ユーザーまたは IAM ロールに割り当てることができるIAM 管理ポリシーも用意されていますAWSLambdaRole。これにより、必要な権限が付与されます。


元の回答

AWSLambdaExecuteは、AWSLambdaBasicExecutionRoleエラーで表現されている権限を提供しません。これらの管理ポリシーは両方とも、Lambda関数自体にアタッチされるように設計されているため、それは走るこれらのポリシーに従って。

このエラーは、nodejs プログラムを実行しているユーザーに Lambda 関数を開始する権限がないことを示しています。

IAM ユーザーにlambda:InvokeFunction権限を与える必要があります:

  1. IAM 管理コンソールでユーザーを見つけてクリックします。
  2. 「権限」タブで、「インライン ポリシー」セクションを展開し、「ここをクリック」リンクをクリックしてポリシーを追加します。
  3. 「カスタムポリシー」を選択します。
  4. ポリシーに名前を付けます。何でも構いません。
  5. このポリシーを「ポリシー ドキュメント」フィールドに入力します。

サンプルポリシー:

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

このポリシーでは、ラムダ メソッドを呼び出す両方のメソッドを含めました。

おすすめ記事