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.

31
demandé sur Arjun Komath 2016-05-28 13:53:35

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:

  1. trouver votre Utilisateur dans la Console de gestion IAM et cliquez dessus.
  2. sous L'onglet" Permissions", développez la section" inline Policies "et cliquez sur le lien" click here"pour ajouter une politique.
  3. sélectionnez une "politique personnalisée".
  4. donnez un nom à votre police d'assurance. Il peut être n'importe quoi.
  5. 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.

40
répondu Matt Houser 2017-08-08 13:44:16

Cette solution a fonctionné pour moi:

  1. Fixation AWSKeyManagementServicePowerUser politique de la la politique de la liste (sans que j'ai eu une erreur sur "iam:listRole")

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

4
répondu Ali Nem 2017-07-19 13:02:58

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

1
répondu mykey 2018-05-22 03:18:16

j'ai résolu cela en ajoutant le AWSLambdaFullAccess les autorisations de l'utilisateur.

  1. au sein des utilisateurs IAM, cliquez sur Ajouter des permissions
  2. sélectionnez "joindre directement les polices existantes"
  3. Recherche AWSLambdaFullAccess, sélectionnez - le et cliquez sur next:review en bas de la page.
  4. Cliquez sur Add Permissions

Et cela devrait le faire.

0
répondu Enda Molloy 2018-03-31 12:30:19

si vous utilisez simplement les politiques que AWS fournit, vous devez donner à l'utilisateur ou au groupe auquel il appartient Policy from AWS

0
répondu Jherzon Franz Nava Rojas 2018-09-19 14:18:26