Как получить доступ к 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. есть два варианта:

  1. настройка политики доступа на основе IAM
  2. белый список определенных 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 Here is what it looks like
  • к сожалению, 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 это помогло моему другу с аналогичным сообщением.

http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-signing-service-requests

см. также "подключение локальной Kibana Server to Amazon Elasticsearch Service " на той же странице.