Aws lambda IAM角色与IAM用户可以';t调用cognitolistusers

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角

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

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

如果我硬编码我的管理员用户的凭据并在lambda中运行它,它就可以正常工作。因此,很明显,lambda在调用Cognito到ListUsers时假设我的IAM角色存在一些问题。我已经给了IAM角色一个管理员策略,仍然给出了相同的例外,角色vs用户发生了什么,为什么角色不能调用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不是可选的,需要包括在内。这就是答案