Как добавить пользователя в группу пользователей Cognito из AWS Lambda? - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь добавить пользователя a в группу пула пользователей cognito из лямбды, которая получает подтверждение после запуска. Вот код этой лямбды:

export async function postAuth(event, context, callback) {
  var AWS = require('aws-sdk');
  var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({apiVersion: '2016-04-18'});

  var params = {
    GroupName: process.env.S3_GROUP_NAME,
    UserPoolId: event.userPoolId,
    Username: event.userName
  };

  cognitoidentityserviceprovider.adminAddUserToGroup(params, function(err, data) {
    if (err) console.log("Error");
    else     console.log("Success");
  });

  console.log("Executed.");

  context.succeed(event);

}

Я точно знаю, что эта лямбда запускается, потому что я вижу, что "выполнено" регистрируется в CloudWatch. Тем не менее, вызов adminAddUserToGroup, похоже, не проходит вообще, так как ни сообщение об ошибке, ни сообщение об успехе не регистрируются.

Причина, по которой я пытаюсь это сделать, заключается в том, что я могу предоставить группам разные роли для доступа к внутренним ресурсам. Например, я мог бы иметь группу Admin с ролью CanWriteToS3 и группу Customer с ролью CanReadFromS3 и добавлять или удалять пользователей из групп по мере необходимости.

Я подозреваю, что одной из проблем этой лямбды является то, что ей не хватает правильных разрешений для добавления и удаления пользователей из группы.

Это роль, придаваемая лямбде:

GroupManagementRole:
  Type: AWS::IAM::Role
  Properties:
    RoleName: GroupManagementRole
    AssumeRolePolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Effect: "Allow"
          Principal:
            Service: [lambda.amazonaws.com]
          Action: sts:AssumeRole
    Policies:
      - PolicyName: "GroupManagementPolicy"
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Action:
                - logs:CreateLogGroup
                - logs:CreateLogStream
                - logs:PutLogEvents
              Resource: 
                - 'Fn::Join':
                  - ':'
                  -
                    - 'arn:aws:logs'
                    - Ref: 'AWS::Region'
                    - Ref: 'AWS::AccountId'
                    - 'log-group:/aws/lambda/*:*:*'
            - Effect: "Allow"
              Action: ["cognito-idp:AdminAddUserToGroup", "cognito-idp:AdminRemoveUserFromGroup"]
              Resource:
                Fn::Join:
                   - ""
                   - - "arn:aws:cognito-idp:us-east-1:XXXXXXXXXXX:userpool/us-east-1_XXXXXXX/*"

Я не уверен, должен ли я использовать arn пула пользователей cognito для ресурса, но я искал в Интернете и не могу найти никакой документации по ARN групп пула пользователей cognito.

Какова бы ни была проблема, я не могу ее диагностировать, так как мой звонок на adminAddUserToGroup, похоже, не проходит вообще.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Основная проблема заключается в том, что вы определяете свою функцию как асинхронную. Если вы определяете асинхронную функцию, вы не должны использовать обратный вызов в теле.

Пожалуйста, убедитесь, что вы используете версии обещаний в вашем теле функции.

try {
    await cognitoISP.adminAddUserToGroup(params).promise();
} catch (error) {
    console.error(error);
}

Как это

0 голосов
/ 03 июля 2018

Все выглядит хорошо, кроме ресурсов.

Вам необходимо указать Userpool в следующем формате: ARN: AWS: Cognito-IDP: РЕГИОН: ACCOUNT_ID: userpool / USER_POOL_ID

Я делаю то же самое, но использую Resource: *.

Проверьте, работает ли Resource: * или нет. Таким образом, вы сможете подтвердить проблемную область.

...