首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让AWS EC2访问科尼图8月后的ElasticSearch

让AWS EC2访问科尼图8月后的ElasticSearch
EN

Stack Overflow用户
提问于 2019-07-29 15:41:39
回答 2查看 1.2K关注 0票数 1

我在一个带有Kibana插件的VPC中有一个AWS ElasticSearch集群。我正在努力实现两件事:

  1. 使Kibana向世界开放,在身份认证之后
  2. 让我的EC2在同一个VPC中从这个ElasticSearch集群中读写。

我对第二部分有意见。

我将认知身份验证配置到这个集群中:

我用域名和身份池拉了一个用户,然后用他们激活了Kibana认证。

此外,我还将访问策略更改为只允许来自认知角色的访问:

代码语言:javascript
复制
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::000000000000:role/Cognito_KibanaUsersAuth_Role"
        ]
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-west-2:000000000000:domain/my-domain/*"
    }
  ]
}

(就像这个向导的步骤)

在做这一切之前,我让VPC中的EC2实例可以自由地使用ElasticSearch。我读到,在我激活ES requests身份验证之后,我需要将我的请求签名到ElasticSearch,并且我这样做了:

代码语言:javascript
复制
region = 'us-west-2'
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service)
requests.get(es_url, auth=awsauth)

(就像在这本指南里)

我得到了一个错误:User: anonymous is not authorized to perform: es:ESHttpGet

我希望我的EC2在科尼托得到认证,这样我就可以在那里使用ES了。我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2019-08-05 14:50:47

您必须授予EC2访问弹性搜索的权限。创建一个角色,允许访问弹性搜索域,然后将该角色分配给您的EC2实例。更新您的访问策略如下:

代码语言:javascript
复制
    {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::000000000000:role/Cognito_KibanaUsersAuth_Role"
        ]
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-west-2:000000000000:domain/my-domain/*"
    },
{
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          EC2_ROLE_ARN_HERE
        ]
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-west-2:000000000000:domain/my-domain/*"
    }
  ]
}
票数 1
EN

Stack Overflow用户

发布于 2019-07-30 10:01:38

您正在尝试通过REST端点访问ES,而不是SDK。您需要将签名请求传递给SDK类,以访问您为签名请求提供的链接中描述的ES。

从elasticsearch导入Elasticsearch,从requests_aws4auth导入AWS4Auth导入boto3 例如,my-test-domain.us-east-1.es.amazonaws.com region = '‘#例如,us-west-1 service = ' es’凭据= boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key,credentials.secret_key,region,service) es= Elasticsearch(主机= {' host ':host,'port':443},http_auth = awsauth,use_ssl = True,verify_certs = True,connection_class = RequestsHttpConnection )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57257218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档