Pregunta ¿Cómo acceder a Kibana desde Amazon elasticsearch service?


Creé el servicio de búsqueda del elástico de Amazon y llené datos con Logstash, que se ha instalado en una instancia de EC2. En la página de consola de Amazon elasticservice, habrá un enlace para acceder a Kibana.

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

cuando hago clic en el enlace, el navegador arroja el siguiente error.

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

Estoy seguro de que esto tiene algo que ver con la política de acceso del dominio ES. ¿Cómo debo modificar mi política de acceso para poder acceder a Kibana haciendo clic en el enlace especificado?


32
2017-11-17 07:44


origen


Respuestas:


Puede configurar una Política de acceso con acceso basado en IAM y dirección IP. Ver mi respuesta aquí. En breve:

  • La instancia EC2 necesita un perfil con el arn:aws:iam::aws:policy/AmazonESFullAccess política
  • La política debe incluir dos declaraciones: primero, enumerar el acceso de IAM, segundo, enumerar el acceso de IP.

Aquí hay una política de ejemplo (¡el orden de las declaraciones es 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"
          ]
        }
      }
    }
  ]
}

23
2017-12-02 23:56



Utilicé para eso una herramienta proxy llamada aws-es-kibana. Firma todas sus solicitudes enviadas a aws kibana.

Configuración de IAM:

Creé el nuevo usuario de IAM "elasticsearch_user" con acceso programático (y obtuve accessKeyId y secretAccessKey asociados con esa cuenta).

Configuración de Elasticsearch:

Creé la política elasticsearch que permite el acceso para el nuevo usuario de IAM creado:

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

Conéctese a kibana desde su estación local:

Para conectarme desde mi estación local (Windows) a kibana solo necesito ingresar la consola:

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

Después de eso, debería tener acceso proxy a su kibana en: http://127.0.0.1:9200/_plugin/kibana


6
2018-06-06 19:45



Debe configurar una política de acceso para su clúster elasticsearch. hay dos opciones:

  1. Configurar una política de acceso basada en IAM
  2. Haga una lista blanca de ciertas direcciones IP desde las que las personas puedan acceder a su instancia de Kibana.

La opción 1, que usa acceso basado en IAM, es la mejor opción:

  • Crear un usuario de IAM, llamado kibana_user con acceso programático. Guarde AccessKeyId y secretAccessKey. También copia el ARN del usuario.
  • Configura tu política de acceso para dar acceso a kibana_user.
    • Ir https://eu-central-1.console.aws.amazon.com/es/
    • Seleccione su dominio elasticsearch
    • Haga clic en "Modificar la política de acceso"
    • Haga clic en "Seleccionar una plantilla" y use la llamada "Permitir acceso a una o más cuentas de AWS o usuarios de IAM". Ingrese el ARN de la kibana_user  Here is what it looks like
  • Desafortunadamente, AWS no proporciona una forma de iniciar sesión como ese usuario y luego conectarse a Kiabana. En cambio, si quiere que firme las solicitudes HTTP que hace a Kibana con la clave de ese usuario. Hay herramientas que hacen esto por ti, por ejemplo aws-es-proxy

Lo recomiendo seriamente en contra de la segunda opción con acceso basado en IP. Incluso si tienes una IP estática,

  • todos en esa IP tendrán acceso a tus datos en elasticesarch
  • solo tienes acceso si estás conectado a través de esa API. No desde su teléfono, no desde su casa.

El único caso en el que esto tiene sentido es si está ejecutando su propio servidor proxy con su propio método de autenticación y una dirección IP estática.


3
2017-10-04 21:11



En mi caso, tenía un servidor nginx en ejecución que ya tenía acceso al servicio elasticsearch. Así que todo lo que tuve que hacer fue agregar un proxy en este nginx. No se requieren cambios en AWS IAM.

Agregue esto 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;
  }
}

y reinicie nginx. Entonces puedes acceder al kibana en:

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

El archivo /etc/nginx/.elasticsearch_htpasswd es un archivo apache2 htaccess estándar. Puede encontrar más información sobre autenticación básica para nginx aquí.

NOTA: La autenticación básica NO es una forma recomendada de asegurar nada. Definitivamente no use esto en producción.


2
2017-07-14 14:49



Es posible que necesite tener una política basada en IP y permitir el acceso a su dominio desde una IP específica (Kibana).

Otra opción (aparte de cambiar completamente la política de acceso) sería la firma de solicitudes. Esto ayudó a un amigo mío con un mensaje similar.

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

Consulte también "Conexión de un servidor local Kibana al servicio Elasticsearch de Amazon" en la misma página.


0
2017-11-17 16:09