Hadoop 安全性
编辑Hadoop 安全性
编辑HDFS 仓库插件与 Hadoop 的身份验证模型无缝集成。该插件支持以下身份验证方法
|
也意味着“无安全性”,默认启用。使用运行 Elasticsearch 的底层操作系统帐户的信息来通知 Hadoop 当前用户的名称。Hadoop 不会尝试验证此信息。 |
|
通过使用 Kerberos 主体和密钥表向 Hadoop 进行身份验证。与使用 Kerberos 保护的 HDFS 集群交互需要一些额外的步骤来启用(有关更多信息,请参阅主体和密钥表和创建安全的仓库) |
主体和密钥表
编辑在尝试连接到受保护的 HDFS 集群之前,请配置 Elasticsearch 节点将用于向 Kerberos 进行身份验证的 Kerberos 主体和密钥表。为了获得最大安全性并避免触发 Kerberos 重放保护,您应该为每个节点创建一个服务主体,遵循 elasticsearch/hostname@REALM
模式。
在某些情况下,如果同一主体同时从多个客户端进行身份验证,则服务可能会拒绝这些主体的身份验证,因为假设它们可能是重放攻击。如果您在生产环境中使用多个节点运行该插件,则应该为每个节点使用唯一的服务主体。
在每个 Elasticsearch 节点上,使用名称 krb5.keytab
将相应的密钥表文件放在节点配置位置下的 repository-hdfs
目录中。
$> cd elasticsearch/config $> ls elasticsearch.yml jvm.options log4j2.properties repository-hdfs/ scripts/ $> cd repository-hdfs $> ls krb5.keytab
请确保您拥有正确的密钥表!如果您为每个节点使用一个服务主体(例如 elasticsearch/hostname@REALM
),则每个节点都需要其自己的唯一密钥表文件,用于分配给该主机的委托人!
创建安全的仓库
编辑密钥表文件就位并且集群启动后,创建安全的 HDFS 仓库很简单。只需在 security.principal
选项下的仓库设置中添加您将进行身份验证的委托人名称即可。
PUT _snapshot/my_hdfs_repository { "type": "hdfs", "settings": { "uri": "hdfs://namenode:8020/", "path": "/user/elasticsearch/repositories/my_hdfs_repository", "security.principal": "elasticsearch@REALM" } }
如果您为每个节点使用不同的服务主体,则可以在您的委托人名称中使用 _HOST
模式。Elasticsearch 将在运行时自动将该模式替换为节点的主机名
PUT _snapshot/my_hdfs_repository { "type": "hdfs", "settings": { "uri": "hdfs://namenode:8020/", "path": "/user/elasticsearch/repositories/my_hdfs_repository", "security.principal": "elasticsearch/_HOST@REALM" } }
授权
编辑一旦 Elasticsearch 连接并验证到 HDFS,HDFS 将推断一个用户名,用于授权客户端的文件访问。默认情况下,它从用于向服务进行身份验证的 Kerberos 主体的基本部分中选择此用户名。例如,在 elasticsearch@REALM
或 elasticsearch/hostname@REALM
等委托人的情况下,HDFS 为文件访问检查提取的用户名将是 elasticsearch
。
仓库插件不假设 Elasticsearch 的主体名称是什么。Kerberos 主体的主要片段不需要是 elasticsearch
。如果您有更适合您或您组织的委托人或服务名称,请随意使用它!