我試圖向受IAM訪問策略保護的AWS Elasticsearch域發出HTTP請求。我需要sign這些請求才能被AWS授權。 我使用Jest,而這又使用Apache HttpComponents Client。使用Apache HttpComponents簽署AWS HTTP請求客戶端
這似乎是一個常見的用例,我想知道是否存在某種類型的庫,我可以在Apache HttpComponents Client上使用它來簽署所有請求。
我試圖向受IAM訪問策略保護的AWS Elasticsearch域發出HTTP請求。我需要sign這些請求才能被AWS授權。 我使用Jest,而這又使用Apache HttpComponents Client。使用Apache HttpComponents簽署AWS HTTP請求客戶端
這似乎是一個常見的用例,我想知道是否存在某種類型的庫,我可以在Apache HttpComponents Client上使用它來簽署所有請求。
我想我找到了! :)
該項目似乎完全符合我的要求:aws-signing-request-interceptor,描述爲「用於簽署AWS請求的Apache客戶端請求攔截器,最初創建用於使用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();
這並不在異步請求的情況下工作。
更新:
忽略我以前的評論。它增加了對異步請求攔截過之後的工作原理:
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;
}
};
是的,這也爲我工作:) – panipsilos
Eric,你好我下面你所提供的鏈接GitHub的。我們正面臨禁止的錯誤。另一個問題是在正常的客戶端我們通過彈性搜索端點。但在這裏,我們只傳遞服務名稱和區域。你能否提供示例代碼或指導來解決我們的問題。 –
Hi @MohanShanmugam。禁止的錯誤可能是由於訪問策略配置錯誤或憑據錯誤所致。我在答案中添加了一個使用示例。希望這可以幫助。 –