Я пытаюсь подключиться к Amazon Kendra для запроса уже созданного источника данных, я получаю некоторую unmarshall ошибку из SDK

Вот фрагмент кода:

String strIndexRole = "arn:aws:iam::<my acct no>:role/Kendra-CloudwatchRole";
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
        .withCredentials(new DefaultAWSCredentialsProviderChain())
        .withEndpointConfiguration(new EndpointConfiguration("console.aws.amazon.com/kendra/home?region=us-east-1", "us-east-1"))
        .build();
AssumeRoleRequest roleRequest = new AssumeRoleRequest()
        .withRoleArn(strIndexRole).withDurationSeconds(7200);
AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);

Это исключение:

Я думаю, что часть проблемы, с которой вы столкнулись, заключается в том, как вы настраиваете AWSSecurityTokenService. На эту проблему также указывает следующая строка в трассировке стека исключений, которую вы опубликовали выше.


person Kedar Moghe    schedule 09.07.2020    source источник
comment
Выше приведено исключение, которое я получил сейчас, с этими изменениями: Исключение в основном потоке com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException: токен безопасности, включенный в запрос, недействителен (Service: AWSSecurityTokenService; Код состояния: 403; Код ошибки: InvalidClientTokenId; идентификатор запроса: 2b9ad8fd-97ee-4cc3-9d2e-13e616fdcc8f; прокси: null) на com.amazonaws.http.AmazonHttpClient $ RequestExecutor.handleErrorResponse (AmazonHttpClient ).java:   -  person Kedar Moghe    schedule 15.07.2020
comment
15: 38: 30.301 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Соединение выпущено: [id: 0] [route: {s} - ›https://console.aws.amazon.com:443 ] [всего доступно: 1; выделено маршрутов: 1 из 50; всего выделено: 1 из 50] Исключение в потоке main com.amazonaws.SdkClientException: невозможно демаршалировать ответ (ParseError в [row, col]: [19,24] Сообщение: ссылка на состояние объекта должна заканчиваться разделителем ';' .). Код ответа: 200, текст ответа: OK at com.amazonaws.http.AmazonHttpClient $ RequestExecutor.handleResponse (AmazonHttpClient.java:1750) at com.amazonaws.http.AmazonHttpClient $ RequestExecutor.handleSuccessHttp. amazonaws.http.AmazonHttpClient $ RequestExecutor.executeOneRequest (AmazonHttpClient.java:1368) в com.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeHelper ($ AmazonHttpExecutor.executeHelper ($ AmazonHttpExecutor.executeHelper) ($ AmazonHttpClient.java:11pdfClient). java: 802) на com.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeWithTimer (AmazonHttpClient.java:770) на com.amazonaws.http.AmazonHttpClient $ RequestExecutor.execute (AmazonHttpClient.Amazon.java:7:7 $ RequestExecutor.access $ 500 (AmazonHttpClient.java:704) на com.amazonaws.http.AmazonHttpClient $ RequestExecutionBuilderImpl.execute (AmazonHttpClient.java:686) на com.amazonaws.http.AmazonHttpClient50 .amaz onaws.http.AmazonHttpClient.execute (AmazonHttpClient.java:530) по адресу com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.doInvoke (AWSSecurityTokenServiceClient.javaTokenServiceClient.javaTokenServiceClient.javaTokenSecurity.Java: 1686) по адресу com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.invoke (AWSSecurityTokenServiceClient.java:1675) по адресу com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.executeAssumecurity.Client.AwSecurityTokenServiceClient. .assumeRole (AWSSecurityTokenServiceClient.java:561) в com.aws.kendra.trial.SampleKendraTrial.main (SampleKendraTrial.java:73) Вызвано: javax.xml.stream.XMLStreamException: ParseError at [row, col]: [19, 24] Сообщение: ссылка на состояние объекта должна заканчиваться на ';' разделитель. на com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next (XMLStreamReaderImpl.java:604) на com.sun.xml.internal.stream.XMLEventReaderImpl.peek (XMLEventReaderImpl.java:276) на com.amazonaws .transform. StaxUnmarshallerContext.nextEvent (StaxUnmarshallerContext.java:220) в com.amazonaws.services.securitytoken.model.transform.AssumeRoleResultStaxUnmarshaller.unmarshall (AssumeRoleResult.StaxUnmarshaller. AssumeRoleResultStaxUnmarshaller.java:28) по адресу com.amazonaws.http.StaxResponseHandler.handle (StaxResponseHandler.java:106) по адресу com.amazonaws.http.StaxResponseHandler.handle (StaxResponse.java.Handler.handle (StaxResponse. .handle (AwsResponseHandlerAdapter.java:69) at com.amazonaws.http.AmazonHttpClient $ RequestExecutor.handleResponse (AmazonHttpClient.java:1726) ... еще 16   -  person Kedar Moghe    schedule 15.07.2020


Ответы (1)


См. это, чтобы узнать, как принять на себя роль IAM, получить временные учетные данные и вызвать службу AWS (здесь S3 - это служба AWS, вызываемая с использованием временных учетных данных) на Java. Вы можете использовать ту же концепцию для вызова API Kendra. Из приведенного выше примера вы можете понять, как создать BasicSessionCredentials и использовать его для создания KendraClient (аналогично тому, как клиент AmazonS3 был построен с использованием AmazonS3ClientBuilder в приведенном выше примере). После создания KendraClient вы можете обратиться к этому примеру о том, как запросить ваш индекс Кендры.

at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.assumeRole(AWSSecurityTokenServiceClient.java:561)

Исключение в главном потоке com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException: токен безопасности, включенный в запрос, недействителен (служба: AWSSecurityTokenService; код состояния: 403; код ошибки: InvalidClientTokenId; идентификатор запроса: 2b9ad8fd3-9dee-4 -13e616fdcc8f; Прокси: null) на com.amazonaws.http.AmazonHttpClient $ RequestExecutor.handleErrorResponse (AmazonHttpClient.java:1811)

person Saurabh    schedule 14.07.2020