이 사용자 풀이 자격 증명 공급자 인 Cognito 자격 증명 풀을 사용하여 계정 관리에 AWS Congito 사용자 풀을 사용하고 있습니다. 이것을 사용하여 요청을 Lambda에 보내는 API 게이트웨이를 통해 API에 대한 액세스를 제어하고 있습니다. My Lambda는 Micronaut를 사용하여 Java 8로 구현됩니다. 이 모든 것이 잘 작동합니다.
Lambda Principal
에서 HttpRequest
: 에서 이름을 얻었 습니다 .
protected String resolveUser( HttpRequest request ){
String ret = null;
Optional<Principal> principal = request.getUserPrincipal();
if( principal.isPresent() ){
ret = principal.get().getName();
}
if( ret == null || ret.length() == 0 ){
ret = "unknown";
}
return ret;
}
Cognito identityId의 문자열 이름으로 돌아 오는 내용입니다. 이 같은:
us-east-1 : xxxxe650-53f4-4cba-b553-5dff42bexxxx
실제 사용자 로그인을 기록하거나 필요에 따라 identityId를 로그인으로 변환하는 방법이 적어도 있습니다.
LookupDeveloperIdentity의 API 호출은 이것에 대해 갈 수있는 올바른 방법이 될 것으로 보인다, 그러나 나는 일에 그것을 얻을 수 없어요.
Java 및 AWS Java SDK 2로이 작업을 수행하려고합니다.
protected String loadUsername( String user ){
String ret = "unknown:"+user;
CognitoIdentityClient cognito = CognitoIdentityClient.create();
LookupDeveloperIdentityRequest request = LookupDeveloperIdentityRequest.builder()
.identityPoolId( identityPoolId )
.identityId( user )
.build();
LookupDeveloperIdentityResponse response = cognito.lookupDeveloperIdentity( request );
List<String> identifiers = response.developerUserIdentifierList();
if( identifiers != null && identifiers.size() > 0 ){
ret = identifiers.get( 0 );
}
return ret;
}
예외를 던지다
software.amazon.awssdk.services.cognitoidentity.model.NotAuthorizedException :이 ID에 액세스 할 수 없습니다 (서비스 : CognitoIdentity, 상태 코드 : 400, 요청 ID : 64e36646-612b-4985-91d1-82aca770XXXX)
CLI를 통해이를 시도하면 비슷한 결과가 나타납니다.
AWS 인식-식별자-개발자-식별-식별 ID us-east-1 : xxxxe650-53f4-4cba-b553-5dff42bexxxx-식품 풀 ID us-east-1 : xxxx0aa1-89f9-4418-be04- 7e83c838xxxx-최대 결과 = 10
LookupDeveloperIdentity 작업을 호출 할 때 오류 (NotAuthorizedException)가 발생했습니다.이 ID에 액세스 할 수 없습니다
적절한 IAM 정책이이를 처리 할 수 있는지 확인했으며이 정책이없는 역할로 시도하면 다른 오류가 발생합니다.
{
"Effect": "Allow",
"Action": [
"cognito-identity:LookupDeveloperIdentity"
],
"Resource": [
"arn:aws:cognito-identity:us-east-1:##########:identitypool/us-east-1:xxxx0aa1-89f9-4418-be04-7e83c838xxxx"
]
}
따라서 질문은 다음과 같이 요약됩니다.
- 이것이 자격 증명 풀 ID에서 사용자 풀 사용자 이름을 얻는 가장 좋은 방법입니까?
- 그렇다면-내가 뭘 잘못하고 있습니까?
- 그렇지 않은 경우-더 좋은 방법은 무엇입니까?
Are you sure you are using the credentials from the account which owns the identity pool you are requesting lookupDeveloperIdentity for?
- forums.aws.amazon.com/thread.jspa?threadID=231354은 나에게는이 사용자 권한이 아닌 IAM 역할 문제처럼 보인다.