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

时间:2016-05-28 10:53:36

标签: amazon-web-services aws-lambda amazon-iam

我正在尝试从节点调用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用户。用户已附加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?

感谢。

7 个答案:

答案 0 :(得分:61)

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

错误是说运行nodejs程序的用户无权启动Lambda函数。

您需要为您的IAM用户授予AWSLambdaBasicExecutionRole权限:

  1. 在IAM管理控制台中找到您的用户并单击它。
  2. 在“权限”标签上,展开“内嵌政策”部分,然后点击“点击此处”链接添加政策“。
  3. 选择“自定义政策”。
  4. 为您的政策命名。它可以是任何东西。
  5. 将此政策放在政策文件字段中。
  6. 示例政策:

    lambda:InvokeFunction

    在这个策略中,我已经包含了两种方法来调用lambda方法。

    <强>更新

    现在还有一个名为{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1464440182000", "Effect": "Allow", "Action": [ "lambda:InvokeAsync", "lambda:InvokeFunction" ], "Resource": [ "*" ] } ] } 的IAM托管策略,您可以将其分配给您的IAM用户或IAM角色。这应该为您提供所需的权限。

答案 1 :(得分:5)

这个解决方案对我有用:

  1. 从中附加 AWSKeyManagementServicePowerUser 政策 政策清单(没有我的错误&#34; iam:listRole&#34;)

  2. 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 enter image description here

答案 5 :(得分:0)

我通过向用户添加AWSLambdaFullAccess权限来解决此问题。

  1. 在IAM用户中,单击添加权限
  2. 选择&#34;直接附加现有政策&#34;
  3. 搜索AWSLambdaFullAccess,选择它,然后点击页面底部的next:review
  4. 点击Add Permissions
  5. 那应该这样做。

答案 6 :(得分:0)

这对我有用:

{
    "Sid": "PermissionToInvoke",
    "Effect": "Allow",
    "Action": [
      "lambda:InvokeFunction"
    ],
    "Resource": "arn:aws:lambda:*:*:*:*"
}