28

Ho creato il servizio Amazon elasticsearch e ho inserito i dati in esso utilizzando logstash, che è stato installato su un'istanza EC2. Nella pagina della console di Amazon elasticservice, ci sarà un link per accedere a Kibana.Come accedere a Kibana dal servizio Amazon elasticsearch?

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

quando faccio clic sul collegamento, il browser sta lanciando il seguente errore.

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

Sono sicuro che questo ha qualcosa in relazione con la politica di accesso di ES domain.How dovrei modificare il mio criteri di accesso in modo che io possa accedere Kibana da un clic sul link specificato?

+2

Se cambio la politica di accesso come suggerito, chiunque abbia conoscenza dell'URL può accedervi correttamente? – AV94

+0

Sì, è vero. – Val

risposta

20

È possibile impostare un criterio di accesso con accesso IAM e indirizzo IP. See my answer here. In breve:

  • istanza EC2 ha bisogno di un profilo con il arn:aws:iam::aws:policy/AmazonESFullAccess politica
  • politica dovrebbe includere due affermazioni: in primo luogo l'accesso lista IAM, secondo accesso lista IP.

Ecco un esempio della politica (ordine affermazione è importante!)

{ 
    "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

Grazie, separando gli oggetti Statment è dove ho sbagliato. – cmrust

+0

@pete quindi se il mio IP desktop è "192.168.1.66" allora dovrei accedere a kibana come http://192.168.1.66:9200/_plugin/kibana che non funziona per me. – nad

+0

Puoi impostare '{" aws: SourceIp ":" 192.168.1.66 "}" e accedere a Kibana tramite qualsiasi URL elencato come endpoint Kibana per un dominio in [console di gestione] (https: //console.aws.amazon .viene a casa). Nota se il tuo IP locale è/effettivamente/'192.168.1.66', potresti essere connesso a Internet tramite un router e dovrai inserire l'IP per il tuo router. Inoltre, esegui il test solo dopo che lo stato del tuo dominio è 'Attivo' (avviso: potrebbe richiedere 20 minuti ogni volta che aggiorni il criterio). – Pete

0

Potrebbe essere necessario disporre di criteri basati su IP e consentire l'accesso al dominio da specifici IP (Kibana).

Un'altra opzione (oltre a modificare la politica di accesso per essere completamente aperta) sarebbe la firma delle richieste - IIRC ha aiutato un mio amico con un messaggio simile.

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

Vedere anche "Collegamento di un Kibana locale Server per Amazon elasticsearch servizio" sulla stessa pagina.

5

ho usato per questo strumento di uso del proxy chiamato aws-es-kibana. Firma tutte le richieste inviate a aws kibana.

configurazione IAM:

ho creato nuovi "elasticsearch_user" user IAM con accesso programmatico (e ho avuto accessKeyId e secretAccessKey associata a tale account).

configurazione

elasticsearch:

ho creato la politica elasticsearch che consente l'accesso per il nuovo utente IAM creato:

{ 
    "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}/*" 
    } 
    ] 
} 

Connect to Kibana dalla stazione locale:

Per collegare dalla mia stazione locale (Windows) a Kibana ho solo bisogno di digitare in console:

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 

Dopo di che si dovrebbe avere proxy accesso al Kibana sotto: http://127.0.0.1:9200/_plugin/kibana

1

Nel mio caso, ho avuto un server in esecuzione nginx che già aveva l'accesso al servizio elasticsearch. Quindi tutto ciò che dovevo fare era aggiungere un proxy su questo nginx. Non sono richieste modifiche in AWS IAM.

Aggiungi questo a/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; 
    } 
} 

e riavviare nginx. Poi è possibile accedere a Kibana:

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

Il file /etc/nginx/.elasticsearch_htpasswd è un file .htaccess apache2 standard. Puoi trovare ulteriori informazioni sull'autenticazione di base per nginx here.

NOTA: l'autenticazione di base NON è un metodo consigliato per proteggere nulla. Sicuramente non usare questo in produzione.

0

È necessario configurare un criterio di accesso per il cluster elasticsearch. ci sono due opzioni:

  1. impostare una politica di accesso IAM-based
  2. White-list determinati IP da cui le persone possono accedere l'istanza Kibana.

Opzione 1, utilizzando l'accesso basato IAM è la soluzione migliore:

  • creare un utente IAM, chiamato kibana_user con accesso programmatico. Salva l'AccessKeyId e la secretAccessKey. Copiare anche lo user's ARN.
  • Configure your access policy per consentire l'accesso a kibana_user.
    • Vai https://eu-central-1.console.aws.amazon.com/es/
    • Selezionare la dominio elasticsearch
    • Cliccare su "Modifica accesso policty"
    • Cliccare su "Seleziona un modello" e usare quello che si chiama "Consenti l'accesso a uno o più account AWS o utenti IAM ". Inserire l'ARN della kibana_userHere is what it looks like
  • Purtroppo, AWS non fornisce un modo per accedere come quell'utente e quindi connettersi a Kiabana.Invece, se vuoi che tu firmi le richieste HTTP che fai a Kibana con quella chiave dell'utente. Ci sono strumenti che fanno questo per voi:
  • ciò che tutti questi strumenti hanno in comune è che essi chiedono il accessKeyId e secretAccessKey del vostro kibana_user e poi si collegano a AWS Kibana.

Consiglio vivamente contro la seconda opzione con accesso basato su IP. Anche se avete un IP statico,

  • tutti su quel IP avrà accesso ai dati in elasticesarch
  • si ha accesso solo se si è connessi tramite tale API. Non dal tuo telefono, non da casa.

L'unico caso in cui questo ha senso è se si sta eseguendo il proprio server proxy con il proprio metodo di autenticazione e un IP statico.

Problemi correlati