本頁說明如何為使用 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 角色:
-
授予 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 keytab 檔案的位置。請使用下列值/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.config
檔案的位置。 使用指向檔案的 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 工作,您必須在 Hadoop container-executor.cfg
檔案中,將 hive
使用者新增至 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
:主體的名稱。