Solución:
los AWSLambdaExecute
y AWSLambdaBasicExecutionRole
no proporcione los permisos que se expresan en el error. Ambas políticas administradas están diseñadas para adjuntarse a su propia función Lambda, por lo que corre con estas políticas.
El error es decir que el usuario bajo el cual se ejecuta el programa nodejs no tiene derechos para iniciar la función Lambda.
Debe darle a su usuario de IAM la lambda:InvokeFunction
permiso:
- Busque su usuario en la Consola de administración de IAM y haga clic en él.
- En la pestaña “Permisos”, expanda la sección “Políticas integradas” y haga clic en el enlace “haga clic aquí” para agregar una política “.
- Seleccione una “Política personalizada”.
- Dale un nombre a tu póliza. Puede ser cualquier cosa.
- Coloque esta política en el campo Documento de política.
Política de muestra:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
En esta política, he incluido ambos métodos para invocar métodos lambda.
Actualizar:
Ahora también hay una política administrada de IAM denominada AWSLambdaRole
que puede asignar a su usuario de IAM o rol de IAM. Esto debería darle los permisos que necesita.
Estoy usando el marco sin servidor, y también tuve que agregar arn:aws:lambda
como recurso en mi serverless.yml para usar lambda.invoke
.
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:DescribeTable
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
- lambda:InvokeFunction # Added this like mentioned above
Resource:
- arn:aws:dynamodb:us-east-1:*:*
- arn:aws:lambda:us-east-1:*:* # Had to add this too
Esta solución funcionó para mí:
-
Adjuntando AWSKeyManagementServicePowerUser política de la lista de políticas (sin eso, recibí un error en “iam: listRole”)
-
Añadiendo lambda: ListFunctions a la política personalizada definida por @Matt Houser
{“Versión”: “2012-10-17”, “Declaración”: [
{
“Sid”: “Stmt1464440182000”,
“Effect”: “Allow”,
“Action”: [
“lambda:InvokeAsync”,
“lambda:InvokeFunction”,
“lambda:ListFunctions”
], “Recurso”: [
“*”
]
}]}