Hadoop 安全编辑

HDFS 存储库插件与 Hadoop 的身份验证模型无缝集成。插件支持以下身份验证方法

简单

也意味着“无安全”,默认情况下启用。使用来自运行 Elasticsearch 的底层操作系统帐户的信息来告知 Hadoop 当前用户的名称。Hadoop 不会尝试验证此信息。

Kerberos

通过使用 Kerberos 主体和密钥表对 Hadoop 进行身份验证。与使用 Kerberos 保护的 HDFS 集群交互需要一些额外的步骤来启用(有关更多信息,请参阅 主体和密钥表创建安全存储库)。

主体和密钥表编辑

在尝试连接到受保护的 HDFS 集群之前,请预配 Elasticsearch 节点将用于对 Kerberos 进行身份验证的 Kerberos 主体和密钥表。为了最大限度地提高安全性并避免触发 Kerberos 重放保护,您应该为每个节点创建一个服务主体,遵循 elasticsearch/hostname@REALM 的模式。

在某些情况下,如果同一个主体同时从多个客户端进行身份验证,服务可能会拒绝对这些主体的身份验证,因为它们可能是重放攻击。如果您在生产环境中使用多个节点运行插件,则应该为每个节点使用唯一的服务主体。

在每个 Elasticsearch 节点上,将相应的密钥表文件放在节点的配置位置下的 repository-hdfs 目录中,使用名称 krb5.keytab

$> 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@REALMelasticsearch/hostname@REALM 这样的主体的情况下,HDFS 为文件访问检查提取的用户名将是 elasticsearch

存储库插件不假设 Elasticsearch 的主体名称是什么。Kerberos 主体的主要部分不需要是 elasticsearch。如果您有更适合您或您组织的主体或服务名称,请随时使用它!