Ranger と Kerberos を組み合わせて使用する

次の例では、Hadoop、YARN、HIVE リソースへのユーザーのアクセスを制御するために、Ranger および Solr コンポーネントとともに Kerberos 対応の Dataproc クラスタを作成して使用します。

注:

  • Ranger ウェブ UI には、コンポーネント ゲートウェイを介してアクセスできます。

  • Kerberos クラスタを備えた Ranger では、Dataproc は Kerberos ユーザーの領域とインスタンスを削除して、Kerberos ユーザーをシステム ユーザーにマッピングします。たとえば、Kerberos プリンシパル user1/cluster-m@MY.REALM はシステム user1 にマッピングされており、Ranger ポリシーは user1 に対する権限を許可または却下するように定義されています。

  1. Ranger の管理者パスワードを設定します

  2. Kerberos ルート プリンシパル パスワードを設定します

  3. クラスタを作成します。

    1. 次の gcloud コマンドは、ローカル ターミナル ウィンドウまたはプロジェクトの Cloud Shell から実行できます。
      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 の [クラスタ] ページに移動し、クラスタの名前を選択して [クラスタの詳細] ページを開きます。[ウェブ インターフェース] タブをクリックすると、クラスタにインストールされているデフォルト コンポーネントとオプション コンポーネントのウェブ インターフェースへのコンポーネント ゲートウェイ リンクのリストが表示されます。Ranger リンクをクリックします。

  5. admin というユーザー名と Ranger の管理者パスワードを入力して、Ranger にログインします。

  6. Ranger の管理 UI がローカル ブラウザで開きます。

YARN アクセス ポリシー

この例では、YARN root.default キューへのユーザー アクセスを許可および拒否する Ranger ポリシーを作成します。

  1. Ranger 管理 UI から yarn-dataproc を選択します。

  2. [yarn-dataproc Policies] ページで、[Add New Policy] をクリックします。[Create Policy] ページで、次のフィールドに値を入力または選択します。

    • Policy Name: yarn-policy-1
    • Queue: root.default
    • Audit Logging: Yes
    • Allow Conditions:
      • Select User: userone
      • Permissions: すべての権限を付与するには [Select All]
    • Deny Conditions:

      • Select User: usertwo
      • Permissions: すべての権限を拒否する場合は [Select All]

      [Add] をクリックしてポリシーを保存します。このポリシーは、[yarn-dataproc Policies] ページに表示されます。

  3. マスター SSH セッション ウィンドウで Hadoop の MapReduce ジョブを userone として実行します。

    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 アクセス ポリシー

この例では、HDFS /tmp ディレクトリへのユーザー アクセスを許可および拒否する Ranger ポリシーを作成します。

  1. Ranger 管理 UI から hadoop-dataproc を選択します。

  2. [hadoop-dataproc Policies] ページで、[Add New Policy] をクリックします。[Create Policy] ページで、次のフィールドに値を入力または選択します。

    • Policy Name: hadoop-policy-1
    • Resource Path: /tmp
    • Audit Logging: Yes
    • Allow Conditions:
      • Select User: userone
      • Permissions: すべての権限を付与するには [Select All]
    • Deny Conditions:

      • Select User: usertwo
      • Permissions: すべての権限を拒否する場合は [Select All]

      [Add] をクリックしてポリシーを保存します。このポリシーは、[hadoop-dataproc Policies] ページに表示されます。

  3. userone として HDFS /tmp ディレクトリにアクセスします。

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

    1. Ranger UI に、userone による HDFS /tmp ディレクトリへのアクセスが許可されたことが示されます。
  4. HDFS /tmp ディレクトリに usertwo としてアクセスします。

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

    1. Ranger UI に、usertwo による HDFS /tmp ディレクトリへのアクセスが拒否されたことが示されます。

Hive のアクセス ポリシー

この例では、Hive テーブルへのユーザー アクセスを許可または拒否する Ranger ポリシーを作成します。

  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 管理 UI から hive-dataproc を選択します。

  3. [hive-dataproc Policies] ページで、[Add New Policy] をクリックします。[Create Policy] ページで、次のフィールドに値を入力または選択します。

    • Policy Name: hive-policy-1
    • database: default
    • table: employee
    • Hive Column: *
    • Audit Logging: Yes
    • Allow Conditions:
      • Select User: userone
      • Permissions: すべての権限を付与するには [Select All]
    • Deny Conditions:

      • Select User: usertwo
      • Permissions: すべての権限を拒否する場合は [Select All]

      [Add] をクリックしてポリシーを保存します。このポリシーは、[hive-dataproc Policies] ページに表示されます。

  4. userone として、VM マスター SSH セッションから 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. usertwo として、VM マスター SSH セッションから 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 の管理 UI から [hive-dataproc] を選択し、[Masking] タブを選択して [Add New Policy] をクリックします。

    1. [Create Policy] ページで、次のフィールドに値を入力または選択して、従業員名の列をマスクする(無効にする)ポリシーを作成します。

      • Policy Name: hive-masking policy
      • database: default
      • table: employee
      • Hive Column: name
      • Audit Logging: Yes
      • Mask Conditions:
        • Select User: userone
        • Access Types: select(権限の追加 / 編集)
        • Select Masking Option: nullify

          [Add] をクリックしてポリシーを保存します。

  2. Ranger の管理 UI から hive-dataproc を選択し、[Row Level Filter] タブを選択して [Add New Policy] をクリックします。

    1. [Create Policy] ページで、次のフィールドに値を入力または選択して、eid1 ではない行をフィルタリング(返す)ポリシーを作成します。

      • Policy Name: hive-filter policy
      • Hive Database: default
      • Hive Table: employee
      • Audit Logging: Yes
      • Mask Conditions:
        • Select User: userone
        • Access Types: select(権限の追加 / 編集)
        • Row Level Filter: eid != 1(フィルタ式)

          [Add] をクリックしてポリシーを保存します。

    2. userone として、VM マスター SSH セッションから 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)