Как получить доступ к Kibana из сервиса Amazon elasticsearch?
Я создал сервис Amazon elasticsearch и заполнил его данными с помощью logstash, который был установлен на экземпляре EC2. На странице консоли Amazon elasticservice появится ссылка для доступа к 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 одним щелчком мыши на ссылка указана ?
5 ответов
Вы можете настроить политику доступа как с IAM, так и с доступом на основе IP-адресов. смотрите мой ответ здесь. Короче:
- экземпляр EC2 нуждается в профиле с
arn:aws:iam::aws:policy/AmazonESFullAccess
политика - политика должна включать два оператора: первый список IAM access, второй список IP access.
вот пример политики (порядок инструкций важен!)
{
"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:
Я создал политику 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. есть два варианта:
- настройка политики доступа на основе IAM
- белый список определенных IPs, с которых люди могут получить доступ к вашему экземпляру Kibana.
Вариант 1, используя доступ на основе IAM является лучшим вариантом:
- создайте пользователя IAM с именем
kibana_user
программный доступ. Сохраните accessKeyId и secretAccessKey. Также скопируйте ARN пользователя. -
настройка политики доступа дать доступ к
kibana_user
.- на https://eu-central-1.console.aws.amazon.com/es/
- выберите домен elasticsearch
- нажмите на кнопку "Изменить доступ policty"
- нажмите "Выбрать шаблон" и используйте тот, который называется "разрешить доступ к одному или нескольким аккаунтам AWS или пользователям IAM". Введите ARN
kibana_user
- к сожалению, AWS не предоставляет возможности войти в систему как этот пользователь, а затем подключиться к Kiabana. Вместо этого, если вы хотите подписать HTTP-запросы, которые вы делаете в Kibana с ключом этого пользователя. Есть инструменты, которые делают это для вас, например aws-es-proxy
Я серьезно рекомендую против второго варианта с доступом на основе IP. Даже если у вас статический IP,
- все на этом IP-адресе будут иметь доступ к вашим данным на elasticesarch
- у вас есть доступ, только если вы подключены через этот API. Ни с телефона, ни из дома.
единственный случай, когда это имеет смысл, если вы используете свой собственный прокси-сервер с собственным методом аутентификации и статическим 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. Вы можете найти больше о basic auth для nginx здесь.
Примечание: основная двиг не рекомендуется ничего безопасного. Наверняка не используете в производстве.
возможно, Вам потребуется политика на основе IP и разрешить доступ к вашему домену с определенного IP (Kibana).
другой вариант (помимо изменения политики доступа, чтобы быть полностью открытым) будет подписывать запросы - IIRC это помогло моему другу с аналогичным сообщением.
см. также "подключение локальной Kibana Server to Amazon Elasticsearch Service " на той же странице.