將 Ranger 與 Kerberos 搭配使用

下列範例會建立並使用已啟用 Kerberos 的 Dataproc 叢集,其中包含 RangerSolr 元件,可控管使用者對 Hadoop、YARN 和 HIVE 資源的存取權。

注意:

  • 您可以透過元件閘道存取 Ranger 網頁版 UI。

  • 在 Ranger 與 Kerberos 叢集中,Dataproc 會先移除 Kerberos 使用者的領域和執行個體,然後將 Kerberos 使用者對應至系統使用者。舉例來說,Kerberos 主體 user1/cluster-m@MY.REALM 會對應至系統 user1,而 Ranger 政策會定義 user1 的權限是否允許。

  1. 設定 Ranger 管理員密碼

  2. 設定 Kerberos 根主體密碼

  3. 建立叢集。

    1. 您可以在本機終端機視窗中,或從專案的 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
      
  4. 叢集執行後,請前往 Google Cloud 控制台的 Dataproc「Clusters」(叢集) 頁面,然後選取叢集名稱開啟「Cluster details」(叢集詳細資料) 頁面。按一下「網路介面」分頁標籤,即可顯示元件閘道連結清單,這些連結會連至叢集上安裝的預設和選用元件網路介面。按一下 Ranger 連結。

  5. 輸入「admin」使用者名稱和 Ranger 管理員密碼,登入 Ranger。

  6. Ranger 管理員使用者介面會在本地瀏覽器中開啟。

YARN 存取政策

這個範例會建立 Ranger 政策,允許及拒絕使用者存取 YARN root.default 佇列

  1. 從 Ranger 管理使用者介面選取「yarn-dataproc」。

  2. 在「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 政策) 頁面:

  3. 在主要 SSH 工作階段視窗中,以 userone 身分執行 Hadoop mapreduce 工作:

    userone@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples.
    jar pi 5 10
    

    1. Ranger UI 會顯示 userone 已獲准提交工作。
  4. 從 VM 主機的 SSH 工作階段視窗執行 Hadoop MapReduce 工作,如下所示:usertwo

    usertwo@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples.
    jar pi 5 10

    1. Ranger UI 顯示 usertwo 遭拒絕提交工作。

HDFS 存取政策

這個範例會建立 Ranger 政策,允許及拒絕使用者存取 HDFS /tmp 目錄。

  1. 從 Ranger 管理使用者介面選取「hadoop-dataproc」。

  2. 在「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 政策) 頁面中:

  3. 以 userone 身分存取 HDFS /tmp 目錄:

    userone@example-cluster-m:~$ hadoop fs -ls /tmp
    

    1. Ranger UI 顯示 userone 已獲准存取 HDFS /tmp 目錄。
  4. usertwo 存取 HDFS /tmp 目錄:

    usertwo@example-cluster-m:~$ hadoop fs -ls /tmp
    

    1. Ranger UI 顯示 usertwo 遭拒存取 HDFS /tmp 目錄。

Hive 存取政策

這個範例會建立 Ranger 政策,允許及拒絕使用者存取 Hive 資料表。

  1. 在主要執行個體上使用 Hive CLI 建立小型 employee 資料表。

    hive> CREATE TABLE IF NOT EXISTS employee (eid int, name String); INSERT INTO employee VALUES (1 , 'bob') , (2 , 'alice'), (3 , 'john');
    

  2. 從 Ranger 管理使用者介面選取「hive-dataproc」。

  3. 在「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 政策) 頁面:

  4. 從 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;"
    

    1. 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)
      
  5. 從 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;"
    

    1. usertwo 無法存取表格:
      Error: Could not open client transport with JDBC Uri:
      ...
      Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
      

精細的 Hive 存取權

Ranger 支援 Hive 的遮蓋和資料列層級篩選器。這個範例以先前的 hive-policy-1 為基礎,新增了遮蓋和篩選政策。

  1. 從 Ranger 管理員使用者介面選取 hive-dataproc,然後選取「遮蓋」分頁,並按一下「新增政策」

    1. 在「建立政策」頁面中,輸入或選取下列欄位,建立政策來遮蓋 (設為空值) 員工姓名欄:

      • 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」

          按一下「新增」即可儲存政策。

  2. 在 Ranger 管理使用者介面中選取 hive-dataproc,然後選取「Row Level Filter」分頁,並按一下「Add New Policy」

    1. 在「建立政策」頁面中,輸入或選取下列欄位,建立政策來篩選 (傳回) 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」篩選運算式

          按一下「新增」即可儲存政策。

    2. 在 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;"
      

      1. 查詢會傳回結果,但名稱欄位已遮蓋,且 bob (eid=1) 已從結果中篩除:
        Transaction isolation: TRANSACTION_REPEATABLE_READ
        +---------------+----------------+
        | employee.eid  | employee.name  |
        +---------------+----------------+
        | 2             | NULL           |
        | 3             | NULL           |
        +---------------+----------------+
        2 rows selected (0.47 seconds)