AccessDeniedException: L'utilisateur n'est pas autorisé à effectuer: lambda: InvokeFunction
j'essaie d'invoquer une fonction lambda à partir d'un noeud.
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);
});
les clés sont pour un utilisateur IAM. L'utilisateur a AWSLambdaExecute
et AWSLambdaBasicExecutionRole
politiques.
j'obtiens une erreur de permission:
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
j'ai lu les docs et plusieurs blogs, mais je ne peux pas autoriser cet utilisateur à invoquer la fonction lambda. Comment faire pour que cet utilisateur invoque lambda?
Merci.
5 réponses
AWSLambdaExecute
et AWSLambdaBasicExecutionRole
ne pas fournir les autorisations qui sont exprimés dans l'erreur. Ces deux politiques gérées sont conçues pour être rattachées à votre fonction Lambda elle-même, donc il fonctionne avec ces politiques.
l'erreur est de dire que l'utilisateur sous lequel le programme nodejs est exécuté n'a pas le droit de démarrer la fonction Lambda.
Vous avez besoin pour donner à votre utilisateur IAM lambda:InvokeFunction
autorisation:
- trouver votre Utilisateur dans la Console de gestion IAM et cliquez dessus.
- sous L'onglet" Permissions", développez la section" inline Policies "et cliquez sur le lien" click here"pour ajouter une politique.
- sélectionnez une "politique personnalisée".
- donnez un nom à votre police d'assurance. Il peut être n'importe quoi.
- mettez cette politique dans le champ du document de politique.
Politique D'échantillonnage:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
dans cette politique, j'ai inclus les deux méthodes pour invoquer lambda méthode.
mise à Jour:
il y a maintenant aussi une politique gérée par IAM nommée AWSLambdaRole
que vous pouvez affecter à votre rôle d'utilisateur ou D'IAM. Cela devrait vous donner les autorisations dont vous avez besoin.
Cette solution a fonctionné pour moi:
Fixation AWSKeyManagementServicePowerUser politique de la la politique de la liste (sans que j'ai eu une erreur sur "iam:listRole")
ajouter lambda: ListFunctions à la politique douanière définie par @ Matt Houser
{ "Version": "2012-10-17", "Déclaration": [ { "Sid": "Stmt1464440182000", "Effet": "Permettre", "Action": [ "lambda: InvokeAsync", "lambda: InvokeFunction", "lambda: ListFunctions" ], "Ressources": [ "*" ] } ]}
allez à IAM, sélectionnez l'utilisateur et cliquez sur Ajouter des permissions. Dans la liste des permissions,vous pouvez simplement rechercher avec toutes ces politiques avec lambda, et vérifier celles que vous voulez afin d'exécuter la lambda à partir de la console. entrer la description de l'image ici
j'ai résolu cela en ajoutant le AWSLambdaFullAccess
les autorisations de l'utilisateur.
- au sein des utilisateurs IAM, cliquez sur Ajouter des permissions
- sélectionnez "joindre directement les polices existantes"
- Recherche
AWSLambdaFullAccess
, sélectionnez - le et cliquez surnext:review
en bas de la page. - Cliquez sur
Add Permissions
Et cela devrait le faire.
si vous utilisez simplement les politiques que AWS fournit, vous devez donner à l'utilisateur ou au groupe auquel il appartient