amazon-web-services - invalid - aws lambda permissions
AccessDeniedException: el usuario no está autorizado a realizar: lambda: InvokeFunction (4)
Esta solución funcionó para mí:
Adjuntando la política AWSKeyManagementServicePowerUser de la lista de políticas (sin eso recibí un error en "iam: listRole")
Agregar lambda: ListFunctions a la política personalizada definida por @Matt Houser
{"Versión": "2012-10-17", "Declaración": [{"Sid": "Stmt1464440182000", "Efecto": "Permitir", "Acción": ["lambda: InvokeAsync", "lambda: InvokeFunction"] ", " lambda: ListFunctions " ]," Recurso ": [" * "]}]}
Intento invocar una función lambda desde el nodo.
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);
});
Las claves son para un usuario de IAM. El usuario tiene políticas AWSLambdaExecute
y AWSLambdaBasicExecutionRole
adjuntas.
Obtengo un error de permiso: 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
Leí los documentos y varios blogs, pero no puedo autorizar a este usuario a invocar la función lambda. ¿Cómo hacer que este usuario invoque lambda?
Gracias.
Lo resolví agregando los permisos de AWSLambdaFullAccess
al usuario.
- Dentro de los usuarios de IAM, haga clic en agregar permisos
- Seleccione "Adjuntar políticas existentes directamente"
- Busque
AWSLambdaFullAccess
, selecciónelo y haga clic ennext:review
en la parte inferior de la página. - Haga clic en
Add Permissions
Y eso debería hacerlo.
vaya a IAM, seleccione el usuario y haga clic en agregar permisos. En la lista de permisos, puede simplemente buscar con todas esas políticas con lambda y marcar las que desee para ejecutar la lambda desde la consola. enter image description here
AWSLambdaExecute
y AWSLambdaBasicExecutionRole
no proporcionan los permisos que se expresan en el error. Ambas políticas administradas están diseñadas para conectarse a su función Lambda, por lo que se ejecuta 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.
Debes otorgarle a tu usuario de IAM el permiso lambda:InvokeFunction
:
- Encuentre 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 en línea" y haga clic en el enlace "hacer 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 llamada AWSLambdaRole
que puede asignar a su usuario IAM o función IAM. Esto debería darle los permisos que necesita.