Arj*_*ath 50 amazon-web-services amazon-iam aws-lambda
我正在尝试从节点调用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);
});
Run Code Online (Sandbox Code Playgroud)
密钥用于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?
谢谢.
Mat*_*ser 73
该AWSLambdaExecute和AWSLambdaBasicExecutionRole不提供在错误中表达的权限.这两个托管策略都旨在附加到您的Lambda函数本身,因此它与这些策略一起运行.
该错误表示运行nodejs程序的用户无权启动Lambda函数.
您需要向IAM用户lambda:InvokeFunction授予权限:
样本政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
在这个策略中,我已经包含了两种方法来调用lambda方法.
更新:
现在还有一个名为IAM托管策略AWSLambdaRole,可以分配给您的IAM用户或IAM角色.这应该为您提供所需的权限.
小智 7
我正在使用Serverless框架,并且还必须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
Run Code Online (Sandbox Code Playgroud)
此解决方案为我工作:
从策略列表中附加AWSKeyManagementServicePowerUser策略(没有出现关于“ iam:listRole”的错误)
将lambda:ListFunctions添加到@Matt Houser定义的自定义策略
{“版本”:“ 2012-10-17”,“声明”:[{“ Sid”:“ Stmt1464440182000”,“ Effect”:“允许”,“ Action”:[“ lambda:InvokeAsync”,“ lambda:InvokeFunction “, ” lambda:ListFunctions“ ],”资源“:[” *“]}]}
| 归档时间: |
|
| 查看次数: |
54797 次 |
| 最近记录: |