MST

星途 面试题库

面试题:ElasticSearch集群配置中的网络与安全

假设你正在配置一个生产环境的ElasticSearch集群,需要考虑网络隔离和安全认证。请详细描述如何配置ElasticSearch以实现不同子网间的节点通信,并且启用基于角色的访问控制(RBAC)来确保数据安全和集群管理的权限控制。
41.8万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

1. 网络隔离配置

  1. 子网规划:确定不同子网,每个子网分配特定用途,如一个子网用于数据节点,一个用于主节点等。
  2. Elasticsearch 配置
    • elasticsearch.yml配置文件中,设置network.host参数。例如,如果数据节点在子网192.168.1.0/24,主节点在子网192.168.2.0/24,对于数据节点,设置network.host: 192.168.1.10(假设数据节点IP为192.168.1.10),主节点设置network.host: 192.168.2.10(假设主节点IP为192.168.2.10)。
    • 设置cluster.initial_master_nodes参数,列出主节点的IP地址,例如cluster.initial_master_nodes: ["192.168.2.10"]。这确保节点可以相互发现并组成集群,即使在不同子网。
    • 配置防火墙规则,允许不同子网间节点的Elasticsearch通信端口(默认9200用于HTTP,9300用于节点间通信)相互访问。例如,在数据节点子网的防火墙配置允许192.168.2.0/24子网访问9200和9300端口,在主节点子网防火墙配置允许192.168.1.0/24子网访问相应端口。

2. 基于角色的访问控制(RBAC)配置

  1. 安装X - Pack:X - Pack是Elasticsearch的安全、监控、警报和报告功能的集成包,包含RBAC功能。在Elasticsearch的安装目录下运行bin/elasticsearch-plugin install x - pack - security安装X - Pack插件,安装完成后重启Elasticsearch服务。
  2. 启用安全认证
    • elasticsearch.yml文件中,设置xpack.security.enabled: true启用安全功能。
    • 生成证书和密钥,运行bin/elasticsearch-certutil ca生成CA证书,然后运行bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12为每个节点生成证书,将生成的证书文件复制到各节点的config/certs目录下,并设置合适的权限(例如chown elasticsearch:elasticsearch config/certs/*)。
    • 重启Elasticsearch服务。
  3. 配置角色和权限
    • 使用Kibana的Dev Tools或者curl命令与Elasticsearch交互。首先创建角色,例如创建一个名为readonly的角色,只能读取数据:
PUT _security/role/readonly
{
  "cluster": ["monitor"],
  "indices": [
    {
      "names": ["*"],
      "privileges": ["read"]
    }
  ]
}
  • 创建一个名为admin的角色,拥有所有集群管理和数据操作权限:
PUT _security/role/admin
{
  "cluster": ["all"],
  "indices": [
    {
      "names": ["*"],
      "privileges": ["all"]
    }
  ]
}
  1. 创建用户并分配角色
    • 创建一个只读用户readonly_user,并分配readonly角色:
PUT _security/user/readonly_user
{
  "password": "readonly_password",
  "roles": ["readonly"]
}
  • 创建一个管理员用户admin_user,并分配admin角色:
PUT _security/user/admin_user
{
  "password": "admin_password",
  "roles": ["admin"]
}
  1. 验证访问控制
    • 使用curl命令测试。例如,使用只读用户readonly_user尝试写入数据:
curl -u readonly_user:readonly_password -XPUT "http://your - elasticsearch - host:9200/your - index/_doc/1" -H 'Content - Type: application/json' -d '{"field": "value"}'

预期会收到权限不足的错误。

  • 使用管理员用户admin_user进行相同操作,应能成功写入数据:
curl -u admin_user:admin_password -XPUT "http://your - elasticsearch - host:9200/your - index/_doc/1" -H 'Content - Type: application/json' -d '{"field": "value"}'