Memigrasikan izin dari Hadoop

Dokumen ini menjelaskan cara memigrasikan izin dari Apache Hadoop Distributed File System (HDFS), Ranger HDFS, dan Apache Hive ke dalam peran Identity and Access Management (IAM) di Cloud Storage atau BigQuery.

Proses migrasi izin terdiri dari langkah-langkah berikut:

  1. Buat file pemetaan akun utama dengan terlebih dahulu membuat file konfigurasi YAML set aturan akun utama. Kemudian, jalankan alat migrasi izin dengan file YAML ruleset utama dengan file metadata HDFS atau Ranger untuk membuat file pemetaan utama.
  2. Buat file pemetaan izin target dengan terlebih dahulu membuat file YAML kumpulan aturan izin. Kemudian, jalankan alat migrasi izin dengan file YAML ruleset izin dan file konfigurasi pemetaan tabel, serta file metadata HDFS atau Ranger, untuk membuat file pemetaan izin target.
  3. Jalankan alat migrasi izin dengan file izin target untuk menerapkan izin ke Cloud Storage atau BigQuery. Anda juga dapat menggunakan skrip Python yang disediakan untuk membuat file Terraform yang dapat Anda gunakan untuk menerapkan izin sendiri.

Sebelum memulai

Sebelum Anda memigrasikan izin, pastikan Anda telah melakukan hal berikut:

Anda juga dapat menemukan skrip generator Terraform dalam file terraform.zip di dalam paket rilis.

Membuat file pemetaan prinsipal

File pemetaan akun utama menentukan aturan pemetaan yang memetakan akun utama dari sumber Anda ke akun utama IAM. Trusted Cloud

Untuk membuat file pemetaan akun utama, Anda harus membuat file YAML set aturan akun utama secara manual terlebih dahulu untuk menentukan cara akun utama dipetakan dari sumber Anda ke akun utama IAM Trusted Cloud . Dalam file YAML set aturan prinsipal, tentukan aturan pemetaan untuk setiap sumber Anda, baik ranger, HDFS, atau keduanya.

Contoh berikut menunjukkan file YAML set aturan prinsipal yang memetakan grup Apache Ranger ke akun layanan di Trusted Cloud by S3NS:

  ranger:
    user_rules:
      - skip: true
    group_rules:
      # Skip internal Ranger groups.
      - skip: true
        when: "group.groupSource == 0"

      # Map all roles to Google Cloud Platform service accounts.
      - map:
          type:
            value: serviceAccount
          email_address:
            expression: "group.name + 'my-service-account@my-project.s3ns-system.iam.gserviceaccount.com'"

    role_rules:
      - skip: true

  hdfs:
    user_rules:
      - skip: true
    group_rules:
      - skip: true
    other_rules:
      - skip: true

Contoh berikut menunjukkan file YAML kumpulan aturan prinsipal yang memetakan pengguna HDFS ke pengguna Trusted Cloud tertentu:

  ranger:
    user_rules:
      - skip: true
    group_rules:
      - skip: true
    role_rules:
      - skip: true

  hdfs:
    user_rules:
      # Skip user named 'example'
      - when: "user.name == 'example'"
        skip: true
      # Map all other users to their name at google.com
      - when: "true"
        map:
          type:
            value: user
          email_address:
            expression: "user.name + '@google.com'"

    group_rules:
      - skip: true
    other_rules:
      - skip: true

Untuk mengetahui informasi selengkapnya tentang sintaksis untuk membuat file YAML set aturan akun utama, lihat File YAML set aturan.

Setelah membuat file YAML set aturan akun utama, upload file tersebut ke bucket Cloud Storage. Anda juga harus menyertakan file HDFS, file Apache Ranger yang dihasilkan oleh alat dwh-migration-dumper, atau keduanya, bergantung pada sumber tempat Anda memigrasikan izin. Kemudian, Anda dapat menjalankan alat migrasi izin untuk membuat file pemetaan prinsipal.

Contoh berikut menunjukkan cara menjalankan alat migrasi izin untuk bermigrasi dari HDFS dan Apache Ranger, sehingga menghasilkan file pemetaan prinsipal bernama principals.yaml.

./dwh-permissions-migration expand \
    --principal-ruleset gs://MIGRATION_BUCKET/principals-ruleset.yaml \
    --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \
    --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \
    --output-principals gs://MIGRATION_BUCKET/principals.yaml

Ganti MIGRATION_BUCKET dengan nama bucket Cloud Storage yang berisi file migrasi Anda.

Setelah menjalankan alat, periksa file principals.yaml yang dihasilkan untuk memverifikasi bahwa file tersebut berisi pokok dari sumber Anda yang dipetakan ke pokok IAM. Trusted CloudAnda dapat mengedit file secara manual sebelum langkah berikutnya.

Buat file izin target

File izin target berisi informasi tentang pemetaan set izin sumber yang ditetapkan di cluster Hadoop ke peran IAM untuk folder terkelola BigQuery atau Cloud Storage. Untuk membuat file izin target, Anda harus membuat file YAML set aturan izin secara manual terlebih dahulu yang menentukan cara pemetaan izin dari Ranger atau HDFS ke Cloud Storage atau BigQuery.

Contoh berikut menerima semua izin Ranger ke Cloud Storage:

gcs:
  ranger_hive_rules:
    - map: {}
      log: true

Contoh berikut menerima semua izin HDFS kecuali akun utama hadoop:

gcs:
  hdfs_rules:
    - when:
        source_principal.name == 'hadoop'
      skip: true
    - map: {}

Contoh berikut menggantikan pemetaan peran default untuk tabel tab0, dan menggunakan default untuk semua izin lainnya

gcs:
  ranger_hive_rules:
    ranger_hive_rules:
      - when: table.name == 'tab0'
        map:
          role:
            value: "roles/customRole"
      - map: {}

Untuk mengetahui informasi selengkapnya tentang sintaksis untuk membuat file YAML set aturan izin, lihat File YAML set aturan.

Setelah membuat file YAML kumpulan aturan izin, upload file tersebut ke bucket Cloud Storage. Anda juga harus menyertakan file HDFS, file Apache Ranger yang dihasilkan oleh alat dwh-migration-dumper, atau keduanya, bergantung pada sumber tempat Anda memigrasikan izin. Anda juga harus menyertakan file YAML konfigurasi tabel dan file pemetaan prinsipal.

Kemudian, Anda dapat menjalankan alat migrasi izin untuk membuat file izin target.

Contoh berikut menunjukkan cara menjalankan alat migrasi izin untuk bermigrasi dari HDFS dan Apache Ranger, dengan file konfigurasi pemetaan tabel dan file pemetaan prinsipal bernama principals.yaml, sehingga menghasilkan file pemetaan prinsipal bernama permissions.yaml.

./dwh-permissions-migration build \
    --permissions-ruleset gs://MIGRATION_BUCKET/permissions-config.yaml \
    --tables gs://MIGRATION_BUCKET/tables/ \
    --principals gs://MIGRATION_BUCKET/principals.yaml \
    --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \
    --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \
    --output-permissions gs://MIGRATION_BUCKET/permissions.yaml

Ganti MIGRATION_BUCKET dengan nama bucket Cloud Storage yang berisi file migrasi Anda.

Setelah menjalankan alat, periksa file permissions.yaml yang dihasilkan untuk memverifikasi bahwa file tersebut berisi izin dari sumber Anda yang dipetakan ke binding IAM Cloud Storage atau BigQuery. Anda dapat mengeditnya secara manual sebelum melanjutkan ke langkah berikutnya.

Menerapkan izin

Setelah membuat file izin target, Anda dapat menjalankan alat migrasi izin untuk menerapkan izin IAM ke Cloud Storage atau BigQuery.

Sebelum menjalankan alat migrasi izin, pastikan Anda telah memenuhi prasyarat berikut:

  • Anda telah membuat akun utama (pengguna, grup, akun layanan) yang diperlukan di Trusted Cloud.
  • Anda telah membuat folder atau tabel terkelola Cloud Storage yang akan menghosting data yang dimigrasikan.
  • Pengguna yang menjalankan alat ini memiliki izin untuk mengelola peran bagi folder atau tabel terkelola Cloud Storage.

Anda dapat menerapkan izin dengan menjalankan perintah berikut:

./dwh-permissions-migration apply \
--permissions gs://MIGRATION_BUCKET/permissions.yaml

Dengan MIGRATION_BUCKET adalah nama bucket Cloud Storage yang berisi file migrasi Anda.

Menerapkan izin sebagai konfigurasi Terraform

Untuk menerapkan izin yang dimigrasikan, Anda juga dapat mengonversi file izin target menjadi konfigurasi Infrastructure-as-Code (IaC) Terraform dan menerapkannya ke Cloud Storage.

  1. Pastikan Anda memiliki Python 3.7 atau yang lebih tinggi.
  2. Buat lingkungan virtual baru dan aktifkan.
  3. Dari direktori permissions-migration/terraform, instal dependensi dari file requirements.txt menggunakan perintah berikut:

    python -m pip install -r requirements.txt
  4. Jalankan perintah generator:

    python tf_generator PATH LOCATION OUTPUT

    Ganti kode berikut:

    • PATH: jalur ke file permissions.yaml yang dihasilkan.
    • LOCATION: lokasi bucket Cloud Storage Anda tempat skrip memeriksa dan membuat folder berdasarkan konfigurasi izin.
    • OUTPUT: jalur ke file output, main.tf.

File YAML ruleset

File YAML ruleset digunakan untuk memetakan akun utama dan peran saat memigrasikan izin dari HDFS atau Apache Ranger ke Trusted Cloud. File YAML set aturan menggunakan Common Expression Language (CEL) untuk menentukan predikat (dengan hasil boolean) dan ekspresi (dengan hasil string).

File YAML set aturan memiliki karakteristik berikut:

  • Aturan pemetaan setiap jenis dieksekusi secara berurutan dari atas ke bawah untuk setiap objek input.
  • Ekspresi CEL memiliki akses ke variabel konteks, dan variabel konteks bergantung pada bagian set aturan. Misalnya, Anda dapat menggunakan variabel user untuk memetakan ke objek pengguna sumber, dan Anda dapat menggunakan variabel group untuk memetakan ke grup.
  • Anda dapat menggunakan ekspresi CEL atau menggunakan nilai statis untuk mengubah nilai default. Misalnya, saat memetakan grup, Anda dapat mengganti nilai output type dari nilai default group ke nilai lain seperti serviceAccount.
  • Harus ada minimal satu aturan yang cocok dengan setiap objek input.

Dalam migrasi izin HDFS atau Apache Ranger, file YAML set aturan dapat digunakan untuk menentukan file pemetaan akun utama atau file pemetaan peran.

Memetakan aturan dalam file YAML set aturan

File YAML ruleset terdiri dari aturan pemetaan yang menentukan cara objek cocok dari sumber ke target Anda selama migrasi izin. Aturan pemetaan dapat berisi bagian atau klausa berikut:

  • when: Klausa predikat yang membatasi penerapan aturan
    • String merepresentasikan ekspresi CEL boolean. Nilai dapat berupa true atau false
    • Aturan hanya berlaku jika klausa when dievaluasi ke true
    • Nilai defaultnya adalah true
  • map: Klausa yang menentukan isi kolom hasil. Nilai untuk klausa ini bergantung pada jenis objek yang diproses dan dapat ditentukan sebagai:
    • expression untuk dievaluasi sebagai string
    • value untuk string konstanta
  • skip: Menentukan bahwa objek input tidak boleh dipetakan
    • Dapat berupa true atau false
  • log: Klausa predikat yang membantu men-debug atau mengembangkan aturan
    • String merepresentasikan ekspresi CEL boolean. Nilai dapat berupa true atau false
    • Nilai defaultnya adalah false
    • Jika disetel ke true, output akan berisi log eksekusi yang dapat digunakan untuk memantau atau mendiagnosis masalah dalam eksekusi

Membuat file YAML set aturan prinsipal

File pemetaan prinsipal digunakan untuk membuat ID prinsipal dengan memberikan nilai untuk email_address dan type.

  • Gunakan email_address untuk menentukan email untuk akun utama Trusted Cloud .
  • Gunakan type untuk menentukan sifat akun utama di Trusted Cloud. Nilai untuk type dapat berupa user, group, atau serviceAccount.

Setiap ekspresi CEL yang digunakan dalam aturan memiliki akses ke variabel yang merepresentasikan objek yang diproses. Kolom dalam variabel didasarkan pada konten file metadata HDFS atau Apache Ranger. Variabel yang tersedia bergantung pada bagian set aturan:

  • Untuk user_rules, gunakan variabel user
  • Untuk group_rules, gunakan variabel group
  • Untuk other_rules, gunakan variabel other
  • Untuk role_rules, gunakan variabel role

Contoh berikut memetakan pengguna dari HDFS ke pengguna di Trusted Cloud dengan nama pengguna mereka, diikuti dengan @google.com sebagai alamat email mereka:

hdfs:
  user_rules:
    # Skip user named 'example'
    - when: "user.name == 'example'"
      skip: true
    # Map all other users to their name at google.com
    - when: "true"
      map:
        type:
          value: user
        email_address:
          expression: "user.name + '@google.com'"

Mengganti pemetaan peran default

Untuk menggunakan prinsipal non-default, Anda dapat melewati atau mengubah pemetaan peran default menggunakan file set aturan.

Contoh berikut menunjukkan cara melewati bagian aturan:

hdfs:
  user_rules:
    - skip: true
  group_rules:
    - skip: true
  other_rules:
    - skip: true

Membuat file YAML set aturan izin

File YAML set aturan izin digunakan untuk membuat file pemetaan izin target. Untuk membuat file YAML set aturan izin, gunakan ekspresi CEL dalam YAML set aturan izin Anda untuk memetakan izin HDFS atau Apache Ranger ke peran Cloud Storage atau BigQuery.

Pemetaan peran default

Peran file HDFS ditentukan oleh izin file sumber:

  • Jika bit w ditetapkan, peran defaultnya adalah writer
  • Jika bit r ditetapkan, peran defaultnya adalah reader
  • Jika kedua bit tidak disetel, peran akan kosong

Ranger HDFS:

  • Jika set akses berisi write, maka peran defaultnya adalah writer
  • Jika set akses berisi read, maka peran defaultnya adalah reader
  • Jika set akses tidak berisi keduanya, peran akan kosong

Ranger:

  • Jika set akses berisi update, create, drop, alter, index, lock, all, write, atau refresh, maka peran defaultnya adalah writer
  • Jika set akses berisi select atau read, maka peran defaultnya adalah reader
  • Jika set akses tidak berisi izin sebelumnya, maka peran tersebut kosong

Cloud Storage:

  • roles/storage.objectUser - Penulis
  • roles/storage.objectViewer - Pembaca

BigQuery:

  • roles/bigquery.dataOwner - Penulis
  • roles/bigquery.dataViewer - Pembaca

Contoh berikut menunjukkan cara menerima pemetaan default tanpa perubahan dalam file YAML ruleset:

ranger_hdfs_rules:
  - map: {}

Mengganti pemetaan peran default

Untuk menggunakan peran non-default, Anda dapat melewati atau mengubah pemetaan peran default menggunakan file ruleset.

Contoh berikut menunjukkan cara mengganti pemetaan peran default menggunakan klausa peta dengan kolom peran menggunakan penyebab nilai:

ranger_hdfs_rules:
  - map:
    role:
      value: "roles/customRole"

Menggabungkan pemetaan izin

Jika beberapa pemetaan izin dibuat untuk resource yang sama yang ditargetkan, pemetaan dengan akses terluas akan digunakan. Misalnya, jika aturan HDFS memberikan peran pembaca kepada akun utama pa1 di lokasi HDFS, dan aturan Ranger memberikan peran penulis kepada akun utama yang sama di lokasi yang sama, maka peran penulis akan ditetapkan.

Kutipan string dalam ekspresi CEL

Gunakan tanda petik "" untuk membungkus seluruh ekspresi CEL dalam YAML. Dalam ekspresi CEL, gunakan tanda kutip tunggal '' untuk mengutip string. Contoh:

"'permissions-migration-' + group.name + '@google.com'"