このユーザープールをIDプロバイダーとして持つCognito IDプールでのアカウント管理にAWS Congitoユーザープールを使用しています。これを使用して、Lambdaにリクエストを送信するAPI Gatewayを介してAPIへのアクセスを制御しています。私のラムダはMicronautを使用してJava 8で実装されています。これらはすべて正常に機能しています。
ラムダでは、名前はのから取得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 cognito-identity lookup-developer-identity --identity-id us-east-1:xxxxe650-53f4-4cba-b553-5dff42bexxxx --identity-pool-id us-east-1:xxxx0aa1-89f9-4418-be04- 7e83c838xxxx --max-results = 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プール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ロールの問題のように見えます。