Myślę, że znalazłem! :)
Ten projekt wydaje się zrobić dokładnie to, co chcę: aws-signing-request-interceptor, opisany jako „Żądanie Interceptor dla Klienta Apache że podpisującej żądanie AWS pierwotnie stworzony w celu wspierania AWS” Elasticsearch usługi przy użyciu klienta żartem”..
Edytuj: I forked the project w celu dopasowania do moich potrzeb (Java 7, tymczasowe poświadczenia STS) i działa dobrze.
Oto przykład użycia (tu bez STS tymczasowe poświadczenia):
String region = "us-east-1";
String service = "es";
String url = "???"; // put the AWS ElasticSearch endpoint here
DefaultAWSCredentialsProviderChain awsCredentialsProvider = new DefaultAWSCredentialsProviderChain();
final AWSSigner awsSigner = new AWSSigner(awsCredentialsProvider, region, service,() -> new LocalDateTime(DateTimeZone.UTC));
JestClientFactory factory = new JestClientFactory() {
@Override
protected HttpClientBuilder configureHttpClient(HttpClientBuilder builder) {
builder.addInterceptorLast(new AWSSigningRequestInterceptor(awsSigner));
return builder;
}
};
factory.setHttpClientConfig(new HttpClientConfig.Builder(url)
.multiThreaded(true)
.build());
JestClient client = factory.getObject();
Tak, to działa również dla mnie :) – panipsilos
Cześć Eric Mam następujący link GitHub dostarczonego przez Ciebie. Stoimy w obliczu zakazanego błędu. Kolejne pytanie to normalny klient, któremu przekazujemy elastyczny punkt końcowy wyszukiwania. Ale tutaj przekazujemy tylko nazwę usługi i region. Czy możesz podać przykładowy kod lub wskazówki, aby rozwiązać nasz problem? –
Witam @MohanShanmugam. Niedozwolony błąd jest prawdopodobnie spowodowany błędną konfiguracją lub błędnymi danymi uwierzytelniającymi dostęp. Dodałem przykład użycia w odpowiedzi. Mam nadzieję że to pomoże. –