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にアクセスできるように、アクセスポリシーを変更するにはどうすればよいですか。
IAMとIPアドレスベースの両方のアクセスを使用してアクセスポリシーをセットアップできます。 私の答えはこちら 。要するに:
arn:aws:iam::aws:policy/AmazonESFullAccess
ポリシー次にポリシーの例を示します(ステートメントの順序が重要です!)
{
"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"
]
}
}
}
]
}
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
Elasticsearchクラスターのアクセスポリシーを設定する必要があります。次の2つのオプションがあります。
オプション1、IAMベースのアクセスを使用する方が優れたオプションです。
kibana_user
というIAMユーザーを作成します。 accessKeyIdとsecretAccessKeyを保存します。 ユーザーのARN もコピーします。kibana_user
。へのアクセスを許可するkibana_user
のARNを入力します IPベースのアクセスの2番目のオプションに対して真剣にお勧めします。静的IPを使用している場合でも、
これが理にかなっている唯一のケースは、独自の認証方法と静的IPを使用して独自のプロキシサーバーを実行している場合です。
私の場合、すでに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 の基本認証の詳細を確認できます。
注:基本認証は、何かを保護するための推奨される方法ではありません。本番環境では絶対に使用しないでください。
IPベースのポリシーが必要な場合があり、特定のIP(Kibana's)からドメインへのアクセスを許可する必要があります。
他のオプション(アクセスポリシーを完全にオープンに変更する以外に)は、リクエストに署名することです-IIRCこれは、私の友人が同様のメッセージで助けてくれました。
同じページの「ローカルKibanaサーバーのAmazon Elasticsearch Serviceへの接続」も参照してください。