Kibana
Kibana是一个非常流行的开源可视化工具,用来操作Elastic search。在AWS ES domain上,你可以看到一个kibana的link
image.png但是当你点开这个link,想要使用kibana的时候,就会出现一个error:
{
"Message": "User: anonymous is not authorized to perform: es:ESHttpGet"
}
以上错误的意思很明显:
匿名user没有权限去执行es:ESHttpGet
为什么会有这种错误?
我当前不是已经登录了一个user, 为什么会是匿名user呢?原因是当你直接点开kibana的link,相当于给es domain发了一个HTTPs请求
GET https://EShostName/_plugin/kibana/
你发送这个请求的时候直接使用了浏览器,肯定是匿名的,而且是一个GET请求,因此这个报错非常make sense, 一个匿名的用户没有权限执行es:ESHttpGet请求。
如何Access kinbana
其实就是说如何有权限给GET https://EShostName/_plugin/kibana/
发请求?
每一种AWS资源,都可以给自己配置access controll policy,去限制其他资源或者其他Role对自己的访问。当然Elatsic search也是一样
image.png我们可以通过上图红框标明的位置去修改当前这domain的access controll policy。
ES提供了很多policy帮助你controll access to your cluster:
- Resource-based Policies
- Identity-based Policies
- IP-based Policies
https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-ac.html#es-ac-types-ip
这里我们需要使用IP-based Policies
进行access kibana的controll。
IP-based Policies
这种policy限制只有一个或者多个IP地址可以access cluster。这种policy最大的优势是允许unsign
的request发往cluster。其实就是任何匿名User,只要给ES发请求的IP地址在IP-based Policies
的white list中,就可以给ES发请求。
这种policy对ES来说非常的便捷,因为ES中基本上所有的操作都是通过HTTP请求实现。
如何配置kibna的access?
对于kibana我们选择使用IP-based Policies
, 因为本身kibana并不能支持IAM Role、User
可以将下面的policy配置给cluster domain:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"es:ESHttp*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.0.2.0/24"
]
}
},
"Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*"
}
]
}
上买的policy允许IP地址在IpAddress中的匿名user发任何ES HTTP请求到test-domain中。
如果我们将这个policy配置给test-domain domain,那么就以为这个匿名用户可以发ES GET请求了,那么此时你再打开kibana的link(其实就是给ES发GET请求)就可以成功了。
网友评论