Menggunakan Ranger dengan Kerberos

Contoh berikut membuat dan menggunakan cluster Dataproc yang mengaktifkan Kerberos dengan komponen Ranger dan Solr untuk mengontrol akses pengguna ke resource Hadoop, YARN, dan HIVE.

Catatan:

  • UI Web Ranger dapat diakses melalui Component Gateway.

  • Di Ranger dengan cluster Kerberos, Dataproc memetakan pengguna Kerberos ke pengguna sistem dengan menghapus instance dan realm pengguna Kerberos. Misalnya, akun utama Kerberos user1/cluster-m@MY.REALM dipetakan ke sistem user1, dan kebijakan Ranger ditentukan untuk mengizinkan atau menolak izin untuk user1.

  1. Siapkan sandi admin Ranger.

  2. Siapkan sandi akun utama root Kerberos.

  3. Buat cluster.

    1. Perintah gcloud berikut dapat dijalankan di jendela terminal lokal atau dari Cloud Shell project.
      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. Setelah cluster berjalan, buka halaman Clusters Dataproc di konsol Google Cloud, lalu pilih nama cluster untuk membuka halaman Cluster details. Klik tab Web Interfaces untuk menampilkan daftar link Component Gateway ke antarmuka web komponen default dan opsional yang diinstal di cluster. Klik link Ranger.

  5. Login ke Ranger dengan memasukkan nama pengguna "admin" dan sandi admin Ranger.

  6. UI admin Ranger akan terbuka di browser lokal.

Kebijakan akses YARN

Contoh ini membuat kebijakan Ranger untuk mengizinkan dan menolak akses pengguna ke antrean root.default YARN.

  1. Pilih yarn-dataproc dari UI Admin Ranger.

  2. Di halaman yarn-dataproc Policies, klik Add New Policy. Di halaman Create Policy, kolom berikut dimasukkan atau dipilih:

    • Policy Name: "yarn-policy-1"
    • Queue: "root.default"
    • Audit Logging: "Ya"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Pilih Semua" untuk memberikan semua izin
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "Pilih Semua" untuk menolak semua izin

      Klik Tambahkan untuk menyimpan kebijakan. Kebijakan ini tercantum di halaman Kebijakan yarn-dataproc:

  3. Jalankan tugas mapreduce Hadoop di jendela sesi SSH master sebagai userone:

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

    1. UI Ranger menunjukkan bahwa userone diizinkan untuk mengirimkan tugas.
  4. Jalankan tugas mapreduce Hadoop dari jendela sesi SSH master VM sebagai usertwo:

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

    1. UI Ranger menunjukkan bahwa usertwo ditolak aksesnya untuk mengirimkan tugas.

Kebijakan akses HDFS

Contoh ini membuat kebijakan Ranger untuk mengizinkan dan menolak akses pengguna ke direktori HDFS /tmp.

  1. Pilih hadoop-dataproc dari UI Admin Ranger.

  2. Di halaman hadoop-dataproc Policies, klik Add New Policy. Di halaman Create Policy, kolom berikut dimasukkan atau dipilih:

    • Policy Name: "hadoop-policy-1"
    • Resource Path: "/tmp"
    • Audit Logging: "Ya"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Pilih Semua" untuk memberikan semua izin
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "Pilih Semua" untuk menolak semua izin

      Klik Tambahkan untuk menyimpan kebijakan. Kebijakan ini tercantum di halaman hadoop-dataproc Policies:

  3. Akses direktori /tmp HDFS sebagai userone:

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

    1. UI Ranger menunjukkan bahwa userone diizinkan mengakses direktori /tmp HDFS.
  4. Akses direktori /tmp HDFS sebagai usertwo:

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

    1. UI Ranger menunjukkan bahwa usertwo ditolak aksesnya ke direktori /tmp HDFS.

Kebijakan akses Hive

Contoh ini membuat kebijakan Ranger untuk mengizinkan dan menolak akses pengguna ke tabel Hive.

  1. Buat tabel employee kecil menggunakan hive CLI di instance master.

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

  2. Pilih hive-dataproc dari UI Admin Ranger.

  3. Di halaman Kebijakan hive-dataproc, klik Tambahkan Kebijakan Baru. Di halaman Create Policy, kolom berikut dimasukkan atau dipilih:

    • Policy Name: "hive-policy-1"
    • database: "default"
    • table: "employee"
    • Hive Column: "*"
    • Audit Logging: "Ya"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Pilih Semua" untuk memberikan semua izin
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "Pilih Semua" untuk menolak semua izin

      Klik Tambahkan untuk menyimpan kebijakan. Kebijakan ini tercantum di halaman Kebijakan hive-dataproc:

  4. Jalankan kueri dari sesi SSH master VM terhadap tabel karyawan Hive sebagai userone:

    userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
    

    1. Kueri userone berhasil:
      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. Jalankan kueri dari sesi SSH master VM terhadap tabel karyawan Hive sebagai usertwo:

    usertwo@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
    

    1. usertwo ditolak aksesnya ke tabel:
      Error: Could not open client transport with JDBC Uri:
      ...
      Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
      

Akses Hive yang Sangat Terperinci

Ranger mendukung Masking dan Filter Tingkat Baris di Hive. Contoh ini dibuat berdasarkan hive-policy-1 sebelumnya dengan menambahkan kebijakan masking dan filter.

  1. Pilih hive-dataproc dari UI Admin Ranger, lalu pilih tab Masking dan klik Add New Policy.

    1. Di halaman Create Policy, kolom berikut dimasukkan atau dipilih untuk membuat kebijakan guna menyamarkan (membatalkan) kolom nama karyawan.:

      • Policy Name: "hive-masking policy"
      • database: "default"
      • table: "employee"
      • Hive Column: "name"
      • Audit Logging: "Ya"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: "select" add/edit permissions
        • Select Masking Option: "nullify"

          Klik Tambahkan untuk menyimpan kebijakan.

  2. Pilih hive-dataproc dari UI Admin Ranger, lalu pilih tab Row Level Filter dan klik Add New Policy.

    1. Di halaman Create Policy, kolom berikut dimasukkan atau dipilih untuk membuat kebijakan guna memfilter (menampilkan) baris dengan eid tidak sama dengan 1:

      • Policy Name: "hive-filter policy"
      • Hive Database: "default"
      • Hive Table: "employee"
      • Audit Logging: "Ya"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: "select" add/edit permissions
        • Row Level Filter: Ekspresi filter "eid != 1"

          Klik Tambahkan untuk menyimpan kebijakan.

    2. Ulangi kueri sebelumnya dari sesi SSH master VM terhadap tabel karyawan Hive sebagai userone:

      userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
      

      1. Kueri akan ditampilkan dengan kolom nama yang disamarkan dan bob (eid=1) difilter dari hasil.:
        Transaction isolation: TRANSACTION_REPEATABLE_READ
        +---------------+----------------+
        | employee.eid  | employee.name  |
        +---------------+----------------+
        | 2             | NULL           |
        | 3             | NULL           |
        +---------------+----------------+
        2 rows selected (0.47 seconds)