2

내가 성취하려는 것을 전반적으로 설명하겠습니다. 난 람다, Cognito (연합 신원), API를 게이트웨이 등 API를 게이트웨이에서 권한 부여로 aws_iam을 사용하여 사용하여 서버가없는 건물입니다. 일부 종단점에서는 사용자 전자 메일이나 사용자 이름 등을 액세스해야하므로 응답에서 다시 보낼 수 있습니다 (요청하지 않은 사용자의 데이터도 가능). 나는 cognitoIdentityId를 기반으로 데이터를 검색 할 수 있도록 ID 풀에 대한 일종의 "관리자"액세스를 찾고 있다고 생각합니다.람다에서 ID의 데이터 집합에 액세스하는 방법

내 경우,이 데이터는 Cognito의 데이터 세트에 저장됩니다. 문제는 람다 함수 (node.js)에서이 데이터에 어떻게 액세스 할 수 있습니까? 이것은 좋은 접근 방법입니까? 데이터 세트 대신 다른 것을 사용해야합니까? 어딘가에서 실제 예제가 있습니까?

필요한 경우 자세한 정보를 제공해 드리겠습니다.

감사

수정 # 1 : 여기

내 람다 함수의 코드입니다 :

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 } } }

,515,

EDIT # 2 :

코드로부터

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

를 제거하고, λ를 호출하는 역할에 AmazonCognitoReadOnly 정책을 추가함으로써 해결했다.

답변

0

먼저 람다 (Lambda) 기능에 알려진 호출자의 Cognito ID가 필요합니다. API 게이트웨이에있는 request context에는 Cognito ID가 포함되어 있습니다.이 ID는 람다 함수로 전송되는 페이로드에 넣거나 람다 프록시 통합을 사용하여 자동으로 포함 할 수 있습니다.

람다에 Cognito ID가 있으면 Cognito Sync에서 관련 데이터 세트를 검색하는 데 사용할 수 있습니다. AmazonCognitoReadOnly과 같은 IAM 정책을 사용하면 람다 함수에 Cognito Sync (데이터 세트에 대한 액세스 권한 제공)의 ListRecords API를 호출 할 수있는 권한을 부여 할 수 있습니다.

+0

감사합니다. 질문을 수정했습니다. 뭔가 이상한 것 같지만 정확하게 무엇인지 파악할 수 없습니다. 오류에 언급 된 자격 증명은 무엇입니까? 어디서 구할 수 있니? – gabo

+0

이제 알았어, 고마워. – gabo

관련 문제