使用Apache HttpComponents Client签名AWS HTTP请求

问题描述 投票:12回答:3

我正在尝试向受IAM访问策略保护的AWS Elasticsearch域发出HTTP请求。我需要sign这些请求,才能由AWS授权。我正在使用Jest,而依次使用Apache HttpComponents Client

这似乎是一个常见的用例,我想知道是否存在某种可以在Apache HttpComponents Client之上使用的库来签署所有请求。

java amazon-web-services elasticsearch apache-httpcomponents jest
3个回答
13
投票

我想我找到了! :)

[该项目似乎完全符合我的要求:aws-signing-request-interceptor,描述为“ Apache客户端的请求拦截器,用于签署对AWS的请求。最初是为了通过Jest客户端支持AWS的Elasticsearch Service而创建的。”

编辑:我forked the project可以满足我的需要(Java 7,临时STS凭据),并且效果很好。

这里是用法示例(此处没有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();

2
投票

在异步请求的情况下不起作用。

更新:

忽略我之前的评论。在为异步请求添加拦截器之后,它也可以工作:

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;
                }
            };

0
投票

如何在kafkaconnect ElasticSearch中使用拦截器,它在jar中作为Java应用程序运行。

关于,萨利姆

© www.soinside.com 2019 - 2024. All rights reserved.