Elasticsearch ABAC 配置:基于患者数据的动态访问控制
Elasticsearch 是医疗行业中常见的搜索和分析平台,用于存储和查询患者数据、诊断记录等敏感信息。在这种高敏感性场景下,基于属性的访问控制(ABAC,Attribute-Based Access Control)能够根据用户属性、数据属性和环境属性实现动态、细粒度的权限管理。相比 RBAC 的静态角色分配,ABAC 更适合医疗行业中复杂的访问控制需求。本文将通过一个医疗数据场景,展示如何在 Elasticsearch 中配置 ABAC,确保患者数据安全。
ABAC 在医疗场景中的价值
在医疗系统中,医生、护士和管理员需要访问患者数据,但权限必须严格受限。例如:
- 医生只能访问自己负责患者的记录(基于
doctor_id
字段)。 - 敏感字段(如
diagnosis_details
)仅对高级医生可见。 - 访问仅限医院内部网络(特定 IP 范围)。
ABAC 通过结合用户属性(职位、ID)、资源属性(患者记录)和环境属性(IP 地址)实现动态权限控制。
前提条件
- Elasticsearch 8.x 已安装,X-Pack 安全功能启用。
- 管理员权限(
elastic
用户凭据)。 - 测试索引
patient-records-*
已创建,包含字段如patient_id
,doctor_id
,diagnosis_details
,record_date
。 - 熟悉 Kibana 或 REST API 操作。
配置 ABAC 的步骤
以下为一个场景:医院希望医生只能访问自己负责的患者记录,敏感字段受限,且访问仅限医院网络(IP 范围 192.168.1.0/24
)。
1. 启用安全功能
在 elasticsearch.yml
中启用安全功能:
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
重启 Elasticsearch 并设置内置用户密码:
bin/elasticsearch-setup-passwords interactive
保存 elastic
用户密码以供后续使用。
2. 创建 ABAC 角色
为医生创建一个角色,限制其访问 patient-records-*