首页 文章

如何将用户从AWS Lambda添加到Cognito用户池组?

提问于
浏览
2

我正在尝试将一个用户a添加到来自lambda的cognito用户池组,该lambda会在确认后触发 . 这是lambda的代码:

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);

}

我知道这个lambda会被触发,因为我可以看到"executed"登录到CloudWatch . 但是,对 adminAddUserToGroup 的调用似乎根本没有通过,因为错误消息和成功消息都没有记录 .

我尝试这样做的原因是我可以授予组不同的角色来访问后端资源 . 例如,我可以拥有一个名为 Admin 的组 CanWriteToS3 和一组 Customer ,其角色为 CanReadFromS3 ,并根据需要在组中添加或删除用户 .

我怀疑这个lambda的一个问题是它没有正确的权限来添加和删除组中的用户 .

这是附加到lambda的角色:

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/*"

我不确定我是否应该使用cognito用户池的资源,但我在线搜索,我找不到任何关于认知用户池组ARN的文档 .

无论问题是什么,我都无法诊断,因为我对 adminAddUserToGroup 的呼吁似乎根本没有通过 .

2 回答

  • 0

    主要问题是您将函数定义为Async . 如果定义了异步函数,则不应在正文中使用回调 .

    请确保在函数体中使用promise版本 .

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

    像这样

  • 3

    除资源外,一切看起来都很好 .

    您需要以下列格式提供Userpool:arn:aws:cognito-idp:REGION:ACCOUNT_ID:userpool / USER_POOL_ID

    我做同样的事情,但使用资源:* .

    如果资源:*工作与否,请查看 . 这样您就可以确认问题区域 .

相关问题