如何管控AWS Elasticsearch Service及Kibana访问权限?含实例共享配置
如何对AWS Elasticsearch Service及Kibana的访问权限进行管控?
AWS Elasticsearch Service(现在也叫OpenSearch Service,大家习惯上还是常称ES)和Kibana的权限管控是分层的,我之前帮不少团队处理过这类配置,总结下来主要从外部访问控制和内部细粒度权限两个核心层面入手,具体如下:
1. AWS IAM全局管控(最外层屏障)
这一步决定谁能连到ES集群本身:
- IAM角色/用户权限:通过IAM Policy授权用户/角色是否允许调用ES的API(比如
es:ESHttpGet、es:ESHttpPost),甚至可以限定只能访问特定索引。比如给运维团队配置仅能访问logs-*索引的Policy。 - IAM身份验证:开启ES的IAM身份验证后,用户访问Kibana或ES API时需使用AWS IAM凭证(Access Key或STS临时凭证),比用户名密码更安全,尤其适合企业内部协作场景。
2. VPC与网络访问控制
如果集群部署在VPC内,这一步能从网络层面拦截非法访问:
- VPC安全组:配置安全组规则,仅允许指定IP段、EC2实例或VPC内部资源访问ES的443端口(Kibana也通过这个端口访问)。
- 公网访问限制:若需开放公网访问,要在ES集群的「访问策略」中添加IP白名单,只有指定IP才能通过公网连接。注意:公网访问必须配合IAM或用户名密码验证,不能仅依赖IP白名单。
3. ES/OpenSearch内部细粒度权限(基于角色的访问控制)
这部分管控用户在ES内部的操作范围,比如查看哪些索引、能否修改Kibana可视化:
- 自定义角色创建:在Kibana控制台(或API)创建角色,比如
read-only-logs,赋予它对logs-*索引的read权限,以及Kibana的view权限(允许查看Discover、Dashboard)。 - 角色映射:将IAM用户/角色或内置用户映射到自定义角色,用户登录后自动获得对应权限。
- 内置角色复用:ES自带
superuser(全权限)、readall(只读所有索引)等预设角色,可直接使用但要谨慎分配。
4. Kibana专属权限
Kibana本身也有独立的权限隔离机制:
- 空间(Spaces):创建不同Kibana空间,将索引、可视化、仪表盘分配到对应空间,给用户分配仅访问特定空间的权限,实现数据隔离。
- 功能权限:控制用户能否使用Kibana特定功能,比如能否创建仪表盘、管理索引模式等。
共享Kibana链接给他人访问实例数据的配置步骤
要让他人通过浏览器访问你的ES实例Kibana并查看数据,分两种场景配置,步骤清晰明了:
场景1:允许公网访问Kibana
步骤1:配置ES集群访问策略
登录AWS控制台找到你的ES集群,进入「配置」页面,在「访问策略」中添加目标用户的IP白名单(若用IAM验证则指定IAM用户ARN):
{ "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:*", "Resource": "arn:aws:es:region:account-id:domain/your-domain/*", "Condition": { "IpAddress": { "aws:SourceIp": ["x.x.x.x/32", "y.y.y.y/24"] } } }
步骤2:配置IAM权限(IAM验证场景)
- 创建IAM用户(或用现有用户),附加允许访问ES的Policy:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["es:ESHttpGet", "es:ESHttpPost", "es:ESHttpHead"], "Resource": "arn:aws:es:region:account-id:domain/your-domain/*" } ] } - 在Kibana控制台进入「Security」→「Role Mappings」,将该IAM用户映射到只读角色(比如
readall或自定义只读角色)。
步骤3:配置内置用户(用户名密码验证场景)
在Kibana的「Security」→「Users」中创建新用户,分配只读角色,将用户名、密码和Kibana链接一起发给对方。
步骤4:共享Kibana链接
你的Kibana链接格式一般为 https://your-domain-id.region.es.amazonaws.com/_plugin/kibana/,直接发给对方即可。
场景2:仅允许VPC内访问Kibana
如果集群没有公网IP,只能在VPC内访问:
- 让对方通过AWS VPN、Direct Connect或VPC内跳板机连接到你的VPC。
- 配置VPC安全组允许对方的VPC内IP访问ES的443端口。
- 后续IAM/ES角色配置同场景1,最后共享Kibana链接即可。
关键注意事项
- 永远遵循最小权限原则,不要给共享用户分配
superuser权限。 - 公网访问优先使用IAM验证,比单纯IP白名单+用户名密码更安全。
- 定期审计ES访问日志,排查异常访问行为。
内容的提问来源于stack exchange,提问作者Manoharsinh Rana




