我正在尝试从一个被触发的Lambda函数中,将用户a添加到Cognito用户池组中。以下是该Lambda函数的代码:
我知道这个lambda被触发了,因为我可以在CloudWatch上看到“executed”的日志。然而,调用
我尝试做这件事的原因是为了授予组不同的角色来访问后端资源。例如,我可以有一个名为
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被触发了,因为我可以在CloudWatch上看到“executed”的日志。然而,调用
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作为资源,但我已经在网上搜索了很久,没有找到任何有关Cognito用户池组ARN的文档。
无论问题是什么,由于我的调用adminAddUserToGroup
似乎完全没有响应,所以我无法诊断它。
SignUp()
方法时,我将user_permission的值与其他参数一起传递到参数对象中。有关如何传递自定义属性的更多信息,请参见此链接 - https://aws.amazon.com/blogs/mobile/aws-amplify-adds-support-for-custom-attributes-in-amazon-cognito-user-pools/ - Anjan Biswas