Pertanyaan Bagaimana cara mengakses Kibana dari layanan Amazon elasticsearch?


Saya membuat layanan Amazon elasticsearch dan data yang dihimpun ke dalamnya menggunakan logstash, yang telah diinstal pada contoh EC2. Pada halaman konsol Elasticservice Amazon, akan ada tautan untuk mengakses Kibana.

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

ketika saya mengklik tautan, browser melempar kesalahan berikut.

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

Saya yakin ini memiliki sesuatu yang terkait dengan kebijakan akses domain ES. Bagaimana saya mengubah kebijakan akses saya sehingga saya dapat mengakses Kibana dari klik pada tautan yang ditentukan?


32
2017-11-17 07:44


asal


Jawaban:


Anda dapat mengatur Kebijakan Akses dengan IAM dan alamat IP berbasis akses. Lihat jawaban saya di sini. Pendeknya:

  • Contoh EC2 membutuhkan profil dengan arn:aws:iam::aws:policy/AmazonESFullAccess kebijakan
  • Kebijakan harus mencakup dua pernyataan: pertama daftar akses IAM, akses IP daftar kedua.

Berikut ini contoh kebijakan (pesanan pernyataan penting!)

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



Saya menggunakan alat proxy tujuan yang disebut aws-es-kibana. Ini menandatangani semua permintaan Anda dikirim ke aws kibana.

Konfigurasi IAM:

Saya membuat pengguna IAM baru "elasticsearch_user" dengan akses terprogram (dan saya mendapat accessKeyId dan secretAccessKey yang terkait dengan akun itu).

Konfigurasi Elasticsearch:

Saya membuat kebijakan elasticsearch yang memungkinkan akses untuk pengguna IAM yang baru dibuat:

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

Terhubung ke kibana dari stasiun lokal Anda:

Untuk terhubung dari stasiun lokal saya (windows) ke kibana saya hanya perlu mengetikkan di konsol:

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

Setelah itu Anda harus memiliki akses proksi ke kibana Anda di bawah: http://127.0.0.1:9200/_plugin/kibana


6
2018-06-06 19:45



Anda harus mengonfigurasi kebijakan akses untuk kluster elasticsearch Anda. ada dua opsi:

  1. Menyiapkan kebijakan akses berbasis IAM
  2. White-list IP tertentu dari mana orang dapat mengakses instance Kibana Anda.

Opsi 1, menggunakan akses berbasis IAM adalah opsi yang lebih baik:

  • Buat pengguna IAM, yang disebut kibana_user dengan akses terprogram. Simpan accessKeyId dan secretAccessKey. Juga salin ARN pengguna.
  • Konfigurasikan kebijakan akses Anda untuk memberikan akses ke kibana_user.
    • Pergi ke https://eu-central-1.console.aws.amazon.com/es/
    • Pilih domain elasticsearch Anda
    • Klik "Ubah akses policty"
    • Klik "Pilih template" dan gunakan salah satu yang disebut "Izinkan akses ke satu atau lebih akun AWS atau pengguna IAM". Masukkan ARN dari kibana_user  Here is what it looks like
  • Sayangnya, AWS tidak menyediakan cara untuk masuk sebagai pengguna itu dan kemudian terhubung ke Kiabana. Sebaliknya, jika ingin Anda menandatangani permintaan HTTP yang Anda buat ke Kibana dengan kunci pengguna itu. Ada alat yang melakukan ini untuk Anda, misalnya aws-es-proxy

Saya sangat menyarankan untuk menentang opsi kedua dengan akses berbasis IP. Bahkan jika Anda memiliki IP statis,

  • semua orang di IP itu akan memiliki akses ke data Anda di elasticesarch
  • Anda hanya memiliki akses jika Anda terhubung melalui API itu. Bukan dari ponsel Anda, bukan dari rumah.

Satu-satunya kasus di mana ini masuk akal adalah jika Anda menjalankan server proxy Anda sendiri dengan metode otentikasi sendiri dan IP statis.


3
2017-10-04 21:11



Dalam kasus saya, saya menjalankan server nginx yang sudah memiliki akses ke layanan elasticsearch. Jadi yang harus saya lakukan adalah menambahkan proxy pada nginx ini. Tidak diperlukan perubahan pada AWS IAM.

Tambahkan ini ke / 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;
  }
}

dan nyalakan kembali nginx. Kemudian Anda dapat mengakses kibana di:

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

Berkas /etc/nginx/.elasticsearch_htpasswd adalah file htaccess standar apache2. Anda dapat menemukan lebih banyak tentang auth dasar untuk nginx sini.

CATATAN: Autentikasi dasar BUKAN cara yang disarankan untuk mengamankan apa pun. Jelas tidak menggunakan ini dalam produksi.


2
2017-07-14 14:49



Anda mungkin perlu memiliki kebijakan berbasis IP dan mengizinkan akses ke domain Anda dari IP tertentu (milik Kibana).

Pilihan lain (selain dari mengubah kebijakan akses untuk benar-benar terbuka) akan menjadi permintaan penandatanganan - IIRC ini membantu seorang teman saya dengan pesan serupa.

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

Lihat juga "Menghubungkan Server Kibana Lokal ke Amazon Elasticsearch Service" di halaman yang sama.


0
2017-11-17 16:09