AccessDeniedException:用户无权执行: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 用户。用户附加了 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?

原文由 Arjun Komath 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 678
2 个回答

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": [
                "*"
            ]
        }
    ]
}

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

更新:

现在还有一个名为 AWSLambdaRole 的 IAM 托管策略,您可以将其分配给您的 IAM 用户或 IAM 角色。这应该为您提供所需的权限。

原文由 Matt Houser 发布,翻译遵循 CC BY-SA 4.0 许可协议

我正在使用 无服务器框架,我还必须添加 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

原文由 Jessica Bee 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题