為 Dataproc Metastore gRPC 端點設定 Kerberos

本頁說明如何為使用 gRPC 端點通訊協定的 Dataproc Metastore 服務設定 Kerberos。如果 Dataproc Metastore 服務使用 Thrift 端點通訊協定,請參閱「為 Thrift 端點設定 Kerberos」。

事前準備

  • 瞭解 Kerberos 的基本概念。

    在這些操作說明中,您會使用 Dataproc 叢集建立下列 Kerberos 資產:

    • Keytab 檔案。
    • krb5.conf 檔案。
    • Kerberos 主體。

    如要進一步瞭解這些 Kerberos 資產如何與 Dataproc Metastore 服務搭配運作,請參閱「關於 Kerberos」。

  • 建立及代管自己的 Kerberos KDC,或瞭解如何使用 Dataproc 叢集的本機 KDC。

  • 建立 Cloud Storage bucket 或取得現有 bucket 的存取權。您必須將 krb5.conf 檔案儲存在這個 bucket 中。

必要的角色

如要取得建立已設定 Kerberos 的 Dataproc Metastore 所需的權限,請要求管理員根據最低權限原則,授予您專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備 metastore.services.create 權限, 這是建立已設定 Kerberos 的 Dataproc Metastore 時的必要權限。

您或許還可透過自訂角色或其他預先定義的角色取得這項權限。

如要進一步瞭解 Dataproc Metastore 的特定角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。

詳情請參閱「Dataproc Metastore IAM 和存取權控管」。

為 Dataproc Metastore 設定 Kerberos

以下說明如何為使用 gRPC 端點的 Dataproc Metastore 服務設定 Kerberos。

首先,請建立使用 gRPC 端點的 Dataproc Metastore。接著,建立已設定 Kerberos 的 Dataproc 叢集,並連線至該叢集。

建立具有 gRPC 端點的 Dataproc Metastore 服務

如要建立使用 gRPC 端點的 Dataproc Metastore,請執行下列 gcloud metastore services create 指令:

gcloud

gcloud metastore services create SERVICE \
     --instance-size=medium \
     --endpoint-protocol=grpc

取代:

  • SERVICE:Dataproc Metastore 服務的名稱

建立 Dataproc 叢集並連線至服務

如要建立已設定 Kerberos 的 Dataproc,請執行下列 gcloud dataproc clusters create 指令。

在這個指令中,--enable-kerberos 選項會建立 Kerberos Keytab 檔案、krb5.conf 檔案和主體。這些值都是使用 Dataproc 叢集設定的預設名稱和設定建立。

gcloud

gcloud dataproc clusters create CLUSTER_NAME \
    --project PROJECT_ID \
    --region REGION \
    --image-version 2.0-debian10 \
    --dataproc-metastore DATAPROC_METASTORE_NAME \
    --enable-kerberos \
    --scopes 'https://www.googleapis.com/auth/cloud-platform'

取代:

  • CLUSTER_NAME:Dataproc 叢集名稱。
  • PROJECT_ID:您的 Google Cloud 專案 ID。
  • REGION:您要在其中建立 Dataproc 叢集的 Google Cloud 區域。
  • DATAPROC_METASTORE_NAME:要附加至叢集的 Dataproc Metastore 服務名稱,格式如下:projects/<my_project>/locations/<location>/services/<service_id>

提交工作前設定 Dataproc

如要執行 Dataproc 工作,您必須在 Hadoop container-executor.cfg 檔案中,將 hive 使用者新增至 allowed.system.users 屬性。使用者可以執行查詢來存取資料,例如 select * from

下列操作說明會示範如何透過 SSH 連線至與 Dataproc Metastore 服務相關聯的主要 Dataproc 叢集,並更新 container-executor.cfg 檔案。

  1. 前往 Google Cloud 控制台的「VM Instances」(VM 執行個體) 頁面。
  2. 在虛擬機器執行個體清單中,找到 Dataproc 主要節點 (your-cluster-name-m),然後在該列中按一下「SSH」SSH

    瀏覽器視窗會開啟節點上的主目錄。

  3. 在 ssh 工作階段中,開啟 Hadoop container-executor.cfg 檔案。

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

    在每個 Dataproc 節點上新增下列程式碼。

    allowed.system.users=hive
    

取得 Kerberos 票證

下列操作說明顯示如何產生 Kerberos 票證。

  1. 在 Dataproc 叢集 SSH 工作階段中,產生 Kerberos 票證並連線至 Dataproc Metastore 服務。

    這個指令會使用 Dataproc 叢集產生的預設 keytab 名稱。

    sudo klist -kte /etc/security/keytab/hive.service.keytab
    sudo kinit -kt /etc/security/keytab/hive.service.keytab hive/_HOST@${realm}
    sudo klist # gets the ticket information.
    

    使用 klist -kte 指令列出 keytab 檔案時,系統會擷取 _HOST 值。其中包含主要節點的主機名稱。

(選用) 新增主體

  1. 如要新增主體,請執行下列指令。

    sudo kadmin.local -q "addprinc -randkey PRINCIPAL"
    sudo kadmin.local -q "ktadd -k /etc/security/keytab/hive.service.keytab PRINCIPAL"
    
  2. 取得 Kerberos 票證。

    sudo klist -kte /etc/security/keytab/hive.service.keytab
    sudo kinit -kt /etc/security/keytab/hive.service.keytab PRINCIPAL
    sudo klist
    sudo hive
    

後續步驟