AWS SDKを使用してエラスティック検索に接続しています。私はhttps://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-indexing.htmlに従っています
このトピックの他の質問は、許可の問題やelasticsearchへの書き込み中の問題のようなものでした。私にとって、書き込みはうまく機能していますが、読み取りだけでエラーが発生しています
POSTメソッドはすべて正常に機能し、インデックスを追加しています。同じ方法で検索のGETリクエストを作成しています
public void getIndexedRecords(String index,String type,String id,String documentJSON){
try {
String endpoint = host +"/" +index+"/_search" ;
// Builds the request. We need an AWS service, URI, HTTP method, and request
// body (in this case, JSON).
Request<?> request = new DefaultRequest<Void>(service);
request.setEndpoint(new URI(endpoint));
request.setHttpMethod(HttpMethodName.GET);
request.setContent(new ByteArrayInputStream(documentJSON.getBytes()));
// Retrieves our credentials from the computer. For more information on where
// this class looks for credentials, see
// http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html.
String accessKey = CommonUtils.getCommonProperty("accessKey", "");
String secretKey = CommonUtils.getCommonProperty("secretKey", "");;
AWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey);
// Signs the request using our region, service, and credentials. AWS4Signer
// modifies the original request rather than returning a new request.
AWS4Signer signer = new AWS4Signer();
signer.setRegionName(region);
signer.setServiceName(service);
signer.sign(request, creds);
request.addHeader("Content-Type", "application/json");
// Creates and configures the HTTP client, creates the error and response
// handlers, and finally executes the request.
ClientConfiguration config = new ClientConfiguration();
config.setProtocol(Protocol.HTTPS);
AmazonHttpClient client = new AmazonHttpClient(config);
System.out.println(client);
ExecutionContext context = new ExecutionContext(true);
ESAWSErrorHandler errorHandler = new ESAWSErrorHandler();
ESAWSResponseHandler<Void> responseHandler = new ESAWSResponseHandler<Void>();
client.requestExecutionBuilder().executionContext(context).errorResponseHandler(errorHandler).request(request)
.execute(responseHandler);
} catch (Exception e) {
e.printStackTrace();
}
}
しかし、403禁止エラーが表示されます。エンドポイントURLでCurl XGETを実行すると、結果が得られます。ここで何が悪いのですか?
com.amazonaws.http.AmazonzonClients.http.AmazonHttpClient $ RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1588)のcom.amazonawsでcom.amazonaws.AmazonServiceException:(Service:null; Status Code:403; Error Code:Forbidden; Request ID:null)。 http.AmazonHttpClient $ RequestExecutor.executeOneRequest(AmazonHttpClient.java:1258)at com.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeHelper(AmazonHttpClient.java:1030)at com.amazonaws.http.AmazonHttpClient $ RequestExecutor.doExecute(AmazonHttpClient.java: 742)com.amazonaws.http.AmazonHttpClient $ RequestExecutor.executeWithTimer(AmazonHttpClient.java:716)at com.amazonaws.http.AmazonHttpClient $ RequestExecutor.execute(AmazonHttpClient.java:699)at com.amazonaws.http.AmazonHttpClient $ RequestExecutor .access $ 500(AmazonHttpClient.java:667)at com.amazonaws.http.AmazonHttpClient $ RequestExecutionBuilderImpl。実行(AmazonHttpClient.java:649)
es:ESHttpGet
ESのポリシーで必要になると思います。
リファレンス:
Amazon Elasticsearch Serviceアクセス制御Amazon Elasticsearch Serviceドメインへのアクセスを制御し
ます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加