本頁說明如何為使用 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.confCloud Storage 物件必須屬於與 Dataproc Metastore 服務位於相同服務範圍內的專案。決定要使用的 VPC 對等互連網路。您必須使用相同的 VPC 對等互連網路,設定 Dataproc 叢集和 Dataproc Metastore 服務。
必要的角色
如要取得建立具備 Kerberos 的 Dataproc Metastore 所需的權限,請要求管理員根據最低權限原則,授予您專案的下列 IAM 角色:
-
授予 Dataproc Metastore 資源的完整控制權 (
roles/metastore.editor) -
授予所有 Dataproc Metastore 資源的完整存取權,包括身分與存取權管理政策管理權 (
roles/metastore.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備 metastore.services.create 權限,可使用 Kerberos 建立 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。
- 前往 Google Cloud 控制台的「VM Instances」(VM 執行個體) 頁面。
在虛擬機器執行個體清單中,按一下 Dataproc 主要節點 (
your-cluster-name-m) 所在列的「SSH」SSH。瀏覽器視窗會開啟節點上的主目錄。
開啟
/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 金鑰表檔案的位置。請使用下列值/etc/security/keytab/metastore.service.keytab。
建立 keytab 檔案
以下說明如何建立 keytab 檔案。
keytab 檔案包含一對 Kerberos 主體和一對加密金鑰。這項設定用於向 Kerberos KDC 驗證服務主體。
建立 keytab 檔案
在 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"在 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 叢集建立關聯。
判斷 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。開啟
krb5.conf檔案。sudo vim /etc/krb5.conf在檔案中,將現有的
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 }將 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 角色和權限
授予 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
授予 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_CONFIG:krb5.conf檔案的位置。 使用指向檔案的 Cloud Storage 物件 URI。CLOUD_SECRET:Secret Manager 密鑰版本的相對資源名稱。
建立叢集後,Dataproc Metastore 會嘗試使用您提供的主體、keytab 和 krb5.conf 檔案,透過 Kerberos 憑證連線。如果連線失敗,Dataproc Metastore 建立作業也會失敗。
將 Dataproc 叢集連結至 Dataproc Metastore
建立 Dataproc Metastore 服務後,請找出 Thrift 端點 URI 和倉庫目錄。
在 SSH 工作階段中,開啟
/etc/hive/conf/hive-site.xml檔案。sudo vim /etc/hive/conf/hive-site.xml修改 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>重新啟動 HiveServer2:
sudo systemctl restart hive-server2.service
提交工作前設定 Dataproc
如要執行 Dataproc 工作,您必須將 hive 使用者新增至 Hadoop container-executor.cfg 檔案中的 allowed.system.users 屬性。使用者可以執行查詢來存取資料,例如 select * from。
在 SSH 工作階段中,開啟 Hadoop
container-executor.cfg檔案。sudo vim /etc/hadoop/conf/container-executor.cfg在每個 Dataproc 節點上新增下列程式碼。
allowed.system.users=hive
取得 Kerberos 票證
連線至 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:主體的名稱。