aws lambda — пользователь не авторизован для выполнения: cognito-idp: список пользователей на ресурсе

#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, но все та же ошибка:
введите описание изображения здесь

Обновление: роль Lambda 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 — это был не просто совет. Я также указал, что вы используете неправильное разрешение (для совершенно другой службы).