Aws lambda IAM角色与IAM用户可以';t调用cognitolistusers
我正在处理一个无服务器项目,当我调用local并使用~/.aws/credentials中的凭据时,这些凭据对应于具有管理员策略的用户,代码正确执行,没有任何安全问题。当我使用假定的角色运行lambda时,会出现以下错误: UnrecognizedClientException:请求中包含的安全令牌无效 如果我硬编码我的管理员用户的凭据并在lambda中运行它,它就可以正常工作。因此,很明显,lambda在调用Cognito到ListUsers时假设我的IAM角色存在一些问题。我已经给了IAM角色一个管理员策略,仍然给出了相同的例外,角色vs用户发生了什么,为什么角色不能调用cognito ListUsers 是否需要信任关系?与具有相同访问策略的用户相比,角色还需要什么?这快把我逼疯了Aws lambda IAM角色与IAM用户可以';t调用cognitolistusers,aws-lambda,amazon-cognito,amazon-iam,serverless-framework,Aws Lambda,Amazon Cognito,Amazon Iam,Serverless Framework,我正在处理一个无服务器项目,当我调用local并使用~/.aws/credentials中的凭据时,这些凭据对应于具有管理员策略的用户,代码正确执行,没有任何安全问题。当我使用假定的角色运行lambda时,会出现以下错误: UnrecognizedClientException:请求中包含的安全令牌无效 如果我硬编码我的管理员用户的凭据并在lambda中运行它,它就可以正常工作。因此,很明显,lambda在调用Cognito到ListUsers时假设我的IAM角色存在一些问题。我已经给了IAM角
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不是可选的,需要包括在内。这就是答案