web-dev-qa-db-ja.com

Amazon elasticsearchサービスからKibanaにアクセスする方法は?

Amazon elasticsearchサービスを作成し、EC2インスタンスにインストールされたlogstashを使用してデータをデータに入力しました。 Amazon elasticserviceコンソールページに、Kibanaにアクセスするためのリンクがあります。

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

リンクをクリックすると、ブラウザで次のエラーがスローされます。

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

ESドメインのアクセスポリシーに関連するものがあると確信しています。指定したリンクをクリックしてKibanaにアクセスできるように、アクセスポリシーを変更するにはどうすればよいですか。

40
AV94

IAMとIPアドレスベースの両方のアクセスを使用してアクセスポリシーをセットアップできます。 私の答えはこちら 。要するに:

  • EC2インスタンスには、arn:aws:iam::aws:policy/AmazonESFullAccessポリシー
  • ポリシーには、最初のリストIAMアクセス、2番目のリストIPアクセスの2つのステートメントを含める必要があります。

次にポリシーの例を示します(ステートメントの順序が重要です!)

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

aws-es-kibana というプロキシツールを使用しました。 AWS Kibanaに送信されたすべてのリクエストに署名します。

IAM設定:

プログラムによるアクセスで新しいIAMユーザー "elasticsearch_user"を作成しました(そのアカウントに関連付けられたaccessKeyIdとsecretAccessKeyを取得しました)。

Elasticsearch設定:

新しく作成したIAMユーザーのアクセスを可能にするelasticsearchポリシーを作成しました:

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

ローカルステーションからkibanaに接続します:

ローカルステーション(ウィンドウ)からkibanaに接続するには、コンソールに入力するだけです。

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

その後、kibanaへのプロキシアクセスが必要になります: http://127.0.0.1:9200/_plugin/kibana

13
luwojtaszek

Elasticsearchクラスターのアクセスポリシーを設定する必要があります。次の2つのオプションがあります。

  1. IAMベースのアクセスポリシーを設定する
  2. ユーザーがKibanaインスタンスにアクセスできる特定のIPをホワイトリストに追加します。

オプション1、IAMベースのアクセスを使用する方が優れたオプションです。

  • プログラムでアクセスできるkibana_userというIAMユーザーを作成します。 accessKeyIdとsecretAccessKeyを保存します。 ユーザーのARN もコピーします。
  • アクセスポリシーを設定するkibana_user。へのアクセスを許可する
    • https://eu-central-1.console.aws.Amazon.com/es/ に移動します
    • Elasticsearchドメインを選択してください
    • [アクセスポリシーの変更]をクリックします
    • [テンプレートの選択]をクリックし、[1つ以上のAWSアカウントまたはIAMユーザーへのアクセスを許可する]という名前のテンプレートを使用します。 kibana_userのARNを入力します Here is what it looks like
  • 残念ながら、AWSはそのユーザーとしてログインしてからKiabanaに接続する方法を提供していません。代わりに、そのユーザーのキーを使用してKibanaに対して行うHTTP要求に署名する場合。これを行うツールがあります。たとえば、 aws-es-proxy

IPベースのアクセスの2番目のオプションに対して真剣にお勧めします。静的IPを使用している場合でも、

  • そのIPの誰もがelasticesarchのデータにアクセスできます。
  • そのAPI経由で接続している場合にのみアクセスできます。携帯からでも、自宅からでも。

これが理にかなっている唯一のケースは、独自の認証方法と静的IPを使用して独自のプロキシサーバーを実行している場合です。

5

私の場合、すでにelasticsearchサービスにアクセスできるnginxサーバーが実行されていました。したがって、このnginxにプロキシを追加するだけでした。 AWS IAMの変更は必要ありません。

これを/ 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;
  }
}

そしてnginxを再起動します。その後、次の場所でkibanaにアクセスできます。

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

ファイル /etc/nginx/.elasticsearch_htpasswdは、標準のApache2 htaccessファイルです。 nginx here の基本認証の詳細を確認できます。

注:基本認証は、何かを保護するための推奨される方法ではありません。本番環境では絶対に使用しないでください。

3
paneer_tikka

IPベースのポリシーが必要な場合があり、特定のIP(Kibana's)からドメインへのアクセスを許可する必要があります。

他のオプション(アクセスポリシーを完全にオープンに変更する以外に)は、リクエストに署名することです-IIRCこれは、私の友人が同様のメッセージで助けてくれました。

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

同じページの「ローカルKibanaサーバーのAmazon Elasticsearch Serviceへの接続」も参照してください。