Node.js 如何从lambda访问cognito联邦标识中标识的数据集

Node.js 如何从lambda访问cognito联邦标识中标识的数据集,node.js,amazon-web-services,aws-lambda,serverless-framework,Node.js,Amazon Web Services,Aws Lambda,Serverless Framework,让我从我试图实现的目标的总体描述开始。我正在使用Lambda、Cognito(联邦身份)、API网关等构建一个无服务器API。我正在使用aws_iam作为API网关中的授权者。在某些端点中,我需要访问例如用户电子邮件或用户名或其他内容,以便在响应中将其发送回(也包括未发出请求的用户的数据)。我想我正在寻找某种对身份池的“管理员”访问,这样我就可以基于cognitoIdentityId检索数据 现在在我的例子中,这些数据存储在Cognito中的一个数据集中。问题是,如何从Lambda函数(node

让我从我试图实现的目标的总体描述开始。我正在使用Lambda、Cognito(联邦身份)、API网关等构建一个无服务器API。我正在使用aws_iam作为API网关中的授权者。在某些端点中,我需要访问例如用户电子邮件或用户名或其他内容,以便在响应中将其发送回(也包括未发出请求的用户的数据)。我想我正在寻找某种对身份池的“管理员”访问,这样我就可以基于cognitoIdentityId检索数据

现在在我的例子中,这些数据存储在Cognito中的一个数据集中。问题是,如何从Lambda函数(node.js)访问这些数据?这是一个好办法吗?我应该使用其他东西而不是数据集吗?有没有一个有效的例子

如有必要,我很乐意提供更多细节

谢谢

编辑#1:

以下是lambda函数的代码:

module.exports.getDataSet = (event, context, callback) => {
    console.log("event: " + JSON.stringify(event));

    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
        IdentityPoolId: IDENTITY_POOL_ID
    });

    try {
        AWS.config.credentials.get(function() {
            var client = new AWS.CognitoSync();

            var params = {
                DatasetName: 'userinfo',
                IdentityId: event.requestContext.identity.cognitoIdentityId,
                IdentityPoolId: IDENTITY_POOL_ID
            };
            client.listRecords(params, function (err, data) {
                if (err) {
                    console.log(JSON.stringify(err));
                } else {
                    console.log(data);    
                }
            });
        });
    } catch (ex) {
        callback(ex);
    }
};
这就是我在调用
listRecords
时在
err
中得到的结果:

{
“消息”:“配置中缺少凭据”,
“代码”:“CredentialsError”,
“时间”:“2017-05-26T08:42:39.298Z”,
“请求ID”:“46712a9b-41ef-11e7-9e3c-074AFB3349”,
“状态代码”:400,
“可检索”:错误,
“retryDelay”:21.688148977111666,
“原始错误”:{
“消息”:“无法从CognitoIdentityCredentials加载凭据”,
“代码”:“CredentialsError”,
“时间”:“2017-05-26T08:42:39.298Z”,
“请求ID”:“46712a9b-41ef-11e7-9e3c-074AFB3349”,
“状态代码”:400,
“可检索”:错误,
“retryDelay”:21.688148977111666,
“原始错误”:{
“消息”:“此标识池不支持未经身份验证的访问。”,
“代码”:“NotAuthorizedException”,
“时间”:“2017-05-26T08:42:39.298Z”,
“请求ID”:“46712a9b-41ef-11e7-9e3c-074AFB3349”,
“状态代码”:400,
“可检索”:错误,
“retryDelay”:21.688148977111666
}
}
}

编辑#2:

通过移除

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: IDENTITY_POOL_ID
});

从代码中,将
amazoncgnitoradonly
策略添加到调用lambda的角色。

首先,lambda函数需要知道调用方的Cognito标识。in-API网关包含Cognito id,您可以将其放入发送给Lambda函数的有效负载中,或者使用Lambda代理集成并自动包含它


一旦在Lambda中有了Cognito id,就可以使用它从Cognito Sync检索关联的数据集。您可以使用IAM策略,比如授予Lambda函数在Cognito Sync上调用ListRecords API的权限(这使您能够访问数据集)。

谢谢,我已经编辑了这个问题。似乎还是有什么不对劲,但我搞不清楚到底是什么。错误中提到的凭据是什么?在哪里可以买到?