我在一个带有Kibana插件的VPC中有一个AWS ElasticSearch集群。我正在努力实现两件事:
我对第二部分有意见。
我将认知身份验证配置到这个集群中:
我用域名和身份池拉了一个用户,然后用他们激活了Kibana认证。
此外,我还将访问策略更改为只允许来自认知角色的访问:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::000000000000:role/Cognito_KibanaUsersAuth_Role"
]
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:000000000000:domain/my-domain/*"
}
]
}在做这一切之前,我让VPC中的EC2实例可以自由地使用ElasticSearch。我读到,在我激活ES requests身份验证之后,我需要将我的请求签名到ElasticSearch,并且我这样做了:
region = 'us-west-2'
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service)
requests.get(es_url, auth=awsauth)(就像在这本指南里)
我得到了一个错误:User: anonymous is not authorized to perform: es:ESHttpGet。
我希望我的EC2在科尼托得到认证,这样我就可以在那里使用ES了。我怎样才能做到这一点?
发布于 2019-08-05 14:50:47
您必须授予EC2访问弹性搜索的权限。创建一个角色,允许访问弹性搜索域,然后将该角色分配给您的EC2实例。更新您的访问策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::000000000000:role/Cognito_KibanaUsersAuth_Role"
]
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:000000000000:domain/my-domain/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
EC2_ROLE_ARN_HERE
]
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:000000000000:domain/my-domain/*"
}
]
}发布于 2019-07-30 10:01:38
您正在尝试通过REST端点访问ES,而不是SDK。您需要将签名请求传递给SDK类,以访问您为签名请求提供的链接中描述的ES。
从elasticsearch导入Elasticsearch,从requests_aws4auth导入AWS4Auth导入boto3 例如,my-test-domain.us-east-1.es.amazonaws.com region = '‘#例如,us-west-1 service = ' es’凭据= boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key,credentials.secret_key,region,service) es= Elasticsearch(主机= {' host ':host,'port':443},http_auth = awsauth,use_ssl = True,verify_certs = True,connection_class = RequestsHttpConnection )
https://stackoverflow.com/questions/57257218
复制相似问题