下列範例會建立並使用已啟用 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) 已從結果中篩除: