Как получить доступ к Kibana из сервиса Amazonasticsearch?
Я создал сервис Amazonasticsearch и заполнил в него данные с помощью logstash, который был установлен на экземпляре EC2. На странице консоли Amazonasticservice будет ссылка для доступа к 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, второй список доступа 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"
]
}
}
}
]
}
Я использовал для этой цели прокси-инструмент под названием aws-es-kibana. Он подписывает все ваши запросы, отправленные в aws kibana.
Конфигурация IAM:
Я создал нового пользователя IAM "asticsearch_user"с программным доступом (и я получил accessKeyId и secretAccessKey, связанные с этой учетной записью).
Конфигурация Elasticsearch:
Я создал политику asticsearch, которая разрешает доступ для нового созданного пользователя 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) к кибане, мне просто нужно набрать в консоли:
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
Вы должны настроить политику доступа для вашего кластера эластичного поиска. Есть два варианта:
- Настройка политики доступа на основе IAM
- Белый список определенных IP-адресов, с которых люди могут получить доступ к вашему экземпляру Kibana.
Вариант 1, использование доступа на основе IAM- лучший вариант:
- Создайте пользователя IAM с именем
kibana_user
с программным доступом. Сохраните accessKeyId и secretAccessKey. Также скопируйте пользовательский ARN. - Настройте политику доступа, чтобы предоставить доступ к
kibana_user
,- Перейдите на https://eu-central-1.console.aws.amazon.com/es/
- Выберите домен эластичного поиска
- Нажмите "Изменить политику доступа"
- Нажмите "Выбрать шаблон" и используйте тот, который называется "Разрешить доступ к одной или нескольким учетным записям AWS или пользователям IAM". Введите АРН
kibana_user
- К сожалению, AWS не позволяет войти в систему под этим пользователем, а затем подключиться к Kiabana. Вместо этого, если вы хотите, чтобы вы подписывали HTTP-запросы, которые вы делаете в Kibana, ключом этого пользователя. Есть инструменты, которые делают это для вас, например, aws-es-proxy
Я настоятельно рекомендую против второго варианта с доступом на основе IP. Даже если у вас есть статический IP,
- каждый на этом IP будет иметь доступ к вашим данным на elasticesarch
- у вас есть доступ, только если вы подключены через этот API. Не с вашего телефона, не из дома.
Единственный случай, когда это имеет смысл, - это если вы используете собственный прокси-сервер с собственным методом аутентификации и статическим IP-адресом.
В моем случае у меня был запущен сервер nginx, у которого уже был доступ к сервису asticsearch. Так что все, что мне нужно было сделать, это добавить прокси на этом nginx. Никаких изменений в AWS IAM не требуется.
Добавьте это в /etc/nginx/sites-enabled/asticsearch
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 Вы можете найти больше об основной аутентификации для nginx здесь.
ПРИМЕЧАНИЕ. Базовая аутентификация НЕ является рекомендуемым способом обеспечения безопасности. Определенно не используйте это в производстве.
Возможно, вам понадобится политика на основе IP и разрешение доступа к вашему домену с определенного IP (Kibana).
Другой вариант (помимо изменения политики доступа, чтобы быть полностью открытым) будет подписывать запросы - IIRC это помогло моему другу с аналогичным сообщением.
http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html
См. Также "Подключение локального сервера Kibana к сервису Amazon Elasticsearch" на той же странице.