web-dev-qa-db-fra.com

Comment accéder à Kibana à partir du service Amazon elasticsearch?

J'ai créé le service Amazon elasticsearch et y ai rempli les données à l'aide de logstash, qui a été installé sur une instance EC2. Sur la page de la console Amazon elasticservice, il y aura un lien pour accéder à Kibana.

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

lorsque je clique sur le lien, le navigateur génère l'erreur suivante.

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

Je suis sûr que cela a quelque chose en rapport avec la politique d'accès du domaine ES.Comment dois-je modifier ma politique d'accès pour pouvoir accéder à Kibana en cliquant sur le lien spécifié?

40
AV94

Vous pouvez configurer une stratégie d'accès avec un accès basé sur l'adresse IAM et l'adresse IP. Voir ma réponse ici . En bref:

  • L'instance EC2 a besoin d'un profil avec le arn:aws:iam::aws:policy/AmazonESFullAccess politique
  • La stratégie doit inclure deux instructions: première liste d'accès IAM, deuxième liste d'accès IP.

Voici un exemple de politique (l'ordre des relevés est important!)

{
  "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"
          ]
        }
      }
    }
  ]
}
26
Pete

J'ai utilisé à cet effet un outil proxy appelé aws-es-kibana . Il signe toutes vos demandes envoyées à aws kibana.

Configuration IAM:

J'ai créé un nouvel utilisateur IAM "elasticsearch_user" avec un accès programmatique (et j'ai obtenu accessKeyId et secretAccessKey associés à ce compte).

Configuration Elasticsearch:

J'ai créé une stratégie elasticsearch qui permet l'accès au nouvel utilisateur IAM créé:

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

Connectez-vous à kibana depuis votre station locale:

Pour me connecter de ma station locale (windows) à kibana, il me suffit de taper dans la 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

Après cela, vous devriez avoir un accès proxy à votre kibana sous: http://127.0.0.1:9200/_plugin/kibana

13
luwojtaszek

Vous devez configurer une politique d'accès pour votre cluster elasticsearch. il y a deux options:

  1. Configurer une stratégie d'accès basée sur IAM
  2. Liste blanche certaines adresses IP à partir desquelles les utilisateurs peuvent accéder à votre instance Kibana.

L'option 1, utilisant l'accès basé sur IAM est la meilleure option:

  • Créez un utilisateur IAM, appelé kibana_user avec accès programmatique. Enregistrez accessKeyId et secretAccessKey. Copiez également ARN de l'utilisateur .
  • Configurez votre politique d'accès pour donner accès à kibana_user.
    • Allez sur https://eu-central-1.console.aws.Amazon.com/es/
    • Sélectionnez votre domaine elasticsearch
    • Cliquez sur "Modifier la politique d'accès"
    • Cliquez sur "Sélectionner un modèle" et utilisez celui qui est appelé "Autoriser l'accès à un ou plusieurs comptes AWS ou utilisateurs IAM". Entrez l'ARN du kibana_userHere is what it looks like
  • Malheureusement, AWS ne fournit aucun moyen de se connecter en tant qu'utilisateur et de se connecter ensuite à Kiabana. Au lieu de cela, si vous souhaitez signer les demandes HTTP que vous faites à Kibana avec la clé de cet utilisateur. Il existe des outils qui le font pour vous, par exemple aws-es-proxy

Je déconseille sérieusement la deuxième option avec un accès basé sur IP. Même si vous avez une adresse IP statique,

  • tout le monde sur cette adresse IP aura accès à vos données sur elasticesarch
  • vous n'y avez accès que si vous êtes connecté via cette API. Pas depuis votre téléphone, pas depuis chez vous.

Le seul cas où cela a un sens est si vous exécutez votre propre serveur proxy avec sa propre méthode d'authentification et une adresse IP statique.

5

Dans mon cas, j'avais un serveur nginx en cours d'exécution qui avait déjà accès au service elasticsearch. Donc, tout ce que j'avais à faire était d'ajouter un proxy sur ce nginx. Aucun changement dans AWS IAM requis.

Ajoutez ceci à/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;
  }
}

et redémarrez nginx. Ensuite, vous pouvez accéder à kibana à:

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

Le fichier /etc/nginx/.elasticsearch_htpasswd est un fichier htaccess Apache2 standard. Vous pouvez en savoir plus sur l'authentification de base pour nginx ici .

REMARQUE: l'authentification de base n'est PAS une méthode recommandée pour sécuriser quoi que ce soit. Ne l'utilisez certainement pas en production.

3
paneer_tikka

Vous devrez peut-être avoir une politique basée sur IP et autoriser l'accès à votre domaine à partir d'une adresse IP spécifique (Kibana).

Une autre option (en plus de changer la politique d'accès pour qu'elle soit complètement ouverte) serait de signer des demandes - l'IIRC a aidé un de mes amis avec un message similaire.

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

Voir également "Connexion d'un serveur Kibana local à Amazon Elasticsearch Service" sur la même page.