Как получить доступ к 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 с помощью щелчка по указанной ссылке?
Ответы
Ответ 1
Вы можете настроить политику доступа с помощью доступа к IAM и IP-адресу. См. мой ответ здесь. Короче говоря:
- Экземпляр EC2 нуждается в профиле с политикой
arn:aws:iam::aws:policy/AmazonESFullAccess
- Политика должна включать два оператора: первый доступ IAM-доступа, второй список IP-доступа.
Здесь пример политики (порядок инструкций важен!)
{
"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"
]
}
}
}
]
}
Ответ 2
Я использовал для этого прокси-инструмент под названием 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}/*"
}
]
}
Подключитесь к кибане со своей местной станции:
Чтобы подключиться с моей локальной станции (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
После этого вы должны иметь прокси-доступ к своей кибане под: http://127.0.0.1:9200/_plugin/kibana
Ответ 3
В моем случае у меня был запущен сервер 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.
Затем вы можете получить доступ к кибане по адресу:
http://your_nginx_server_name.com:7777/_plugin/kibana/app/kibana#/dev_tools/console?_g=()
Файл /etc/nginx/.elasticsearch_htpasswd
является стандартным файлом apache2 htaccess. Подробнее о базовом auth для nginx здесь.
ПРИМЕЧАНИЕ. Базовый auth НЕ является рекомендуемым способом обеспечения чего-либо. Определенно не используйте это в процессе производства.
Ответ 4
Вам может потребоваться политика на основе IP и разрешить доступ к вашему домену с определенного IP-адреса (Kibana's).
Другой вариант (помимо изменения политики доступа, который должен быть полностью открыт), будет подписание запросов - это помогло моему другу с похожим сообщением.
http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-signing-service-requests
См. также "Подключение локального сервера Kibana к службе Amazon Elasticsearch" на той же странице.
Ответ 5
Вам нужно настроить политику доступа для своего кластера elasticsearch. существует два варианта:
- Настройка политики доступа на основе IAM
- Белый список некоторых IP-адресов, из которых люди могут получить доступ к вашему экземпляру Kibana.
Вариант 1 с использованием доступа на основе IAM является лучшим вариантом:
- Создайте пользователя IAM под названием
kibana_user
с программным доступом. Сохраните accessKeyId и secretAccessKey. Также скопируйте пользовательский ARN.
- Настройте политику доступа, чтобы предоставить доступ к
kibana_user
.
- Перейдите к https://eu-central-1.console.aws.amazon.com/es/
- Выберите домен elasticsearch
- Нажмите "Изменить политику доступа"
- Нажмите "Выбрать шаблон" и используйте тот, который называется "Разрешить доступ к одной или нескольким учетным записям AWS или пользователям IAM". Введите ARN
kibana_user
![Вот как это выглядит]()
- К сожалению, AWS не предоставляет способ войти в систему как этот пользователь, а затем подключиться к Kiabana. Вместо этого, если вы хотите подписать HTTP-запросы, которые вы делаете в Kibana с этим ключом пользователя. Есть инструменты, которые делают это для вас:
- Что общего у всех этих инструментов, так это то, что они запрашивают
accessKeyId
и secretAccessKey
вашего kibana_user
, а затем подключают вас к AWS Kibana.
Я серьезно рекомендую использовать второй вариант с доступом на основе IP. Даже если у вас есть статический IP-адрес,
- каждый на этом IP-адресе будет иметь доступ к вашим данным на elasticesarch
- У вас есть доступ, только если вы подключены через этот API. Не со своего телефона, а не из дома.
Единственный случай, когда это имеет смысл, - это если вы используете собственный прокси-сервер с его собственным методом проверки подлинности и статическим IP-адресом.