Как получить доступ к 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

Вы должны настроить политику доступа для вашего кластера эластичного поиска. Есть два варианта:

  1. Настройка политики доступа на основе IAM
  2. Белый список определенных 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" на той же странице.

Другие вопросы по тегам