我有一个无服务器的应用程序,我想部署一个elasticsearch集群。我将其配置为:
PostsSearch:
Type: AWS::Elasticsearch::Domain
Properties:
ElasticsearchVersion: '6.3'
DomainName: images-search-${self:provider.stage}
ElasticsearchClusterConfig:
DedicatedMasterEnabled: false
InstanceCount: 1
ZoneAwarenessEnabled: false
InstanceType: t2.small.elasticsearch
EBSOptions:
EBSEnabled: true
Iops: 0
VolumeSize: 10
VolumeType: 'gp2'
AccessPolicies:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
AWS: '*'
Action: 'es:ESHttp*'
Resource: '*'
但是,我得到一个错误:
出现错误:postssearch-启用细粒度访问控制或对域应用限制性访问策略(服务:awselasticsearch;状态码:400;错误代码:validationexception;请求id:be0eca95-23ae-4ac9-be81-67cab37ccd70;代理:空)。
我该怎么解决这个问题?
1条答案
按热度按时间hyrbngr71#
基于评论中的额外讨论。
使es域完全公开是不可能的。云层不允许这样。因此,有三种选择。下面我将在一个示例的无服务器应用程序中展示其中三个。这只是一个基本的helloworld应用程序,它没有以任何容量使用es域,但是我使用它来验证每个选择是否有效,并且可以使用无服务器框架部署而不会出错。
应用基于ip的条件
这将使您的域只开放访问单个ip地址或ip cidr范围。下面的示例限制对一个单一ip地址的访问。
限制委托人
您可以将对es域的访问限制为选定的iam用户或角色。这样,只有给定的iam用户/角色才能访问es域。在下面我使用lambda现有iam角色作为原则。函数及其角色必须已经存在。
使用细粒度访问控制
这里的示例使用需要用户名和密码的细粒度控件创建可公开访问的es域。这在自由层中不起作用。我还硬编码了用户名和密码,这显然需要修改并作为参数提供
SSM Parameter store
在实际应用中。