【发布时间】:2021-02-12 08:43:09
【问题描述】:
我正在开发一个无服务器项目,当我调用本地并使用我的 ~/.aws/credentials 中对应于具有管理员策略的用户的凭据时,代码可以正确执行而没有任何安全问题。当我使用假定角色运行 lambda 时,它会出现以下错误:
UnrecognizedClientException:请求中包含的安全令牌无效。
如果我硬编码我的管理员用户的凭据并在 lambda 中运行它,它可以正常工作。所以很明显,我的 IAM 角色存在一些问题,当调用 Cognito 到 ListUsers 时,lambda 假设了这些问题。我已经为 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);
}
});
});
【问题讨论】:
标签: aws-lambda amazon-cognito amazon-iam serverless-framework