#amazon-web-services #aws-lambda #amazon-iam
#amazon-web-services #aws-lambda #amazon-iam
Вопрос:
Я столкнулся с приведенной ниже ошибкой, когда я пытаюсь включить всех пользователей в свой пул пользователей во время тестирования в Lambda.
"errorType": "AccessDeniedException",
"errorMessage": "User: arn:aws:iam::123456789:user/xxxxx is not authorized to perform: cognito-idp:ListUsers on resource: arn:aws:cognito-idp:us-west-2:123456789:userpool/us-west-2_abcdefg",
Мой код в lambda:
var AWS = require('aws-sdk');
exports.handler = () => {
var params = {
UserPoolId: 'us-west-2_abcdefg',
}
return new Promise((resolve, reject) => {
AWS.config.update({ region: 'us-west-2', 'accessKeyId': 'accesskey', 'secretAccessKey': 'secretkey' });
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
cognitoidentityserviceprovider.listUsers(params, (err, data) => {
if (err) {
console.log(err);
reject(err)
}
else {
console.log("data", data);
resolve(data)
}
})
});
};
Я попытался добавить встроенную политику в IAM, но все та же ошибка:
Комментарии:
1. Какая роль IAM была отведена Lambda ?
2. Обновлено выше. Спасибо
Ответ №1:
Проверьте свой json (вторая вкладка) и добавьте следующее выше «lambdaexecutionpolicy»
"lambalistuserspolicy": {
"DependsOn": [
"LambdaExecutionRole"
],
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName": "lambda-list-users-policy",
"Roles": [
{
"Ref": "LambdaExecutionRole"
}
],
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cognito-idp:ListUsers"
],
"Resource": {
"Fn::Sub": [
"arn:aws:cognito-idp:${region}:${account}:*",
{
"region": {
"Ref": "AWS::Region"
},
"account": {
"Ref": "AWS::AccountId"
},
"lambda": {
"Ref": "LambdaFunction"
}
}
]
}
}
]
}
}
},
Комментарии:
1. можете ли вы подробнее объяснить этот шаг? Я не использую aws framework. Я управляю IAM только в консоли, а не с помощью CLI
2. Можете ли вы нажать на json (вторая вкладка)? И выполните поиск по lambdaexecutionpolicy
3. Я обновил разрешение роли IAM выше. Можете ли вы сказать, где именно я должен разместить код? Я абсолютный новичок в AWS
Ответ №2:
Вы назначили разрешение от Cognito Identity, в то время как необходимое вам разрешение получено от пулов пользователей Cognito.
На мой взгляд, лучший способ обновить политику через консоль — использовать представление JSON. Это позволяет создать инструкцию, которая содержит точное действие, указанное в сообщении об ошибке, без угадывания службы.
Вы также должны быть знакомы со страницей действий, условий и ключей ресурсов для IAM. В нем подробно описаны действия, доступные для каждой службы, и начинается с указания имени службы. Если вы не знаете, какой сервис, вы можете проверить те, которые, по вашему мнению, применимы, пока не найдете правильный (в данном случае «cognito-idp»).
Комментарии:
1. @CCCC — это был не просто совет. Я также указал, что вы используете неправильное разрешение (для совершенно другой службы).