下列範例會建立並使用已啟用 Kerberos 的 Dataproc 叢集,其中包含 Ranger 和 Solr 元件,可控管使用者對 Hadoop、YARN 和 HIVE 資源的存取權。
注意:
- 您可以透過元件閘道存取 Ranger 網頁版 UI。 
- 在 Ranger 與 Kerberos 叢集中,Dataproc 會先移除 Kerberos 使用者的領域和執行個體,然後將 Kerberos 使用者對應至系統使用者。舉例來說,Kerberos 主體 - user1/cluster-m@MY.REALM會對應至系統- user1,而 Ranger 政策會定義- user1的權限是否允許。
- 建立叢集。 - 您可以在本機終端機視窗中,或從專案的 Cloud Shell 執行下列 gcloud指令。gcloud dataproc clusters create cluster-name \ --region=region \ --optional-components=SOLR,RANGER \ --enable-component-gateway \ --properties="dataproc:ranger.kms.key.uri=projects/project-id/locations/global/keyRings/keyring/cryptoKeys/key,dataproc:ranger.admin.password.uri=gs://bucket/admin-password.encrypted" \ --kerberos-root-principal-password-uri=gs://bucket/kerberos-root-principal-password.encrypted \ --kerberos-kms-key=projects/project-id/locations/global/keyRings/keyring/cryptoKeys/key 
 
- 您可以在本機終端機視窗中,或從專案的 Cloud Shell 執行下列 
- 叢集執行後,請前往 Google Cloud 控制台的 Dataproc「Clusters」(叢集) 頁面,然後選取叢集名稱開啟「Cluster details」(叢集詳細資料) 頁面。按一下「網路介面」分頁標籤,即可顯示元件閘道連結清單,這些連結會連至叢集上安裝的預設和選用元件網路介面。按一下 Ranger 連結。   
- 輸入「admin」使用者名稱和 Ranger 管理員密碼,登入 Ranger。   
- Ranger 管理員使用者介面會在本地瀏覽器中開啟。   
YARN 存取政策
這個範例會建立 Ranger 政策,允許及拒絕使用者存取 YARN root.default 佇列。
- 從 Ranger 管理使用者介面選取「 - yarn-dataproc」。  
- 在「yarn-dataproc Policies」(yarn-dataproc 政策) 頁面中,按一下「Add New Policy」(新增政策)。 在「建立政策」頁面中,輸入或選取下列欄位: - Policy Name:「yarn-policy-1」
- Queue:「root.default」
- Audit Logging:「Yes」
- Allow Conditions:- Select User:「userone」
- Permissions:選取「全選」即可授予所有權限
 
- Deny Conditions:- Select User:「usertwo」
- Permissions:選取「全部選取」即可拒絕所有權限
   - 按一下「新增」儲存政策。政策會列在「yarn-dataproc Policies」(yarn-dataproc 政策) 頁面中:   
 
- 在主要 SSH 工作階段視窗中,以 userone 身分執行 Hadoop MapReduce 工作: - userone@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples. jar pi 5 10 - Ranger UI 會顯示 userone已獲准提交工作。  
 
- Ranger UI 會顯示 
- 從 VM 主機的 SSH 工作階段視窗執行 Hadoop MapReduce 工作,如下所示: - usertwo- usertwo@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples. jar pi 5 10 - Ranger UI 顯示 usertwo遭拒絕提交工作。  
 
- Ranger UI 顯示 
HDFS 存取政策
這個範例會建立 Ranger 政策,允許及拒絕使用者存取 HDFS /tmp 目錄。
- 從 Ranger 管理使用者介面選取「 - hadoop-dataproc」。  
- 在「hadoop-dataproc Policies」(hadoop-dataproc 政策) 頁面上,按一下「Add New Policy」(新增政策)。 在「建立政策」頁面中,輸入或選取下列欄位: - Policy Name:「hadoop-policy-1」
- Resource Path:「/tmp」
- Audit Logging:「Yes」
- Allow Conditions:- Select User:「userone」
- Permissions:選取「全選」即可授予所有權限
 
- Deny Conditions:- Select User:「usertwo」
- Permissions:選取「全部選取」即可拒絕所有權限
   - 按一下「新增」儲存政策。這項政策會列在「hadoop-dataproc Policies」(hadoop-dataproc 政策) 頁面中:   
 
- 以 userone 身分存取 HDFS - /tmp目錄:- userone@example-cluster-m:~$ hadoop fs -ls /tmp - Ranger UI 顯示 userone已獲准存取 HDFS /tmp 目錄。  
 
- Ranger UI 顯示 
- 以 - usertwo存取 HDFS- /tmp目錄:- usertwo@example-cluster-m:~$ hadoop fs -ls /tmp - Ranger UI 顯示 usertwo遭拒存取 HDFS /tmp 目錄。  
 
- Ranger UI 顯示 
Hive 存取政策
這個範例會建立 Ranger 政策,允許及拒絕使用者存取 Hive 資料表。
- 在主要執行個體上使用 Hive CLI 建立小型 - employee資料表。- hive> CREATE TABLE IF NOT EXISTS employee (eid int, name String); INSERT INTO employee VALUES (1 , 'bob') , (2 , 'alice'), (3 , 'john'); 
- 從 Ranger 管理使用者介面選取「 - hive-dataproc」。  
- 在「hive-dataproc Policies」(hive-dataproc 政策) 頁面中,按一下「Add New Policy」(新增政策)。 在「建立政策」頁面中,輸入或選取下列欄位: - Policy Name:「hive-policy-1」
- database:「default」
- table:「employee」
- Hive Column:「*」
- Audit Logging:「Yes」
- Allow Conditions:- Select User:「userone」
- Permissions:選取「全選」即可授予所有權限
 
- Deny Conditions:- Select User:「usertwo」
- Permissions:選取「全部選取」即可拒絕所有權限
   - 按一下「新增」儲存政策。政策會列在「hive-dataproc Policies」(hive-dataproc 政策) 頁面:   
 
- 從 VM 主機 SSH 工作階段,以 userone 身分對 Hive 員工資料表執行查詢: - userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;" - userone 查詢成功:
Connected to: Apache Hive (version 2.3.6) Driver: Hive JDBC (version 2.3.6) Transaction isolation: TRANSACTION_REPEATABLE_READ +---------------+----------------+ | employee.eid | employee.name | +---------------+----------------+ | 1 | bob | | 2 | alice | | 3 | john | +---------------+----------------+ 3 rows selected (2.033 seconds) 
 
- userone 查詢成功:
- 從 VM 主機的 SSH 工作階段,以 usertwo 身分對 Hive 員工資料表執行查詢: - usertwo@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;" - usertwo 無法存取表格:
Error: Could not open client transport with JDBC Uri: ... Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive" 
 
- usertwo 無法存取表格:
精細的 Hive 存取權
Ranger 支援 Hive 的遮蓋和資料列層級篩選器。這個範例以先前的 hive-policy-1 為基礎,新增了遮蓋和篩選政策。
- 從 Ranger 管理員使用者介面選取 - hive-dataproc,然後選取「遮蓋」分頁,並按一下「新增政策」。  - 在「建立政策」頁面中,輸入或選取下列欄位,建立政策來遮蓋 (設為空值) 員工姓名欄: - Policy Name:「hive-masking policy」
- database:「default」
- table:「employee」
- Hive Column:「name」
- Audit Logging:「Yes」
- Mask Conditions:- Select User:「userone」
- Access Types:「選取」新增/編輯權限
- Select Masking Option:「nullify」  - 按一下「新增」儲存政策。 
 
 
 
- 在 Ranger 管理使用者介面中選取 - hive-dataproc,然後選取「Row Level Filter」分頁,並按一下「Add New Policy」。  - 在「建立政策」頁面中,輸入或選取下列欄位,建立政策來篩選 (傳回) - eid不等於- 1的資料列:- Policy Name:「hive-filter policy」
- Hive Database:「default」
- Hive Table:「employee」
- Audit Logging:「Yes」
- Mask Conditions:- Select User:「userone」
- Access Types:「選取」新增/編輯權限
- Row Level Filter:「eid != 1」篩選運算式  - 按一下「新增」儲存政策。 
 
 
- 在 VM 主機 SSH 工作階段中,以 userone 身分對 Hive 員工資料表重複執行先前的查詢: - userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;" - 查詢會傳回名稱資料欄已遮蓋的結果,並篩除 bob (eid=1):
Transaction isolation: TRANSACTION_REPEATABLE_READ +---------------+----------------+ | employee.eid | employee.name | +---------------+----------------+ | 2 | NULL | | 3 | NULL | +---------------+----------------+ 2 rows selected (0.47 seconds) 
 
- 查詢會傳回名稱資料欄已遮蓋的結果,並篩除 bob (eid=1):