[英]How to access Kibana from Amazon elasticsearch service?
我創建了Amazon elasticsearch服務,並使用logstash將數據填充到其中,logstash已安裝在EC2實例上。 在Amazon彈性服務控制台頁面上,將有一個訪問Kibana的鏈接。
search-cluster_name-XXXXXXXXXXXXXXXXXXX.region_name.es.amazonaws.com/_plugin/kibana/
當我點擊鏈接時,瀏覽器拋出以下錯誤。
{"Message":"User: anonymous is not authorized to perform: es:ESHttpGet on resource: arn:aws:es:region_name:account_id:domain/cluster_name/_plugin/kibana/"}
我確定這與ES域的訪問策略有關。如何修改訪問策略,以便通過點擊指定的鏈接訪問Kibana?
您可以使用基於IAM和IP地址的訪問來設置訪問策略。 在這里看到我的答案 。 簡而言之:
arn:aws:iam::aws:policy/AmazonESFullAccess
策略的配置文件 這是一個示例策略(語句順序很重要!)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.168.1.0",
"192.168.1.1"
]
}
}
}
]
}
我用於那個名為aws-es-kibana的代理工具。 它會將您發送給aws kibana的所有請求簽名。
IAM配置:
我創建了具有編程訪問權限的新IAM用戶“elasticsearch_user”(我獲得了與該帳戶關聯的accessKeyId和secretAccessKey)。
Elasticsearch配置:
我創建了彈性搜索策略,允許新創建的IAM用戶訪問:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::{YOUR_AWS_ACCOUNT_ID}:user/elasticsearch_user"
]
},
"Action": "es:*",
"Resource": "arn:aws:es:eu-central-1:{YOUR_AWS_ACCOUNT_ID}:domain/{YOUR_ELASTICSEARCH_DOMAIN}/*"
}
]
}
從當地車站連接到kibana:
要從我的本地站(Windows)連接到kibana,我只需要輸入控制台:
SET AWS_ACCESS_KEY_ID=myAccessKeyId
SET AWS_SECRET_ACCESS_KEY=mySecretAccessKey
aws-es-kibana search-{PROTECTED_PART_OF_YOUR_ELASTICSEARCH_ENDPOINT}.eu-central-1.es.amazonaws.com
之后你應該代理訪問你的kibana: http : //127.0.0.1 :9200 / _plugin / kibana
您必須為elasticsearch集群配置訪問策略。 有兩種選擇:
選項1,使用基於IAM的訪問是更好的選擇:
kibana_user
的IAM用戶,具有編程訪問權限。 保存accessKeyId和secretAccessKey。 同時復制用戶的ARN 。 kibana_user
訪問kibana_user
。
kibana_user
的ARN 我認真推薦使用基於IP的訪問的第二個選項。 即使你有靜態IP,
唯一有意義的情況是,如果您使用自己的身份驗證方法和靜態IP運行自己的代理服務器。
在我的例子中,我有一個運行的nginx服務器,它已經可以訪問elasticsearch服務。 所以我所要做的就是在這個nginx上添加一個代理。 無需更改AWS IAM。
將其添加到/ etc / nginx / sites-enabled / elasticsearch
server {
listen 7777;
server_name 127.0.0.1 default_server;
access_log /var/log/nginx/elasticsearch.access.log;
location / {
auth_basic "My Super Secret Server";
auth_basic_user_file /etc/nginx/.elasticsearch_htpasswd;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass https://<your_server_here>.es.amazonaws.com/;
proxy_set_header Authorization "";
proxy_hide_header Authorization;
}
}
並重新啟動nginx。 然后你可以訪問kibana:
http://your_nginx_server_name.com:7777/_plugin/kibana/app/kibana#/dev_tools/console?_g=()
文件/etc/nginx/.elasticsearch_htpasswd
是標准的apache2 htaccess文件。 您可以在此處找到有關nginx的基本身份驗證的更多信息。
注意:基本身份驗證不是保護任何內容的推薦方法。 絕對不要在生產中使用它。
您可能需要具有基於IP的策略,並允許從特定IP(Kibana)訪問您的域。
其他選擇(除了改變訪問政策完全開放)將是簽署請求 - IIRC這幫助了我的朋友有類似的信息。
另請參見同一頁面上的“將本地Kibana服務器連接到Amazon Elasticsearch Service”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.