126 votes

AccessDeniedException: l'utilisateur n'est pas autorisé à effectuer: lambda: InvokeFunction

J'essaie d'appeler une fonction lambda à partir de 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 des stratégies AWSLambdaExecute et AWSLambdaBasicExecutionRole attachées.

Je reçois une erreur d'autorisation: 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 la documentation et plusieurs blogs, mais je ne parviens pas à autoriser cet utilisateur à appeler la fonction lambda. Comment amener cet utilisateur à invoquer lambda?

Merci.

174voto

Matt Houser Points 4226

L' AWSLambdaExecute et AWSLambdaBasicExecutionRole ne fournissent pas les autorisations qui sont exprimés dans l'erreur. Ces deux gérés politiques sont conçues pour être attaché à votre fonction Lambda lui-même, de sorte qu'il s'exécute avec ces politiques.

L'erreur est de dire que l'utilisateur sous lequel le nodejs programme est en cours d'exécution n'ont pas les droits pour lancer la fonction Lambda.

Vous devez donner à votre utilisateur IAM l' lambda:InvokeFunction autorisation:

  1. Trouvez votre Utilisateur dans l'IAM de la Console de Gestion et cliquez dessus.
  2. Sur l'onglet "Autorisations", développez le "Inline Politiques" et de cliquer sur le lien "cliquez ici" pour ajouter un politique".
  3. Sélectionnez "Personnalisé"la Politique".
  4. Donner votre politique un nom. Il peut être n'importe quoi.
  5. Mettre cette politique dans le Document de Politique de terrain.

La politique de l'échantillon:

{
    "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 à invoquer lambda méthodes.

Mise à jour:

Il y a maintenant aussi un IAM Géré Politique nommé AWSLambdaRole que vous pouvez attribuer à votre IAM utilisateur ou un rôle IAM. Cela devrait vous donner les autorisations dont vous avez besoin.

12voto

Ali Nem Points 1508

Cette solution a fonctionné pour moi:

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

  2. L'ajout de lambda:ListFunctions à la coutume de la politique définie par @Matt Houser

    { "Version": "2012-10-17", La "déclaration": [ { "Sid": "Stmt1464440182000", "Effet": "Autoriser", "Action": [ "lambda:InvokeAsync", "lambda:InvokeFunction", "lambda:ListFunctions" ], "Resource": [ "*" ] } ] }

7voto

mykey Points 119

allez dans IAM, sélectionnez l'utilisateur et cliquez sur ajouter des autorisations. Dans la liste des autorisations, vous pouvez simplement rechercher toutes les stratégies avec lambda et cocher celles que vous souhaitez pour exécuter le lambda à partir de la console. entrez la description de l'image ici entrez la description de l'image ici

4voto

Si vous utilisez uniquement les stratégies fournies par AWS, vous devez le donner à l'utilisateur ou au groupe auquel il appartient. Politique d'AWS

3voto

Enda Molloy Points 484

J'ai résolu ce problème en ajoutant les autorisations AWSLambdaFullAccess à l'utilisateur.

  1. Dans Utilisateurs IAM, cliquez sur Ajouter des autorisations.
  2. Sélectionnez "Joindre les stratégies existantes directement"
  3. Recherchez AWSLambdaFullAccess , sélectionnez-le et cliquez sur next:review en bas de la page.
  4. Cliquez sur Add Permissions

Et cela devrait le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X