ノードからラムダ関数を呼び出そうとしています。
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
権限を与える必要があります:
- IAM 管理コンソールでユーザーを見つけてクリックします。
- 「権限」タブで、「インライン ポリシー」セクションを展開し、「ここをクリック」リンクをクリックしてポリシーを追加します。
- 「カスタムポリシー」を選択します。
- ポリシーに名前を付けます。何でも構いません。
- このポリシーを「ポリシー ドキュメント」フィールドに入力します。
サンプルポリシー:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
このポリシーでは、ラムダ メソッドを呼び出す両方のメソッドを含めました。