

# Kerberos身份验证设置和配置

> 译者：[flink.sojb.cn](https://flink.sojb.cn/)


本文档简要介绍了Flink安全性如何在各种部署机制（独立，YARN或Mesos），文件系统，连接器和状态后台的上下文中工作。

## 目的

Flink Kerberos安全基础架构的主要目标是：

1.  通过连接器（例如Kafka）为群集内的作业启用安全数据访问
2.  对ZooKeeper进行身份验证（如果配置为使用SASL）
3.  验证Hadoop组件（例如HDFS，HBase）

在生产部署方案中，流式处理作业被理解为长时间运行（几天/几周/几个月），并且能够在作业的整个生命周期中对安全数据源进行身份验证。与Hadoop授权令牌或票证缓存条目不同，Kerberos键盘不会在该时间范围内到期。

当前实现支持使用已配置的keytab凭据或Hadoop授权令牌运行Flink集群（JobManager / TaskManager / jobs）。请记住，所有作业都共享为给定群集配置的凭据。要为特定作业使用不同的Keys表，只需启动具有不同配置的单独Flink群集。许多Flink集群可以在YARN或Mesos环境中并行运行。

## Flink Security的工作原理

概念上，Flink程序可能使用第一方或第三方连接器（Kafka，HDFS，Cassandra，Flume，Kinesis等），需要任意身份验证方法（Kerberos，SSL / TLS，用户名/密码等）。虽然满足所有连接器的安全要求是一项持续的努力，但Flink仅为Kerberos身份验证提供一流的支持。Kerberos身份验证支持以下服务和连接器：

*   Kafka（0.9+）
*   HDFS
*   HBase的
*   zookeeper

请注意，可以为每个服务或连接器单独启用Kerberos。例如，用户可以启用Hadoop安全性，而无需为ZooKeeper使用Kerberos，反之亦然。共享数据元是Kerberos凭据的配置，然后由每个组件显式使用。

内部体系结构基于`org.apache.flink.runtime.security.modules.SecurityModule`启动时安装的安全模块（实现）。以下部分介绍了每个安全模块。

### Hadoop安全模块

此模块使用Hadoop `UserGroupInformation`（UGI）类来建立进程范围的_登录用户_上下文。然后，登录用户将用于与Hadoop的所有交互，包括HDFS，HBase和YARN。

如果启用了Hadoop安全性（in `core-site.xml`），则登录用户将具有配置的任何Kerberos凭据。否则，登录用户仅传达启动群集的OS帐户的用户标识。

### JAAS安全模块

此模块为集群提供动态JAAS配置，使配置的Kerberos凭据可用于ZooKeeper，Kafka以及依赖于JAAS的其他此类组件。

请注意，用户还可以使用[Java SE文档中](http://docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/tutorials/LoginConfigFile.html)描述的机制提供静态JAAS配置文件。静态条目会覆盖此模块提供的任何动态条目。

### ZooKeeper安全模块

此模块配置某些与进程范围内的ZooKeeper安全相关的设置，即ZooKeeper服务名称（默认值:) `zookeeper`和JAAS登录上下文名称（默认值:) `Client`。

## 部署模式

以下是特定于每种部署模式的一些信息。

### 独立模式

在独立/集群模式下运行安全Flink集群的步骤：

1.  将与安全相关的配置选项添加到Flink配置文件（在所有群集节点上）（请参阅[此处](config.html#kerberos-based-security)）。
2.  确保keytab文件存在于`security.kerberos.login.keytab`所有群集节点上指示的路径上。
3.  正常部署Flink集群。

### YARN / Mesos模式

在YARN / Mesos模式下运行安全Flink集群的步骤：

1.  将与安全相关的配置选项添加到客户端上的Flink配置文件中（请参阅[此处](config.html#kerberos-based-security)）。
2.  确保Keys表文件存在于`security.kerberos.login.keytab`客户机节点上指示的路径中。
3.  正常部署Flink集群。

在YARN / Mesos模式下，keytab会自动从客户端复制到Flink容器。

有关更多信息，请参阅[YARN安全](https://github.com/apache/hadoop/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/YarnApplicationSecurity.md)文档。

#### 使用`kinit`（仅限YARN）

在YARN模式下，可以仅使用票证缓存（由管理员）部署没有Keys表的安全Flink集群`kinit`。这避免了生成Keys表的复杂性，并避免委托集群管理器。在此方案中，Flink CLI获取Hadoop授权令牌（适用于HDFS和HBase）。主要缺点是群集必然是短暂的，因为生成的委托令牌将过期（通常在一周内）。

使用`kinit`以下命令运行安全Flink集群的步骤：

1.  将与安全相关的配置选项添加到客户端上的Flink配置文件中（请参阅[此处](config.html#kerberos-based-security)）。
2.  使用`kinit`命令登录。
3.  正常部署Flink集群。

## 更多细节

### 凭证续订

使用Kerberos的每个组件都独立负责续订Kerberos票证授予票证（TGT）。当提供Keys表时，Hadoop，ZooKeeper和Kafka都会自动续订TGT。在授权令牌场景中，YARN本身会更新令牌（达到其最长生命周期）。

