AccessDeniedException:用户无权执行:lambda:InvokeFunction
AccessDeniedException: User is not authorized to perform: lambda:InvokeFunction
我正在尝试从节点调用 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?
AWSLambdaExecute
和 AWSLambdaBasicExecutionRole
不提供错误中表达的权限。这两个托管策略都旨在附加到您的 Lambda 函数本身,因此它使用这些策略运行。
错误是nodejs程序所在的用户运行没有启动Lambda函数的权限。
您需要为您的 IAM 用户授予 lambda:InvokeFunction
权限:
- 在 IAM 管理控制台中找到您的用户并单击它。
- 在“权限”选项卡上,展开“内联策略”部分并单击“单击此处”link 添加策略。
- Select 一个“自定义策略”。
- 为您的保单命名。它可以是任何东西。
- 将此政策放入政策文档字段。
政策示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
在此策略中,我包含了调用 lambda 方法的两种方法。
更新:
现在还有一个名为 AWSLambdaRole
的 IAM 托管策略,您可以将其分配给您的 IAM 用户或 IAM 角色。这应该会为您提供所需的权限。
这个解决方案对我有用:
正在附加 AWSKeyManagementServicePowerUser 策略
策略列表(没有它我在“iam:listRole”上遇到错误)
将 lambda:ListFunctions 添加到定义的自定义策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
我通过向用户添加 AWSLambdaFullAccess
权限解决了这个问题。
- 在 IAM 用户中,单击添加权限
- Select "Attach existing policies directly"
- 搜索
AWSLambdaFullAccess
,select然后点击页面底部的next:review
。
- 点击
Add Permissions
这样就可以了。
转到 IAM、select 用户并单击 “添加权限”。
在权限列表中,您可以简单地使用 lambda 搜索所有这些策略,并检查您想要的那些以便从控制台执行 lambda。
如果你只是使用AWS提供的策略你必须给用户或它所属的组
我正在使用 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
这对我有用:
{
"Sid": "PermissionToInvoke",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn: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);
});
密钥适用于 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?
AWSLambdaExecute
和 AWSLambdaBasicExecutionRole
不提供错误中表达的权限。这两个托管策略都旨在附加到您的 Lambda 函数本身,因此它使用这些策略运行。
错误是nodejs程序所在的用户运行没有启动Lambda函数的权限。
您需要为您的 IAM 用户授予 lambda:InvokeFunction
权限:
- 在 IAM 管理控制台中找到您的用户并单击它。
- 在“权限”选项卡上,展开“内联策略”部分并单击“单击此处”link 添加策略。
- Select 一个“自定义策略”。
- 为您的保单命名。它可以是任何东西。
- 将此政策放入政策文档字段。
政策示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
在此策略中,我包含了调用 lambda 方法的两种方法。
更新:
现在还有一个名为 AWSLambdaRole
的 IAM 托管策略,您可以将其分配给您的 IAM 用户或 IAM 角色。这应该会为您提供所需的权限。
这个解决方案对我有用:
正在附加 AWSKeyManagementServicePowerUser 策略 策略列表(没有它我在“iam:listRole”上遇到错误)
将 lambda:ListFunctions 添加到定义的自定义策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
我通过向用户添加 AWSLambdaFullAccess
权限解决了这个问题。
- 在 IAM 用户中,单击添加权限
- Select "Attach existing policies directly"
- 搜索
AWSLambdaFullAccess
,select然后点击页面底部的next:review
。 - 点击
Add Permissions
这样就可以了。
转到 IAM、select 用户并单击 “添加权限”。 在权限列表中,您可以简单地使用 lambda 搜索所有这些策略,并检查您想要的那些以便从控制台执行 lambda。
如果你只是使用AWS提供的策略你必须给用户或它所属的组
我正在使用 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
这对我有用:
{
"Sid": "PermissionToInvoke",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:*:*:*:*"
}