2016-05-28 16 views
23

Tôi đang cố gắng gọi hàm lambda từ nút.AccessDeniedException: Người dùng không được phép thực hiện: lambda: InvokeFunction

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); 
}); 

Các khóa dành cho người dùng IAM. Người dùng có đính kèm AWSLambdaExecuteAWSLambdaBasicExecutionRole chính sách.

tôi nhận được một lỗi cho phép: 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

Tôi đọc các tài liệu và một số blog, nhưng tôi không thể ủy quyền cho thành viên này để gọi hàm lambda. Làm cách nào để người dùng này gọi lambda?

Cảm ơn.

+0

Tôi chân thành mong có một giao diện web hoặc giao diện web để sửa lỗi này. truy cập bổ sung aws "AccessDeniedException: Người dùng: ARN ... không được phép thực hiện: ACTION trên tài nguyên: ARN ..." có thể nhắc bạn với một vài câu hỏi mô tả và thêm vai trò truy cập. – kwerle

Trả lời

26

AWSLambdaExecuteAWSLambdaBasicExecutionRole không cung cấp các quyền được thể hiện trong lỗi. Cả hai chính sách được quản lý này được thiết kế để được gắn vào chính hàm Lambda của bạn, do đó, nó chạy với các chính sách này.

Lỗi này cho biết người dùng trong đó chương trình nodejs đang chạy không có quyền khởi động hàm Lambda.

Bạn cần phải cung cấp cho người sử dụng IAM của bạn lambda:InvokeFunction phép:

  1. Tìm người dùng của bạn trong Management Console IAM và nhấp vào nó.
  2. Trên "Quyền" tab, mở rộng "Chính sách Inline" và nhấp vào liên kết "bấm vào đây" để thêm một chính sách".
  3. Chọn 'Chính sách Tuỳ chỉnh'.
  4. Give chính sách của mình một cái tên. nó có thể là bất cứ điều gì
  5. Đặt chính sách này trong lĩnh vực tài liệu chính sách

chính sách mẫu:..

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Stmt1464440182000", 
      "Effect": "Allow", 
      "Action": [ 
       "lambda:InvokeAsync", 
       "lambda:InvokeFunction" 
      ], 
      "Resource": [ 
       "*" 
      ] 
     } 
    ] 
} 

trong chính sách này, tôi có inclu suy luận cả hai phương thức để gọi các phương thức lambda.

Cập nhật:

Có bây giờ cũng là một quản lý chính sách IAM tên AWSLambdaRole mà bạn có thể gán cho người sử dụng IAM hoặc vai trò IAM. Điều này sẽ cung cấp cho bạn các quyền mà bạn cần.

+0

Điều này không hiệu quả đối với tôi, tôi phải sử dụng "lambda: *". Nói cách khác phải đánh nó bằng một cái búa lớn! –

+8

Đối với những gì bạn đang làm, không cần tạo chính sách tùy chỉnh. Bạn có thể thêm AWSLambdaRole làm chính sách được quản lý trên hồ sơ người dùng và đó là nó. – lusocoding

+0

Tôi đã thử thêm cả chính sách tùy chỉnh và đính kèm "AWSLambdaRole", nhưng tôi vẫn nhận được AccessDeniedException: không được phép thực hiện: lambda: InvokeFunction – Jim

4

Giải pháp này làm việc cho tôi:

  1. Gắn AWSKeyManagementServicePowerUser chính sách từ danh sách chính sách (không có mà tôi đã nhận ra lỗi trên "iam: listRole")

  2. Thêm lambda: ListFunctions theo chính sách tùy chỉnh được xác định bởi @Matt Houser

    { "Version": "2012/10/17", "Tuyên bố": [{ "Sid": "Stmt1464440182000", "Hiệu quả": "Cho phép", "Action": [ "lambda: InvokeAsync", "lambda: InvokeFunction", "lambda: ListFunctions" ], "Resource": [ "*" ] } ]}

Các vấn đề liên quan