Ich versuche, eine Lambda-Funktion vom Knoten aus aufzurufen.
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);
});
Die Schlüssel sind für einen IAM-Benutzer. Der Benutzer hat AWSLambdaExecute
und AWSLambdaBasicExecutionRole
Richtlinien angehängt.
Ich erhalte einen Berechtigungsfehler:
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
Ich habe die Dokumente und mehrere Blogs gelesen, kann diesen Benutzer jedoch nicht zum Aufrufen der Lambda-Funktion autorisieren. Wie kann dieser Benutzer Lambda aufrufen?
Vielen Dank.
amazon-web-services
aws-lambda
amazon-iam
Arjun Komath
quelle
quelle
Antworten:
Die
AWSLambdaExecute
undAWSLambdaBasicExecutionRole
geben nicht die Berechtigungen an, die im Fehler ausgedrückt werden. Diese beiden verwalteten Richtlinien können an Ihre Lambda-Funktion selbst angehängt werden, sodass sie mit diesen Richtlinien ausgeführt werden.Der Fehler besagt, dass der Benutzer, unter dem das Programm nodejs ausgeführt wird, keine Rechte zum Starten der Lambda-Funktion hat.
Sie müssen Ihrem IAM-Benutzer die
lambda:InvokeFunction
Berechtigung erteilen :Beispielrichtlinie:
In diese Richtlinie habe ich beide Methoden zum Aufrufen von Lambda-Methoden aufgenommen.
Aktualisieren:
Es gibt jetzt auch eine verwaltete IAM-Richtlinie mit dem Namen
AWSLambdaRole
, die Sie Ihrem IAM-Benutzer oder Ihrer IAM-Rolle zuweisen können. Dies sollte Ihnen die Berechtigungen geben, die Sie benötigen.quelle
Ich verwende das Serverless Framework und musste es auch
arn:aws:lambda
als Ressource in meiner serverless.yml hinzufügen, um es verwenden zu könnenlambda.invoke
.quelle
Diese Lösung hat bei mir funktioniert:
Anbringen AWSKeyManagementServicePowerUser Richtlinie aus der Richtlinienliste (ohne dass ich einen Fehler habe auf „iam: listRole“)
Hinzufügen von Lambda: ListFunctions zu der von @Matt Houser definierten benutzerdefinierten Richtlinie
{"Version": "2012-10-17", "Anweisung": [{"Sid": "Stmt1464440182000", "Effekt": "Zulassen", "Aktion": ["Lambda: InvokeAsync", "Lambda: InvokeFunction" ", " lambda: ListFunctions " ]," Resource ": [" * "]}]}
quelle
Gehen Sie zu IAM, wählen Sie den Benutzer aus und klicken Sie auf Berechtigungen hinzufügen. In der Liste der Berechtigungen können Sie einfach mit Lambda nach all diesen Richtlinien suchen und die gewünschten überprüfen, um das Lambda über die Konsole auszuführen.
quelle
Wenn Sie nur die von AWS bereitgestellten Richtlinien verwenden, müssen Sie diese dem Benutzer oder der Gruppe, zu der sie gehört, geben
quelle
Ich habe dies gelöst, indem ich
AWSLambdaFullAccess
dem Benutzer die Berechtigungen hinzugefügt habe .AWSLambdaFullAccess
, wählen Sie es aus und klicken Sienext:review
unten auf der Seite.Add Permissions
Und das sollte es tun.
quelle
Das hat bei mir funktioniert:
quelle