AccessDeniedException:用户无权执行:lambda:InvokeFunction

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用户.用户必须AWSLambdaExecuteAWSLambdaBasicExecutionRole附加政策.

我收到了一个权限错误: 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

AWSLambdaExecuteAWSLambdaBasicExecutionRole不提供在错误中表达的权限.这两个托管策略都旨在附加到您的Lambda函数本身,因此与这些策略一起运行.

该错误表示运行nodejs程序的用户无权启动Lambda函数.

您需要向IAM用户lambda:InvokeFunction授予权限:

  1. 在IAM管理控制台中找到您的用户并单击它.
  2. 在"权限"选项卡上,展开"内联策略"部分,然后单击"单击此处"链接以添加策略".
  3. 选择"自定义策略".
  4. 为您的政策命名.它可以是任何东西.
  5. 将此策略放在"策略文档"字段中.

样本政策:

{
    "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角色.这应该为您提供所需的权限.

  • 对于您正在执行的操作,无需创建自定义策略.您可以在用户配置文件中添加AWSLambdaRole作为托管策略,就是这样. (9认同)
  • 我尝试添加自定义策略并附加“AWSLambdaRole”,但我仍然收到 AccessDeniedException: <USER> is notauthorized to perform: lambda:InvokeFunction (4认同)
  • 附加"AWSLambdaRole"为我工作.谢谢吉姆 (4认同)
  • 添加“AWSLambdaRole”对我有用,但需要几分钟才能等待它起作用 (3认同)
  • 这对我不起作用,我必须使用“ lambda:*”。换句话说,必须用大铁锤敲打它! (2认同)
  • 对我有用,但更改需要几分钟到一个小时才能生效 (2认同)

小智 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)

  • 这为我解决了这个问题(其他答案都不适合我)。 (2认同)
  • 谢谢,这就是我一直在寻找的。请注意,此配置应放在“provider”部分下,https://forum.serverless.com/t/generate-iam-permissions-for-invoking-lambda-from-lambda/338 (2认同)

Ali*_*Nem 6

此解决方案为我工作:

  1. 从策略列表中附加AWSKeyManagementServicePowerUser策略(没有出现关于“ iam:listRole”的错误)

  2. lambda:ListFunctions添加到@Matt Houser定义的自定义策略

    {“版本”:“ 2012-10-17”,“声明”:[{“ Sid”:“ Stmt1464440182000”,“ Effect”:“允许”,“ Action”:[“ lambda:InvokeAsync”,“ lambda:InvokeFunction “, ” lambda:ListFunctions“ ],”资源“:[” *“]}]}


myk*_*key 5

转到 IAM ,选择用户并单击添加权限。在权限列表中,您可以简单地使用 lambda 搜索所有这些策略,并检查您想要的策略,以便从控制台执行 lambda。 输入 AWS IAM 权限