Подтвердить что ты не робот

Как получить доступ к 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 с помощью щелчка по указанной ссылке?

4b9b3361

Ответ 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-адресом.