IAM 角色与 IAM 用户无法调用认知列表用户



我正在处理一个无服务器项目,当我调用本地并使用我的~/.aws/credentials中的凭据(对应于具有管理员策略的用户(时,代码会正确执行,不会出现任何安全问题。当我用假定的角色运行lambda时,它会给出以下错误:

UnrecoguedClientException:请求中包含的安全令牌无效。

如果我对管理用户的凭据进行硬编码并在lambda中运行,它就可以正常工作。因此,很明显,lambda在向ListUsers调用Cognito时所扮演的IAM角色存在一些问题。我已经给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不是可选的,需要包含在内。这就是答案。

最新更新