ノードからラムダ関数を呼び出そうとしています。
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
私はドキュメントといくつかのブログを読みましたが、このユーザーにラムダ関数の呼び出しを許可することはできません。このユーザーにラムダを呼び出すにはどうすればよいですか?
ありがとう。
AWSLambdaExecute
およびAWSLambdaBasicExecutionRole
は、エラーで表現されている許可を提供しません。これらの管理ポリシーはどちらもLambda関数自体にアタッチされるように設計されているため、これらのポリシーでは実行です。
エラーは、nodejsプログラムを実行しているユーザーにLambda関数を開始する権限がないことを示しています。
IAMユーザーにlambda:InvokeFunction
権限を付与する必要があります。
サンプルポリシー:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
このポリシーには、ラムダメソッドを呼び出すための両方のメソッドが含まれています。
更新:
IAMユーザーまたはIAMロールに割り当てることができるAWSLambdaRole
という名前のIAM管理ポリシーもあります。これにより、必要な権限が与えられます。
サーバーレスフレームワーク を使用していますが、arn:aws:lambda
を使用するには、serverless.ymlのリソースとしてlambda.invoke
も追加する必要がありました。
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:DescribeTable
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
- lambda:InvokeFunction # Added this like mentioned above
Resource:
- arn:aws:dynamodb:us-east-1:*:*
- arn:aws:lambda:us-east-1:*:* # Had to add this too
このソリューションは私のために働いた:
AWSKeyManagementServicePowerUserポリシーリストからのポリシー(それなしで「iam:listRole」でエラーが発生しました)
@Matt Houserによって定義されたカスタムポリシーにlambda:ListFunctionsを追加する
{「バージョン」:「2012-10-17」、「ステートメント」:[{「Sid」:「Stmt1464440182000」、「Effect」:「許可」、「アクション」:[「lambda:InvokeAsync」、「lambda:InvokeFunction "、" lambda:ListFunctions "]、"リソース ":[" * "]}]}
AWSLambdaFullAccess
パーミッションをユーザーに追加することでこれを解決しました。
AWSLambdaFullAccess
を検索して選択し、ページの下部にあるnext:review
をクリックします。Add Permissions
をクリックしますそして、それはそれを行う必要があります。