為 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 bucket 或取得現有 bucket 的存取權。您必須將 krb5.conf 檔案儲存在這個 bucket 中。

網路注意事項

設定 Kerberos 前,請先考量下列網路設定:

  • 在虛擬私有雲網路和 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 的特定角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。

詳情請參閱「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 叢集名稱。

設定 Dataproc 叢集的 Kerberos

下列操作說明詳述如何使用 SSH 連線至與 Dataproc Metastore 服務相關聯的主要 Dataproc 叢集。

接著,請修改 hive-site.xml 檔案,並為服務設定 Kerberos。

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

更新 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. 將 Dataproc 主要 VM 中的 /etc/krb5.conf 檔案上傳到 Cloud Storage bucket。

    gcloud storage 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 服務

建立新的 Dataproc Metastore 服務,並使用 Kerberos 檔案設定該服務。

請務必在虛擬私有雲網路中建立服務,與 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:虛擬私有雲網路的名稱。使用 Dataproc 叢集中設定的相同網路。
  • KERBEROS_PRINCIPAL:先前建立的 Kerberos 主體名稱。
  • KRB5_CONFIGkrb5.config 檔案的位置。 使用指向檔案的 Cloud Storage 物件 URI。
  • CLOUD_SECRETSecret Manager 密鑰版本的相對資源名稱。

建立叢集後,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 工作,您必須在 Hadoop container-executor.cfg 檔案中,將 hive 使用者新增至 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:主體的名稱。

後續步驟