9

AWS ElasticsearchドメインへのHTTPリクエストをIAMアクセスポリシーで保護しようとしています。私はsignにAWSの承認を求めています。 私はJestを使用していますが、Apache HttpComponents Clientを使用しています。Apache HttpComponentsクライアントでAWS HTTPリクエストに署名する

これはよく使われているようですが、Apache HttpComponents Clientの上にすべてのリクエストに署名できるライブラリがあるかどうか疑問に思っていました。

答えて

10

私はそれを見つけたと思う! :)

aws-signing-request-interceptorと記載されています。「AWSのリクエストに署名するApache Clientのリクエストインターセプタ.Jastクライアントを使用したAWS 'Elasticsearch Service」をサポートするために作成されました。

編集:私のニーズ(Java 7、一時的なSTS資格情報)に合うようにI forked the project、それはうまく動作します。ここで

は(ここではSTS一時的な資格情報なし)の使用例です:

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

はい、それは私にとっても動作します:) – panipsilos

+0

こんにちはエリック、私はあなたが提供するgithubのリンクを次のようしています。私たちは禁じられた誤りに直面しています。別の質問は、通常の嫌がらせのクライアントで我々は弾性検索のエンドポイントを渡すことです。しかし、ここではサービス名と地域のみを渡しています。私たちの問題を解決するためのサンプルコードまたはガイダンスを提供できますか? –

+0

こんにちは@MohanShanmugam。禁止されたエラーは、おそらくアクセスポリシーの設定ミスや不正な資格情報によるものです。私は答えの使用例を追加しました。お役に立てれば。 –

1

これは、非同期要求の場合には動作しません。

更新:

私の前のコメントは無視してください。それはあまりにも、非同期リクエストのためのインターセプタを追加した後に動作します:

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; 
       } 
      }; 
関連する問題