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é?
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:
arn:aws:iam::aws:policy/AmazonESFullAccess
politiqueVoici 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"
]
}
}
}
]
}
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
Vous devez configurer une politique d'accès pour votre cluster elasticsearch. il y a deux options:
L'option 1, utilisant l'accès basé sur IAM est la meilleure option:
kibana_user
avec accès programmatique. Enregistrez accessKeyId et secretAccessKey. Copiez également ARN de l'utilisateur .kibana_user
. kibana_user
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,
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.
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.
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.
Voir également "Connexion d'un serveur Kibana local à Amazon Elasticsearch Service" sur la même page.