为 Dataproc Metastore Thrift 端点配置 Kerberos

本页面介绍了如何为使用 Thrift 端点协议的 Dataproc Metastore 服务配置 Kerberos。如果您的 Dataproc Metastore 服务使用 gRPC 端点协议,请参阅为 gRPC 端点配置 Kerberos

准备工作

  • 了解 Kerberos 的基础知识。

    在这些说明中,您将使用 Dataproc 集群创建以下 Kerberos 资产:

    • Keytab 文件。
    • krb5.conf 文件。
    • Kerberos 主帐号。

    如需详细了解这些 Kerberos 资源如何与 Dataproc Metastore 服务搭配使用,请参阅关于 Kerberos

  • 创建并托管您自己的 Kerberos KDC,或了解如何使用 Dataproc 集群的本地 KDC。

  • 创建 Cloud Storage 存储桶或获取现有存储分区的访问权限。您必须将 krb5.conf 文件存储在此存储桶中。

网络注意事项

在配置 Kerberos 之前,请考虑以下网络设置:

  • 在 VPC 网络和 KDC 之间建立 IP 连接。您必须执行此操作,才能向 Dataproc Metastore 服务对您的 KDC 文件进行身份验证。

  • 在 KDC 上设置任何必要的防火墙规则。如需允许来自 Dataproc Metastore 的流量,必须使用这些规则。如需了解详情,请参阅服务的防火墙规则

  • 如果您使用的是 VPC Service Controls,则 Secret Manager 密钥和 krb5.conf Cloud Storage 对象必须属于与 Dataproc Metastore 服务位于同一服务边界内的项目。

  • 确定您要使用的 VPC 对等互连网络。您必须使用同一 VPC 对等互连网络配置 Dataproc 集群和 Dataproc Metastore 服务。

必需的角色

如需获取创建带有 Kerberos 的 Dataproc Metastore 所需的权限,请让管理员根据最小权限原则向您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理访问权限

此预定义角色包含 metastore.services.create 权限,创建使用 Kerberos 的 Dataproc Metastore 需要该权限。

您也可以使用自定义角色或其他预定义角色来获取此权限。

如需详细了解特定的 Dataproc Metastore 角色和权限,请参阅使用 IAM 管理访问权限

如需了解详情,请参阅 Dataproc Metastore IAM 和访问权限控制

为 Dataproc Metastore 启用 Kerberos

以下说明介绍了如何为连接到 Dataproc 集群的 Dataproc Metastore 服务配置 Kerberos。

创建 Dataproc 集群并启用 Kerberos

gcloud

如需设置使用 Kerberos 的 Dataproc 集群,请运行以下 gcloud dataproc clusters create 命令:

gcloud dataproc clusters create CLUSTER_NAME \
    --image-version=2.0 \
    --enable-kerberos \
    --scopes 'https://www.googleapis.com/auth/cloud-platform'

替换以下内容:

  • CLUSTER_NAME:您的 Dataproc 集群的名称。

为 kerberos 配置 Dataproc 集群

以下说明介绍了如何使用 SSH 连接到与 Dataproc Metastore 服务关联的 Dataproc 主集群。

之后,您需要修改 hive-site.xml 文件并为服务配置 Kerberos。

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。
  2. 在虚拟机实例列表中,点击 Dataproc 主节点 (your-cluster-name-m) 行中的 SSH

    此时,系统会在节点的主目录中打开一个浏览器窗口。

  3. 打开 /etc/hive/conf/hive-site.xml 文件。

    sudo vim /etc/hive/conf/hive-site.xml
    

    您将看到类似于以下内容的输出:

    <property>
    <name>hive.metastore.kerberos.principal</name>
    <value>PRINCIPAL_NAME</value>
    </property>
    <property>
    <name>hive.metastore.kerberos.keytab.file</name>
    <value>METASTORE_PRINCPAL_KEYTAB</value>
    </property>
    

    您需要将其中的:

    • PRINCIPAL_NAME:主帐号名称,格式为 primary/instance@REALM。例如 hive/test@C.MY-PROJECT.INTERNAL
    • METASTORE_PRINCIPAL_KEYTAB:Hive Metastore keytab 文件的位置。使用以下值 /etc/security/keytab/metastore.service.keytab

创建 keytab 文件

以下说明介绍了如何创建 keytab 文件。

keytab 文件包含一对 Kerberos 正文和一对加密密钥。这可用于使用 Kerberos KDC 对服务主帐号进行身份验证。

创建 keytab 文件

  1. 在 Dataproc SSH 会话中,创建 keytab 和主帐号。

    sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
    sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
    
  2. 在 Dataproc SSH 会话中,创建 keytab 文件并将其上传到 Secret Manager。

    gcloud secrets create SECRET_NAME --replication-policy automatic
    sudo gcloud secrets versions add SECRET_NAME --data-file /etc/security/keytab/metastore.service.keytab

    替换以下内容:

    • SECRET_NAME:您的 Secret 的名称。

更新 krb5.conf 文件

接下来,您必须更新 krb5.conf 文件以将其与您的 Dataproc 集群相关联。

  1. 确定 Dataproc 集群主实例的主要内部 IP 地址。

    gcloud compute instances list
    

    例如,运行此命令会生成类似的输出:

    ~$ gcloud compute instances list --project kerberos-project
    NAME                                                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP    EXTERNAL_IP     STATUS
    cluster-236-m                                        us-central1-c  n2-standard-4               192.0.2.2      *.*.*.*         RUNNING
    ...
    

    在这种情况下,集群的内部 IP 地址为 192.0.2.2

  2. 打开 krb5.conf 文件。

    sudo vim /etc/krb5.conf
    
  3. 在该文件中,将现有 KDC 参数和 admin_server 参数替换为 Dataproc 集群的内部 IP 地址。

    例如,使用前面步骤中的 IP 地址值与此输出类似。

    [realms]
    US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
       kdc = 192.0.2.2
       admin_server = 192.0.2.2
    }
    
  4. /etc/krb5.conf 文件从 Dataproc 主虚拟机上传到 Cloud Storage 存储桶。

    gsutil cp /etc/krb5.conf gs://PATH_TO_KRB5
    

    您需要将其中的:

    • PATH_TO_KRB5:包含 krb5.conf 文件的 Cloud Storage URI。

    上传完成后,复制上传路径。 您在创建 Dataproc Metastore 服务时需要使用它。

授予 IAM 角色和权限

  1. 向 Dataproc Metastore 服务帐号提供访问 keytab 文件的权限。此帐号由 Google 管理,并通过选择包括 Google 提供的角色授权在 IAM 权限界面页面上列出。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
          --role roles/secretmanager.secretAccessor

  2. 向 Dataproc Metastore 服务帐号提供 krb5.conf 文件的访问权限。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
          --role roles/storage.objectViewer

创建使用 Kerberos 的 Dataproc Metastore 服务

创建配置了 Kerberos 文件的新 Dataproc Metastore 服务。

请务必在 VPC 网络中将服务创建为 Dataproc 集群。

gcloud metastore services create SERVICE \
   --location=LOCATION \
   --instance-size=medium \
   --network=VPC_NETWORK \
   --kerberos-principal=KERBEROS_PRINCIPAL \
   --krb5-config=KRB5_CONFIG \
   --keytab=CLOUD_SECRET

替换以下内容:

  • SERVICE:您的 Dataproc Metastore 服务的名称。
  • LOCATION:您的 Dataproc Metastore 服务的位置。
  • VPC_NETWORK:您的 VPC 网络的名称。请使用在 Dataproc 集群中配置的同一网络。
  • KERBEROS_PRINCIPAL:您之前创建的 kerberos 主帐号的名称。
  • KRB5_CONFIGkrb5.config 文件的位置。使用指向您文件的 Cloud Storage 对象 URI。
  • CLOUD_SECRETSecret Manager Secret 版本的相对资源名称。

在您创建集群后,Dataproc Metastore 尝试使用提供的主帐号、keytab 和 krb5.conf 文件连接您的 kerberos 凭据。如果连接失败,则 Dataproc Metastore 创建也会失败。

创建 Dataproc Metastore 服务后,找到 Thrift 端点 URI仓库目录

  1. 通过 SSH 连接到 Dataproc 集群的主实例

  2. 在 SSH 会话中,打开 /etc/hive/conf/hive-site.xml 文件。

    sudo vim /etc/hive/conf/hive-site.xml
    
  3. 在 Dataproc 集群上修改 /etc/hive/conf/hive-site.xml

    <property>
    <name>hive.metastore.uris</name>
    <!-- Update this value. -->
    <value>ENDPOINT_URI</value>
    </property>
    <!-- Add this property entry. -->
    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>WAREHOUSE_DIR</value>
    </property>
    
  4. 重启 HiveServer2:

    sudo systemctl restart hive-server2.service
    

在提交作业之前配置 Dataproc

如需运行 Dataproc 作业,您必须将 hive 用户添加到 Hadoop container-executor.cfg 文件中的 allowed.system.users 属性。这样,用户就可以运行查询来访问数据,例如 select * from

  1. 在 SSH 会话中,打开 Hadoop container-executor.cfg 文件。

    sudo vim /etc/hadoop/conf/container-executor.cfg
    

    在每个 Dataproc 节点上添加以下代码行。

    allowed.system.users=hive
    

购买 kerberos 门票

  1. 在连接到 Dataproc Metastore 实例之前,请先获取 kerberos 票证。

    sudo klist -kte /etc/security/keytab/metastore.service.keytab
    sudo kinit -kt /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME
    sudo klist # gets the ticket information.
    sudo hive
    

    替换以下内容:

    • PRINCIPAL_NAME:您的主帐号的名称。

后续步骤