如何解决IAM角色vs IAM用户无法调用Cognito ListUsers
我正在处理一个无服务器项目,当我调用local并在〜/ .aws / credentials中使用与具有管理员策略的用户相对应的凭据时,代码可以正确执行而没有任何安全问题。当我以假定的角色运行lambda时,会出现以下错误:
UnrecognizedClientException:请求中包含的安全令牌无效。
如果我对管理员用户的凭据进行硬编码并在lambda中运行,则可以正常工作。因此,很明显,我的IAM角色存在一些问题,lambda会在调用Cognito到ListUsers时承担该问题。我已经给IAM角色提供了一个管理员策略,仍然给出了相同的例外,角色与用户之间发生了什么,以及为什么角色不能调用cognito ListUsers?
是否需要信任关系?与具有相同访问策略的用户相比,角色还需要其他功能吗?这让我发疯了
var params = {
UserPoolId: process.env.userPoolId,AttributesToGet: [
'email','sub'
],Filter : 'email ^= \"' + email + '\"'
};
return new Promise((resolve,reject) => {
AWS.config.update({
region : process.env.AWS_REGION,accessKeyId : process.env.AWS_ACCESS_KEY_ID,secretAccessKey : process.env.AWS_SECRET_ACCESS_KEY
});
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
cognitoidentityserviceprovider.listUsers(params,(err,data) => {
if (err) {
console.error(err);
reject(err);
} else {
var users = [];
for (const cognitoUser of data.Users) {
var user = {};
for (const attribute of cognitoUser.Attributes) {
switch(attribute.Name) {
case 'sub':
user.id = attribute.Value;
break;
case 'email':
user.email = attribute.Value;
break;
default:
}
}
users.push(user);
}
resolve(users);
}
});
});
解决方法
好的,因此,当您使用STS角色时,SessionToken不是可选的,需要包含在内。这就是答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。