开启Kerberos身份认证

Serverless Spark的工作空间中,您可以配置并启用Kerberos身份认证。启用后,在该工作空间中提交Spark任务时,客户端需要进行Kerberos认证,以提升任务执行的安全性。

前提条件

  • 已创建Principal和导出keytab文件,且将其上传至阿里云OSS。

    如果您使用的是EMR on ECS集群,详情请参见Kerberos基础使用

  • 已创建Serverless Spark工作空间,详情请参见管理工作空间

使用限制

  • 当前工作空间只能绑定一个Kerberos集群。

  • 目前仅支持在Spark批任务中启用Kerberos身份认证功能。

  • 数据目录功能暂不支持连接开启Kerberos认证的Hive Metastore服务。

操作流程

步骤一:网络准备

在配置Kerberos身份认证之前,必须先设置好网络,确保Serverless Spark与您的虚拟私有云(VPC)之间网络互通。具体操作,请参见EMR Serverless Spark与其他VPC间网络互通

说明

在添加安全组规则时,建议开放Kerberos服务使用的UDP协议端口(通常为88)。

步骤二:配置Kerberos身份认证

  1. 进入Kerberos身份认证页面。

    1. 登录E-MapReduce控制台

    2. 在左侧导航栏,选择EMR Serverless > Spark

    3. Spark页面,单击目标工作空间名称。

    4. EMR Serverless Spark页面,单击左侧导航栏中的安全中心 > Kerberos 身份认证

  2. 单击绑定 Kerberos

  3. 绑定 Kerberos页面,配置以下信息,单击确定

    参数

    说明

    Kerberos 集群名称

    您可以自定义。

    网络连接

    选择您已创建的网络连接。

    Kerberos krb5.conf

    1. 填写正确的krb5.conf文件的内容。

      krb5.conf文件通常位于服务器的/etc/krb5.conf 路径。根据您的环境,可以通过以下方式获取文件内容:

      • 如果您使用的是EMR Datalake集群的Kerberos服务,可以通过以下步骤获取内容。

        1. 先登录到EMR集群的Master节点,详情请参见登录集群

        2. 执行以下命令,查看并手动复制/etc/krb5.conf 中的内容。

          cat /etc/krb5.conf
        3. 将内容拷贝到Kerberos krb5.conf中。

      • 对于其他EMR集群或自建的Kerberos服务,请将文件中的 hostname 替换为VPC内网IP地址。

    2. (可选)根据网络协议类型确定是否要在krb5.conf文件中添加额外的配置。

      • 如果在步骤一:网络准备时,配置网络连接时开放了88端口的UDP协议,则无需添加额外的配置。

      • 如果在步骤一:网络准备时,配置网络连接用的是TCP协议,则需要在[libdefaults]下添加udp_preference_limit = 1配置。

        image

  4. 单击操作列的启用认证

  5. 在弹出的对话框中,单击确定

步骤三:提交Spark批任务

启用Kerberos身份认证后,提交Spark批任务时需要进行客户端身份验证。如果您在工作空间启用Kerberos身份认证后,直接提交Spark批任务而没有进行额外配置,将会出现错误提示spark.kerberos.keytab and spark.kerberos.principal not configured

  1. 创建Spark批任务,具体操作请参见PySpark开发快速入门

  2. 在新建的开发页签中,需要额外配置以下信息,然后单击运行

    image

    参数

    说明

    网络连接

    选择您在步骤一中新增的网络连接的名称。

    Spark配置

    需要配置以下参数信息。

    spark.files oss://<bucketname>/path/test.keytab
    spark.kerberos.keytab test.keytab
    spark.kerberos.principal <username>@<REALM>

    其中,涉及参数说明如下:

    • spark.files:上传至OSSkeytab文件的完整路径。

    • spark.kerberos.keytab:keytab文件名。

    • spark.kerberos.principal:keytab文件中包含的Principal的名称,用于与Kerberos服务进行身份验证。您可以使用klist -kt <keytab文件>命令查看目标keytab文件中Principal的名称。

    如果您需要连接开启KerberosHive Metastore来获取元数据信息,需要在Spark配置中增加以下信息。

    spark.hive.metastore.sasl.enabled true
    spark.hive.metastore.kerberos.principal hive/<hostname>@<REALM>

    spark.hive.metastore.kerberos.principal 参数需要填写 Hive Metastore 使用的 keytab 文件中存储的 Principal 的实际内容。您可以通过klist -kt <Hive Metastore 使用的 keytab 文件路径> 命令获取参数值。Hive Metastore 使用的 keytab 文件路径,可以在EMR on ECS控制台Hive服务配置页面的hive-site.xml中,通过查看hive.metastore.kerberos.keytab.file参数获取。

    spark.hive.metastore.kerberos.principal参数值的格式如下:

    • 通常格式为 hive/<hostname>@<REALM>,其中 <hostname> 为 Hive Metastore 所在节点的完整域名,您可以通过hostname -f命令获取;<REALM> 为 KDC 的 Realm。

    • 如果 Hive Metastore 的连接地址使用了主机名,您可以将格式简化为 hive/_HOST@<REALM>。在连接时,Spark 会自动将 _HOST 替换为 Hive Metastore 连接地址中的主机名。如果需要配置多个Hive Metastore,则只能采取_HOST的方式。

  3. 运行任务后,在下方的运行记录区域,单击任务操作列的详情

  4. 任务历史中的开发任务页面,您可以查看相关的日志信息。

    image