9

IAM erişim ilkesi tarafından korunan bir AWS Elasticsearch etki alanına HTTP istekleri yapmaya çalışıyorum. AWS tarafından yetkilendirilmeleri için sign bu isteklere ihtiyacım var. Jest kullanıyorum, bu da Apache HttpComponents Client kullanın.Apache HttpComponents Client ile AWS HTTP istekleri imzalama Client

Bu yaygın bir kullanım durumu gibi görünüyor ve Apache HttpComponents Client üst kısmında tüm istekleri imzalamak için kullanabileceğim bir çeşit kütüphane var mı diye merak ediyordum.

cevap

10

Sanırım onu ​​buldum! :)

Bu proje tam olarak istediğimi yapıyor: , "AWS isteğini imzalayan Apache İstemcisi için Interceptor talep et. Orijinal olarak Jest istemcisini kullanarak AWS 'Elasticsearch Service'i desteklemek için oluşturuldu.".

Düzenleme: I forked the project gereksinimlerime uygun (Java 7, geçici STS kimlik bilgileri) ve güzel çalışır.

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(); 
+0

Evet, benim için de çalışıyor :) – panipsilos

+0

Merhaba Eric sana sağladığı github bağlantıyı takip ediyorum. Yasak hatalarla karşı karşıyayız. Başka bir soru normal jest istemcisinde elastik arama son noktasını geçiyoruz. Ama burada sadece hizmet adını ve bölgesini geçiyoruz. Sorunumuzu çözmek için örnek kod veya rehberlik sağlayabilir misiniz? –

+0

Merhaba @MohanShanmugam. Yasak hata, büyük olasılıkla erişim politikasının yanlış yapılandırılması veya hatalı kimlik bilgilerinden kaynaklanmaktadır. Cevapta bir kullanım örneği ekledim. Bu yardımcı olur umarım. –

1

Bu zaman uyumsuz isteği durumunda çalışmaz: Burada

(STS olmadan burada geçici kimlik) kullanımının bir örneğidir.

Güncelleme:

Önceki yorumun görmezden gel. Çok zaman uyumsuz istekleri için önleme ekledikten sonra çalışır:

final AWSSigningRequestInterceptor requestInterceptor = new AWSSigningRequestInterceptor(awsSigner); 
      factory = new JestClientFactory() { 
       @Override 
       protected HttpClientBuilder configureHttpClient(HttpClientBuilder builder) { 
        builder.addInterceptorLast(requestInterceptor); 
        return builder; 
       } 
       @Override 
       protected HttpAsyncClientBuilder configureHttpClient(HttpAsyncClientBuilder builder) { 
        builder.addInterceptorLast(requestInterceptor); 
        return builder; 
       } 
      }; 
İlgili konular