Я використовую пули користувачів AWS Congito для управління обліковими записами з пулом Cognito Identity, який має цей пул користувачів як постачальник ідентичності. Я використовую це для контролю доступу до API через шлюз API, який надсилає запити до Lambda. Моя лямбда реалізована з Java 8 за допомогою Micronaut. Все це працює чудово.
У 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;
}
Що повертається у назві рядка Id Cognito identId. Щось на зразок цього:
us-east-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx
Я хотів би або ввійти в систему фактичного входу користувача, або принаймні мати якийсь спосіб перетворити identId у логін при необхідності.
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: у вас немає доступу до цієї ідентичності (Служба: CognitoIdentity, код коду: 400, ідентифікатор запиту: 64e36646-612b-4985-91d1-82aca770XXXX)
Спроба зробити це через CLI дає подібний результат:
aws когніто-ідентичність пошуку-ідентичність розробника --identity-id us-east-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx --identity-pool-id us-east-1: xxxx0aa1-89f9-4418-be04- 7e83c838xxxx - max-результати = 10
Під час виклику операції LookupDeveloperIdentity виникла помилка (NotAuthorizedException): у вас немає доступу до цієї ідентичності
Я переконався, що створена політика IAM повинна бути в змозі впоратися з цим, і коли я спробую це з тією роллю, яка не має цієї політики, я отримую іншу помилку
{
"Effect": "Allow",
"Action": [
"cognito-identity:LookupDeveloperIdentity"
],
"Resource": [
"arn:aws:cognito-identity:us-east-1:##########:identitypool/us-east-1:xxxx0aa1-89f9-4418-be04-7e83c838xxxx"
]
}
Тож питання зводиться до:
- Це найкращий спосіб отримати ім’я користувача пулу користувачів з ідентифікатора пулу ідентифікаторів?
- Якщо це - що я роблю неправильно?
- Якщо це не так - який кращий спосіб зробити це?
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.