J'appelle adminInitiateAuth et récupère une étrange AccessDeniedException pour mes propres lambdas.
Voici le code que j'appelle:
var params = {
AuthFlow: "ADMIN_NO_SRP_AUTH",
ClientId: "@cognito_client_id@",
UserPoolId: "@cognito_pool_id@",
AuthParameters: {
USERNAME : username,
PASSWORD : tempPassword
},
};
cognitoIdentityServiceProvider.adminInitiateAuth(params, function(error, data) {
if (error) {
console.log("ERROR! Login failed: " + JSON.stringify(error), error.stack);
} else {
console.log("Login sent back: " + JSON.stringify(data));
}
});
Le message d'erreur que je reçois est:
ERROR! Login failed: {"message":"arn:aws:lambda:us-east-1:201473124518:function:main-devryan-users_onCognitoLogin failed with error AccessDeniedException.","code":"UnexpectedLambdaException","time":"2017-02-25T18:54:15.109Z","requestId":"ce42833f-fb8b-11e6-929b-2f78b63faa12","statusCode":400,"retryable":false,"retryDelay":1.0853444458916783} UnexpectedLambdaException: arn:aws:lambda:us-east-1:201473124518:function:main-devryan-users_onCognitoLogin failed with error AccessDeniedException.
Est-ce que quelqu'un sait pourquoi j'obtiens cette erreur?
Cela se produisait parce que j'avais recréé mon API Gateway & Lambdas (en utilisant sans serveur) et il se trouve que la console Cognito ajoute sournois des autorisations pour contacter une fonction Lambda donnée lorsqu'elle est ajoutée comme déclencheur via la console.
Pour résoudre ce problème dans votre fichier CloudFormation/serverless.yml :
resources:
Resources:
OnCognitoSignupPermission:
Type: 'AWS::Lambda::Permission'
Properties:
Action: "lambda:InvokeFunction"
FunctionName:
Fn::GetAtt: [ "UsersUnderscoreonCognitoSignupLambdaFunction", "Arn"]
Principal: "cognito-idp.amazonaws.com"
SourceArn:
Fn::Join: [ "", [ "arn:aws:cognito-idp", ":", Ref: "AWS::Region", ":", Ref: "AWS::AccountId", ":", "userpool/", "@cognito_pool_id@" ] ]
Pour résoudre ce problème dans la console AWS :
Voici n article intéressant du forum Amazon qui m'a conduit sur la bonne voie.
J'ai eu un problème similaire au vôtre, sauf que j'essayais de configurer Lambda avec mon pool d'utilisateurs Cognito via CloudFormation.
Dans le lien que Ryan avait posté, il y avait un exemple de code que quelqu'un avait posté. À savoir Cognito avait besoin des autorisations appropriées pour appeler la fonction lambda.
MyLambdaInvocationPermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:InvokeFunction
FunctionName: !GetAtt MyLambdaFunctionName.Arn
Principal: cognito-idp.amazonaws.com
SourceArn: !GetAtt MyCognitoUserPoolName.Arn
vous pouvez ajouter l'autorisation du rôle lambda (créer une stratégie pour cognito et l'ajouter au rôle lamda). cela résout mon problème quand je suis resté dedans
User:arn:aws::12345678:user/xyz is not authorized to perform:
cognito-idp:CreateUserPool on resource:*(Service:AWSCognitoIdentityProviderService;
Status Code: 400; Error Code: AccessDeniedException;Request ID: xxxxx)
aws-cognito-idp
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Cognito-IDP",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction",
"cognito-idp:*"
],
"Resource": "*"
}
]
}
remarque: vous pouvez restreindre l'accès aux ressources et aux utilisateurs cognito-idp.
avec cela - je suis en mesure de créer et de déployer avec succès la pile cloudformation pour le module.