Kerberos
1. Kerberos
Ozone 依赖 Kerberos 来保障集群的安全。历史上,HDFS 一直支持在隔离的安全网络中运行,因此可以在不对集群进行安全加固的情况下部署。
本版本的 Ozone 沿用了这一模式,但很快将转向默认安全。当前,若要在 Ozone 集群中启用安全功能,需要将配置 ozone.security.enabled 设置为 true,并将 hadoop.security.authentication 设置为 kerberos。
| 属性 | 值 |
|---|---|
ozone.security.enabled | true |
hadoop.security.authentication | kerberos |
2. Apache Ozone 中的 Kerberos 与 SPNEGO
Apache Ozone 使用 Kerberos 在其各类服务和客户端之间实现强身份验证,确保只有经过认证的用户和服务才能访问 Ozone 资源。
Kerberos 身份验证
Ozone 依赖 Java SASL(简单认证与安全层) 框架,通过 GSS-API 机制完成 Kerberos 身份验证。
在启动时,每个 Ozone 服务角色(如 OM、SCM 或 Datanode)会:
- 使用其服务主体和 keytab 向 Kerberos 密钥分发中心(KDC)进行身份验证。
- 使用位于
/etc/krb5.conf的本地 Kerberos 客户端配置。 - 假定同一 Ozone 集群中的所有主机通常属于同一个 Kerberos realm。
Ozone 同样支持跨 realm 身份验证。如果在不同 Kerberos realm 之间正确配置了跨 realm 信任,不同 realm 中的应用和服务即可进行安全通信。
用于 HTTP 访问的 SPNEGO
SPNEGO(简单且受保护的 GSS-API 协商机制) 是基于 Kerberos 的身份验证机制,用于对 Ozone 服务的 HTTP 访问进行认证,例如 Ozone Manager(OM)的 Web 端点。
SPNEGO 得到了众多现代工具和客户端的广泛支持,包括:
- 网页浏览器(Chrome、Firefox、Safari)
- curl 等命令行工具
使用 curl 配合 SPNEGO 的示例:
curl --negotiate -u : http://om-host.example.com:9874/在此模式下,客户端会自动使用用户的 Kerberos 凭据向 Ozone HTTP 服务进行身份验证,无需输入用户名和密码。
3. 保护 Datanode 的安全
在 Hadoop 中,传统上通过在 Datanode 上创建 Keytab 文件来保障 Datanode 的安全。而在 Ozone 中,我们改用 Datanode 证书。也就是说,在安全的 Ozone 集群中,Datanode 上不需要 Kerberos。
不过,为了方便现有用户,我们仍然支持基于 Kerberos 的传统身份验证方式。相关的 HDFS 配置项如下,需在 hdfs-site.xml 中进行设置:
| 属性 | 说明 |
|---|---|
dfs.datanode.kerberos.principal | Datanode 服务主体。例如 dn/_HOST@REALM.COM |
dfs.datanode.kerberos.keytab.file | Datanode 守护进程用于以其服务主体登录的 Keytab 文件 |
hdds.datanode.http.auth.kerberos.principal | Datanode HTTP 服务器的服务主体。 |
hdds.datanode.http.auth.kerberos.keytab | Datanode HTTP 服务器用于以其服务主体登录的 Keytab 文件 |
Datanode 如何变得安全
在 Ozone 中,当 Datanode 启动并发现 SCM 的地址后,它所做的第一件事就是创建私钥并向 SCM 发送证书请求。
通过 Kerberos 批准证书
SCM 内置了 CA(证书颁发机构),并且需要对这一请求进行批准。如果 Datanode 已经拥有 Kerberos Keytab,那么 SCM 将信任其 Kerberos 凭据并自动签发证书。
手动批准
如果这些是全新的 Datanode,且其上不存在 Kerberos Keytab,那么这些 Datanode 身份证书的请求将进入队列,等待管理员批准(此功能正在开发中,尚未提交到 Ozone 中)。换句话说,信任链由集群管理员来建立。
自动批准
如果你是在 Kubernetes 这类容器编排系统下运行,我们会依赖 Kubernetes 生成一次性令牌,并在启动时提供给 Datanode,以证明 Datanode 容器的身份(该功能同样正在开发中)。
一旦证书签发完成,Datanode 即处于安全状态,Ozone Manager 便可以签发块令牌(Block Token)。如果 Datanode 上没有证书,或者 SCM 的根证书不存在于 Datanode 中,那么 Datanode 将自行注册,下载 SCM 的根证书并获取属于自己的证书。
4. SCM、OM 和 S3G 的 Kerberos 配置
Storage Container Manager
SCM 需要 两个 Kerberos 主体,以及与这两个主体分别对应的 Keytab 文件。
| 属性 | 默认值 | 说明 |
|---|---|---|
hdds.scm.kerberos.principal | SCM/_HOST@REALM | SCM 服务主体。例如 scm/_HOST@REALM.COM |
hdds.scm.kerberos.keytab.file | /etc/security/keytabs/SCM.keytab | SCM 守护进程用于以其服务主体身份登录的 keytab 文件。 |
hdds.scm.http.auth.kerberos.principal | HTTP/_HOST@REALM | 如果为 SCM HTTP 服务器启用 SPNEGO,则为该服务器的服务主体。 |
hdds.scm.http.auth.kerberos.keytab | /etc/security/keytabs/HTTP.keytab | 如果为 SCM HTTP 服务器启用 SPNEGO,则为 SCM HTTP 服务器用于以其服务主体身份登录的 keytab 文件。 |
Ozone Manager
与 SCM 一样,OM 同样需要两个 Kerberos 主体,以及这两个主体各自对应的 keytab 文件。
| 属性 | 默认值 | 说明 |
|---|---|---|
ozone.om.kerberos.principal | OM/_HOST@REALM | OzoneManager 服务主体。例如 om/_HOST@REALM.COM |
ozone.om.kerberos.keytab.file | /etc/security/keytabs/OM.keytab | OM 守护进程用于以其服务主体身份登录的 keytab 文件。 |
ozone.om.http.auth.kerberos.principal | HTTP/_HOST@REALM | 如果为 OM HTTP 服务器启用 SPNEGO,则为 Ozone Manager HTTP 服务器的服务主体。 |
ozone.om.http.auth.kerberos.keytab | /etc/security/keytabs/HTTP.keytab | 如果为 OM HTTP 服务器启用 SPNEGO,则为 OM HTTP 服务器用于以其服务主体身份登录的 keytab 文件。 |
S3 Gateway
S3 Gateway 的网关服务至少需要一个 Kerberos 主体(ozone.s3g.kerberos.principal 和 ozone.s3g.kerberos.keytab.file)。如果为 S3 Gateway HTTP 服务器启用 SPNEGO,请通过 ozone.s3g.http.auth.kerberos.principal 和 ozone.s3g.http.auth.kerberos.keytab 配置第二个主体及其 keytab。以上所有配置均在 ozone-site.xml 中设置。
| 属性 | 默认值 | 说明 |
|---|---|---|
ozone.s3g.kerberos.principal | s3g/_HOST@REALM | S3 Gateway 的 principal。例如 s3g/_HOST@REALM |
ozone.s3g.kerberos.keytab.file | /etc/security/keytabs/s3g.keytab | S3 Gateway 使用的 keytab 文件。例如 /etc/security/keytabs/s3g.keytab |
ozone.s3g.http.auth.kerberos.principal | HTTP/_HOST@REALM | 当为 S3 Gateway HTTP 服务器启用 SPNEGO 时,S3 Gateway 的 principal。例如 HTTP/_HOST@EXAMPLE.COM |
ozone.s3g.http.auth.kerberos.keytab | /etc/security/keytabs/HTTP.keytab | 当为 S3 Gateway HTTP 服务器启用 SPNEGO 时,S3 Gateway 使用的 keytab 文件。 |
note
_HOST 在运行时会被替换为实际的主机名,而 REALM 应替换为你的 Kerberos realm(例如 EXAMPLE.COM)。
评论
登录后参与评论
KnowForge