本頁說明如何為使用 gRPC 端點通訊協定的 Dataproc Metastore 服務設定 Kerberos。如果 Dataproc Metastore 服務使用 Thrift 端點通訊協定,請參閱「為 Thrift 端點設定 Kerberos」。
事前準備
瞭解 Kerberos 的基本概念。
在這些操作說明中,您會使用 Managed Service for Apache Spark 叢集建立下列 Kerberos 資產:
- Keytab 檔案。
krb5.conf檔案。- Kerberos 主體。
如要進一步瞭解這些 Kerberos 資產如何與 Dataproc Metastore 服務搭配運作,請參閱「關於 Kerberos」。
建立及代管自己的 Kerberos KDC,或瞭解如何使用Managed Service for Apache Spark 叢集的本機 KDC。
建立 Cloud Storage bucket 或取得現有 bucket 的存取權。您必須將
krb5.conf檔案儲存在這個 bucket 中。
必要的角色
如要取得建立已設定 Kerberos 的 Dataproc Metastore 所需的權限,請要求管理員根據最小權限原則,授予您專案的下列 IAM 角色:
- 授予 Dataproc Metastore 資源的完整控制權 (
roles/metastore.editor) - 授予所有 Dataproc Metastore 資源的完整存取權,包括 IAM 政策管理權 (
roles/metastore.admin) - 授予 Dataproc Metastore 中繼資料的 gRPC 讀取/寫入權限 (
roles/metastore.metadataEditor)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備 metastore.services.create 權限,可建立已設定 Kerberos 的 Dataproc Metastore。
詳情請參閱「Dataproc Metastore IAM 和存取權控管」。
為 Dataproc Metastore 設定 Kerberos
以下說明如何為使用 gRPC 端點的 Dataproc Metastore 服務設定 Kerberos。
首先,請建立使用 gRPC 端點的 Dataproc Metastore。接著,您會建立已設定 Kerberos 的 Managed Service for Apache Spark 叢集,並連線至該叢集。
建立具有 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 服務的名稱
建立 Managed Service for Apache Spark 叢集並連線至服務
如要建立已設定 Kerberos 的 Managed Service for Apache Spark,請執行下列 gcloud dataproc clusters create 指令。
在這個指令中,--enable-kerberos 選項會建立 Kerberos Keytab 檔案、krb5.conf 檔案和主體。這些值都是使用 Managed Service for Apache Spark 叢集設定的預設名稱和設定建立。
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:Managed Service for Apache Spark 叢集的名稱。PROJECT_ID:您的 Google Cloud 專案 ID。REGION:您要在其中建立 Managed Service for Apache Spark 叢集的 Google Cloud 區域。DATAPROC_METASTORE_NAME:要附加至叢集的 Dataproc Metastore 服務名稱,格式如下:projects/<my_project>/locations/<location>/services/<service_id>。
提交作業前,請先設定 Managed Service for Apache Spark
如要執行 Managed Service for Apache Spark 工作,您必須將 hive 使用者新增至 Hadoop container-executor.cfg 檔案中的 allowed.system.users 屬性。使用者可以執行查詢來存取資料,例如 select * from。
下列操作說明會逐步介紹如何透過 SSH 連線至與 Dataproc Metastore 服務相關聯的主要 Managed Service for Apache Spark 叢集,並更新 container-executor.cfg 檔案。
- 前往 Google Cloud 控制台的「VM Instances」(VM 執行個體) 頁面。
在虛擬機器執行個體清單中,找到 Managed Service for Apache Spark 主要節點 (
your-cluster-name-m),然後在該列中按一下「SSH」SSH。瀏覽器視窗會開啟節點上的主目錄。
在 SSH 工作階段中,開啟 Hadoop
container-executor.cfg檔案。sudo vim /etc/hadoop/conf/container-executor.cfg在每個 Managed Service for Apache Spark 節點上新增下列行。
allowed.system.users=hive
取得 Kerberos 票證
下列操作說明將說明如何產生 Kerberos 票證。
在 Managed Service for Apache Spark 叢集 SSH 工作階段中,產生 Kerberos 票證並連線至 Dataproc Metastore 服務。
這項指令會使用 Managed Service for Apache Spark 叢集產生的預設 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值。其中包含主要節點的主機名稱。
(選用) 新增主體
如要新增主體,請執行下列指令。
sudo kadmin.local -q "addprinc -randkey PRINCIPAL" sudo kadmin.local -q "ktadd -k /etc/security/keytab/hive.service.keytab PRINCIPAL"取得 Kerberos 票證。
sudo klist -kte /etc/security/keytab/hive.service.keytab sudo kinit -kt /etc/security/keytab/hive.service.keytab PRINCIPAL sudo klist sudo hive