【发布时间】:2018-08-15 14:22:54
【问题描述】:
我正在尝试签署我们对 ElasticSearch 的所有 AWS 调用,但响应始终是;
User: anonymous is not authorized to perform: es:ESHttpGet on resource:
我尝试了多个密钥对和 IAM 用户。
我们 PHP 中的调用是使用官方 elasticsearch-php client 进行的,所有请求都使用找到的连接器 here 进行签名。
下图是我们如何构建 ElasticSearch 客户端并应用签名中间件;
$credentials = new Credentials('<KEY>', '<SECRET>');
$signature = new SignatureV4('es', 'eu-central-1');
$middleware = new AwsSignatureMiddleware($credentials, $signature);
$defaultHandler = ESClientBuilder::defaultHandler();
$awsHandler = $middleware($defaultHandler);
$clientBuilder = ESClientBuilder::create();
$clientBuilder
->setHandler($awsHandler)
->setHosts(['<URL>']);
$this->_client = $clientBuilder->build();
作为参考附加到我们试图访问的 elasticsearch 实例的策略是;
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<IAM_USER>"
},
"Action": "es:*",
"Resource": "<RESOURCE>/*"
}
]
}
其他信息;
- 我们使用的是 Laravel 框架,版本 5.4.7
- Elasticsearch 客户端版本 5.3.2
【问题讨论】:
-
你能显示你正在发出的 GET 请求吗?
-
你设法让它工作了吗?你能分享一些信息吗?
标签: php amazon-web-services elasticsearch laravel-5