amazon-web-services - aws - kibana cognito
¿Cómo acceder a Kibana desde Amazon elasticsearch service? (5)
Debe configurar una política de acceso para su clúster elasticsearch. hay dos opciones:
- Configurar una política de acceso basada en IAM
- 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:
- Cree un usuario de IAM, llamado
kibana_user
con acceso programático. Guarde AccessKeyId y secretAccessKey. Copie también el ARN del usuario . - Configure su política de acceso para dar acceso a
kibana_user
.- Vaya a 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 del
kibana_user
- 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 usted, 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.
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?
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 acerca de la autenticación básica para nginx here .
NOTA: La autenticación básica NO es una forma recomendada de asegurar nada. Definitivamente no use esto en producción.
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.
Consulte también "Conexión de un servidor local Kibana al servicio Elasticsearch de Amazon" en la misma página.
Puede configurar una Política de acceso con acceso basado en IAM y dirección IP. Vea mi respuesta aquí . En breve:
- La instancia EC2 necesita un perfil con la
arn:aws:iam::aws:policy/AmazonESFullAccess
- 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"
]
}
}
}
]
}
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, debe tener acceso proxy a su kibana en: http://127.0.0.1:9200/_plugin/kibana