我正在尝试从节点调用lambda函数。
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
我阅读了文档和几个博客,但我无法授权此用户调用lambda函数。如何让这个用户调用lambda?
感谢。
答案 0 :(得分:61)
hashPasswordGenerator
和AWSLambdaExecute
不提供错误中表达的权限。这两个托管策略都旨在附加到您的Lambda函数本身,因此使用这些策略运行。
错误是说运行nodejs程序的用户无权启动Lambda函数。
您需要为您的IAM用户授予AWSLambdaBasicExecutionRole
权限:
示例政策:
lambda:InvokeFunction
在这个策略中,我已经包含了两种方法来调用lambda方法。
<强>更新强>
现在还有一个名为{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
的IAM托管策略,您可以将其分配给您的IAM用户或IAM角色。这应该为您提供所需的权限。
答案 1 :(得分:5)
这个解决方案对我有用:
从中附加 AWSKeyManagementServicePowerUser 政策 政策清单(没有我的错误&#34; iam:listRole&#34;)
将 lambda:ListFunctions 添加到由 @Matt Houser
{ &#34;版本&#34;:&#34; 2012-10-17&#34;, &#34;陈述&#34;:[ { &#34; Sid&#34;:&#34; Stmt1464440182000&#34;, &#34;效果&#34;:&#34;允许&#34;, &#34;行动&#34;:[ &#34;拉姆达:InvokeAsync&#34 ;, &#34;拉姆达:InvokeFunction&#34 ;, 的&#34;拉姆达:ListFunctions&#34; 强> ] &#34;资源&#34;:[ &#34; *&#34; ] } ]}
答案 2 :(得分:4)
我正在使用Serverless framework,并且还必须在我的serverless.yml中添加arn:aws:lambda
作为资源,以便使用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
答案 3 :(得分:3)
如果仅使用AWS提供的策略,则必须将其提供给用户或所属的组 Updated codepen here
答案 4 :(得分:2)
转到IAM,选择用户并单击添加权限。 在权限列表中,您只需使用lambda搜索所有这些策略,并检查所需的那些以便从控制台执行lambda。 enter image description here
答案 5 :(得分:0)
我通过向用户添加AWSLambdaFullAccess
权限来解决此问题。
AWSLambdaFullAccess
,选择它,然后点击页面底部的next:review
。Add Permissions
那应该这样做。
答案 6 :(得分:0)
这对我有用:
{
"Sid": "PermissionToInvoke",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:*:*:*:*"
}