如何从lambda访问cognito联合身份的身份数据集

让我先从我想要实现的全面描述开始。 我正在使用Lambda,Cognito(联合身份validation),API网关等构build无服务器API。我正在使用aws_iam作为API网关中的授权者。 在某些端点,我需要访问例如用户的电子邮件或用户名或任何东西,所以我可以发回它的响应(也是没有提出请求的用户的数据)。 我想我正在寻找某种“pipe理”访问身份池,所以我可以检索基于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

{ "message": "Missing credentials in config", "code": "CredentialsError", "time": "2017-05-26T08:42:39.298Z", "requestId": "46712a9b-41ef-11e7-9e3c-074afafb3349", "statusCode": 400, "retryable": false, "retryDelay": 21.688148977111666, "originalError": { "message": "Could not load credentials from CognitoIdentityCredentials", "code": "CredentialsError", "time": "2017-05-26T08:42:39.298Z", "requestId": "46712a9b-41ef-11e7-9e3c-074afafb3349", "statusCode": 400, "retryable": false, "retryDelay": 21.688148977111666, "originalError": { "message": "Unauthenticated access is not supported for this identity pool.", "code": "NotAuthorizedException", "time": "2017-05-26T08:42:39.298Z", "requestId": "46712a9b-41ef-11e7-9e3c-074afafb3349", "statusCode": 400, "retryable": false, "retryDelay": 21.688148977111666 } } }

编辑#2:

通过删除解决

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

从代码中添加AmazonCognitoReadOnly策略到调用lambda的angular色。

首先,您需要Lambda函数知道调用者的Cognito身份。 API网关中的请求上下文包含Cognito ID,您可以将其放入发送到Lambda函数的有效内容中,或者使用Lambda代理集成并自动包含它。

一旦在Lambda中具有Cognito ID,就可以使用它从Cognito Sync中检索关联的数据集。 您可以使用像AmazonCognitoReadOnly这样的IAM策略为您的Lambda函数授予权限,以调用Cognito Sync上的ListRecords API(使您可以访问数据集)。