如何从亚马逊弹性搜索服务访问Kibana?

AV9*_*V94 42 amazon-ec2 amazon-web-services elasticsearch kibana-4 amazon-elasticsearch

我创建了Amazon elasticsearch服务,并使用logstash将数据填充到其中,logstash已安装在EC2实例上.在Amazon弹性服务控制台页面上,将有一个访问Kibana的链接.

search-cluster_name-XXXXXXXXXXXXXXXXXXX.region_name.es.amazonaws.com/_plugin/kibana/
Run Code Online (Sandbox Code Playgroud)

当我点击链接时,浏览器抛出以下错误.

{"Message":"User: anonymous is not authorized to perform: es:ESHttpGet on resource: arn:aws:es:region_name:account_id:domain/cluster_name/_plugin/kibana/"}
Run Code Online (Sandbox Code Playgroud)

我确定这与ES域的访问策略有关.如何修改访问策略,以便通过点击指定的链接访问Kibana?

Pet*_*ete 27

您可以使用基于IAM和IP地址的访问来设置访问策略. 在这里看到我的答案.简而言之:

  • EC2实例需要包含arn:aws:iam::aws:policy/AmazonESFullAccess策略的配置文件
  • 策略应包括两个语句:第一个列表IAM访问,第二个列表IP访问.

这是一个示例策略(语句顺序很重要!)

{
  "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"
          ]
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不再起作用了。现在的结果是:`UpdateElasticsearchDomainConfig: {"message":"您无法将基于 IP 的策略附加到具有 VPC 终端节点的域。相反,请使用安全组来控制基于 IP 的访问。"}` (3认同)

luw*_*zek 13

我用于那个名为aws-es-kibana的代理工具.它会将您发送给aws kibana的所有请求签名.

IAM配置:

我创建了具有编程访问权限的新IAM用户"elasticsearch_user"(我获得了与该帐户关联的accessKeyId和secretAccessKey).

Elasticsearch配置:

我创建了弹性搜索策略,允许新创建的IAM用户访问:

{
  "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}/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

从当地车站连接到kibana:

要从我的本地站(Windows)连接到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
Run Code Online (Sandbox Code Playgroud)

之后你应该代理访问你的kibana:http://127.0.0.1:9200/_plugin/kibana

  • 这太棒了! (2认同)

Kon*_*ert 5

您必须为elasticsearch集群配置访问策略。有两种选择:

  1. 设置基于IAM的访问策略
  2. 人们可以从中访问您的Kibana实例的某些IP列入白名单。

选项1,使用基于IAM的访问是更好的选择:

  • 创建一个IAM用户,kibana_user以编程访问方式进行调用。保存accessKeyId和secretAccessKey。同时复制用户的ARN
  • 配置您的访问策略以授予对的访问权限kibana_user
    • 转到https://eu-central-1.console.aws.amazon.com/es/
    • 选择您的Elasticsearch域
    • 点击“修改访问政策”
    • 单击“选择模板”,然后使用称为“允许访问一个或多个AWS账户或IAM用户”的模板。输入ARNkibana_user 这是它的样子
  • 不幸的是,AWS没有提供以该用户身份登录然后连接到Kiabana的方法。相反,如果希望您使用该用户的密钥签署对Kibana的HTTP请求。有一些工具可以帮您做到这一点,例如aws-es-proxy

我强烈建议您不要使用基于IP的访问的第二种方法。即使您拥有静态IP,

  • 该IP上的每个人都可以在elasticesarch上访问您的数据
  • 只有通过该API连接的用户才能访问。不是通过手机,也不是在家。

唯一有意义的情况是,如果您使用自己的身份验证方法和静态IP运行自己的代理服务器。