28

Utworzono usługę Amazon elasticsearch i wprowadziłem do niej dane za pomocą programu logstash, który został zainstalowany w instancji EC2. Na stronie z konsolą Amazon elasticservice dostępny będzie link umożliwiający dostęp do Kibana.Jak uzyskać dostęp do Kibana z usługi Amazon elasticsearch?

search-cluster_name-XXXXXXXXXXXXXXXXXXX.region_name.es.amazonaws.com/_plugin/kibana/ 

po kliknięciu łącza przeglądarka wyświetla następujący błąd.

{"Message":"User: anonymous is not authorized to perform: es:ESHttpGet on resource: arn:aws:es:region_name:account_id:domain/cluster_name/_plugin/kibana/"} 

Jestem pewien, że ma to coś związanego z polityką dostępu ES domain.How muszę Zmienić zasady dostępu, dzięki czemu można uzyskać dostęp Kibana od kliknięcia na link określony?

+2

Jeśli zmienię zasadę dostępu zgodnie z sugestią, to każdy, kto zna jej adres URL, może uzyskać do niej dostęp? – AV94

+0

Tak, zgadza się. – Val

Odpowiedz

20

Można skonfigurować zasady dostępu, korzystając z dostępu do IAM i adresu IP. See my answer here. W skrócie:

  • instancji EC2 potrzebuje profil z arn:aws:iam::aws:policy/AmazonESFullAccess Zasady
  • powinna zawierać dwa oświadczenia: najpierw dostęp lista IAM, po drugie dostęp lista IP.

Oto przykład polityka (kolejność oświadczenie jest ważne!)

{ 
    "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" 
      ] 
     } 
     } 
    } 
    ] 
} 
+0

Dzięki, oddzielanie obiektów Statment jest tam, gdzie popełniłem błąd. – cmrust

+0

@pete, więc jeśli moje IP pulpitu jest "192.168.1.66" to powinienem uzyskać dostęp do kibana jako http://192.168.1.66:9200/_plugin/kibana, który nie działa dla mnie. – nad

+0

Powinieneś ustawić '{" aws: SourceIp ":" 192.168.1.66 "}' i uzyskać dostęp do Kibana poprzez dowolny adres URL wymieniony jako punkt końcowy Kibana dla domeny w [konsoli zarządzania] (https: //console.aws.amazon .wraca do domu). Uwaga: jeśli twój lokalny adres IP to/faktycznie/'192.168.1.66', możesz być podłączony do Internetu za pośrednictwem routera i musisz wprowadzić adres IP routera. Ponadto testem po stanie domeny jest "Aktywny" (ostrzeżenie: może zająć 20 minut za każdym razem, gdy zaktualizujesz zasadę). – Pete

0

Być może trzeba mieć zasady oparte na protokole IP i zezwolić na dostęp do domeny z określonego adresu IP (Kibana).

Inną opcją (poza zmianą zasad dostępu, aby były całkowicie otwarte) byłoby podpisywanie wniosków - IIRC to pomogło mojemu znajomemu z podobnym przesłaniem.

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

Patrz także "Podłączanie serwera lokalnego Kibana Amazon Elasticsearch serwisu" na tej samej stronie.

5

Użyłem do tego celu narzędzie o nazwie aws-es-kibana proxy. Podpisuje wszystkie twoje prośby wysłane do aws kibana.

IAM konfiguracja:

stworzyłem nowy IAM użytkownika "elasticsearch_user" z programowego dostępu (i mam accessKeyId i secretAccessKey powiązanych z tym kontem).

konfiguracja

Elasticsearch:

stworzyłem politykę elasticsearch, który umożliwia dostęp do nowego utworzonego użytkownika 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}/*" 
    } 
    ] 
} 

Połącz z Kibana z lokalnej stacji:

Aby połączyć z mojej lokalnej stacji (windows) do kibana wystarczy wpisać w konsoli:

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 

Po tym powinieneś proxy dostęp do Kibana under: http://127.0.0.1:9200/_plugin/kibana

1

W moim przypadku, miałem serwera uruchomione nginx, który miał już dostęp do usługi elasticsearch. Więc wszystko, co musiałem zrobić, to dodać proxy na tym nginx. Nie są wymagane żadne zmiany w AWS IAM.

Dodaj to do/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; 
    } 
} 

i restartu nginx. Następnie można przejść Kibana w:

http://your_nginx_server_name.com:7777/_plugin/kibana/app/kibana#/dev_tools/console?_g=() 

Plik /etc/nginx/.elasticsearch_htpasswd to standardowy plik apache2 .htaccess. Możesz znaleźć więcej informacji na temat podstawowego uwierzytelniania dla nginx here.

UWAGA: Podstawowy auth NIE jest zalecanym sposobem zabezpieczenia czegokolwiek. Zdecydowanie nie używaj tego w produkcji.

0

Należy skonfigurować zasady dostępu do klastra elasticsearch. istnieją dwie opcje:

  1. skonfigurować zasadę dostępu IAM opartego
  2. biała lista adresów IP, z których niektóre osoby mogą uzyskać dostęp do instancji Kibana.

Wariant 1, z wykorzystaniem dostępu IAM oparty jest lepszym rozwiązaniem:

  • Załóż IAM użytkownika, zwany kibana_user z programowym dostępem. Zapisz accessKeyId i secretAccessKey. Skopiuj także kod user's ARN.
  • Configure your access policy dać dostęp do kibana_user.
    • idź do https://eu-central-1.console.aws.amazon.com/es/
    • Wybierz domena elasticsearch
    • kliknij „Modyfikuj dostępu policty”
    • Kliknij „Wybierz szablon” i wykorzystać ten, który nazywa się „Zezwalaj na dostęp do jednego lub więcej kont AWS lub użytkownicy IAM ". Wprowadź ARN z kibana_userHere is what it looks like
  • Niestety, AWS nie przewiduje się sposób, aby zalogować się jako użytkownik, a następnie połączyć się Kiabana.Zamiast tego, jeśli chcesz, możesz podpisać żądania HTTP wysyłane do Kibana kluczem tego użytkownika. Istnieją narzędzia, które robią to dla ciebie:
  • Co wszystkie te narzędzia mają wspólną cechą jest to, że prosić o accessKeyId i secretAccessKey swojej kibana_user a następnie podłączyć do AWS Kibana.

Zdecydowanie polecam przeciwko drugiej opcji z dostępem opartym na IP. Nawet jeśli masz statyczny adres IP,

  • wszyscy na tym IP będą miały dostęp do danych przy użyciu elasticesarch
  • masz tylko dostęp, jeśli są połączone za pośrednictwem tego interfejsu API. Nie z telefonu, nie z domu.

Jedyny przypadek, w którym ma to sens, to sytuacja, w której użytkownik uruchamia własny serwer proxy z własną metodą uwierzytelniania i statycznym adresem IP.

Powiązane problemy