2016-05-28 9 views
23

Sto provando a richiamare una funzione lambda dal nodo.AccessDeniedException: l'utente non è autorizzato a eseguire: 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); 
}); 

Le chiavi sono per un utente IAM. L'utente ha le politiche AWSLambdaExecute e AWSLambdaBasicExecutionRole allegate.

ottengo un errore di autorizzazione: 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

ho letto i documenti e diversi blog, ma sono in grado di autorizzare l'utente per richiamare la funzione lambda. Come si fa a invitare questo utente a lambda?

Grazie.

+0

Desidero vivamente che ci siano stati un aws cli o un'interfaccia web per risolvere questo problema. AWS add-accesso "AccessDeniedException: Utente: ARN ... non è autorizzato ad eseguire: ACTION sulla risorsa: ARN ..." forse si chiederà con un paio di domande descrizione e aggiungere i ruoli di accesso. – kwerle

risposta

26

Gli AWSLambdaExecute e AWSLambdaBasicExecutionRole non forniscono le autorizzazioni che vengono espresse nell'errore. Entrambe queste politiche gestite sono progettate per essere associate alla tua funzione Lambda stessa, quindi viene eseguito con queste politiche..

L'errore sta dicendo che l'utente con il quale il programma nodejs è in esecuzione non dispone dei diritti per avviare la funzione Lambda.

È necessario dare il vostro utente IAM la lambda:InvokeFunction permesso:

  1. Trova il tuo utente nel IAM Management Console e fare clic su di esso.
  2. Nella scheda "Autorizzazioni", espandere la sezione "Linee guida in linea" e cliccare sul link "clicca qui" per aggiungere una politica".
  3. Selezionare una 'politica su misura'.
  4. Lascia la tua politica di un nome. può essere qualsiasi cosa
  5. mettere questa politica nel campo documento Programmatico

politica del campione:..

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

in questa politica, ho inclu ded entrambi i metodi per richiamare i metodi lambda.

Aggiornamento:

Ora c'è anche una politica Managed IAM di nome AWSLambdaRole che è possibile assegnare al vostro utente IAM o il ruolo IAM. Questo dovrebbe darti le autorizzazioni che ti servono.

+0

Questo non ha funzionato per me, ho dovuto usare "lambda: *". In altre parole, ha dovuto colpirlo con un grosso martello! –

+8

Per quello che stai facendo, non è necessario creare una politica personalizzata. È possibile aggiungere AWSLambdaRole come criterio gestito sul profilo utente e il gioco è fatto. – lusocoding

+0

Ho provato sia l'aggiunta di criteri personalizzati che il collegamento di "AWSLambdaRole", ma sto ancora ricevendo l'AccessDeniedException: non è autorizzato a eseguire: lambda: InvokeFunction – Jim

4

Questa soluzione ha funzionato per me:

  1. Collegamento AWSKeyManagementServicePowerUser politica dalla lista politica (senza che ho ottenuto un errore su "iam: listRole")

  2. Aggiunta lambda: Elenco funzioni alla politica personalizzata definita da @Matt Houser

    { "Versione": "2012/10/17", "Dichiarazione": [{ "Sid": "Stmt1464440182000", "Effect": "Consenti", "Azione": [ "lambda: InvokeAsync", "lambda: InvokeFunction", "lambda: ListFunctions" ], "risorsa": [ "*" ] } ]}

Problemi correlati