Kontrol akses di Azure Data Lake Storage Gen1

Azure Data Lake Storage Gen1 mengimplementasikan model kontrol akses yang berasal dari HDFS, yang berasal dari model kontrol akses POSIX. Artikel ini merangkum dasar-dasar model kontrol akses untuk Data Lake Storage Gen1.

Daftar kontrol akses pada file dan folder

Ada dua jenis daftar kontrol akses (ACL), ACL Akses dan ACL Default.

  • ACL Akses: Ini mengontrol akses ke objek. File dan folder memiliki ACL Akses.

  • ACL Default: "Templat" ACL yang terkait dengan folder yang menentukan ACL Akses untuk setiap item anak yang dibuat di bawah folder tersebut. File tidak memiliki ACL Default.

Baik ACL Akses dan ACL Default memiliki struktur yang sama.

Catatan

Mengubah ACL Default pada induk tidak memengaruhi ACL Akses atau ACL Default item anak yang sudah ada.

Izin

Izin pada objek sistem file adalah Baca, Tulis, dan Jalankan, serta dapat digunakan pada file dan folder seperti yang diperlihatkan dalam tabel berikut:

File Folder
Baca (R) Dapat membaca konten file Mengharuskan Baca dan Jalankan untuk mencantumkan isi folder
Tulis (W) Dapat menulis atau menambahkan ke file Mengharuskan Tulis dan Jalankan untuk membuat item anak dalam folder
Jalankan (X) Tidak berarti apa-apa dalam konteks Data Lake Storage Gen1 Diperlukan untuk melintasi item anak folder

Formulir singkat untuk izin

RWX digunakan untuk menunjukkan Baca + Tulis + Jalankan. Ada bentuk numerik yang lebih singkat di mana Baca=4, Tulis=2, dan Jalankan=1, yang jumlahnya mewakili semua izin tersebut. Berikut ini adalah beberapa contohnya.

Formulir numerik Formulir pendek Apa artinya
7 RWX Baca + Tulis + Jalankan
5 R-X Baca + Jalankan
4 R-- Baca
0 --- Tidak ada izin

Izin tidak mewarisi

Dalam model gaya POSIX yang digunakan oleh Data Lake Storage Gen1, izin untuk item disimpan pada item itu sendiri. Dengan kata lain, izin untuk item tidak bisa diwarisi dari item induk.

Berikut ini adalah beberapa skenario umum untuk membantu Anda memahami izin mana yang diperlukan untuk melakukan operasi tertentu pada akun Data Lake Storage Gen1.

Operasi Objek / Seattle/ Portland/ Data.txt
Baca Data.txt --X --X --X R--
Tambahkan ke Data.txt --X --X --X -W-
Hapus Data.txt --X --X -WX ---
Buat Data.txt --X --X -WX ---
Daftar / R-X --- --- ---
Daftar /Seattle/ --X R-X --- ---
Daftar /Seattle/Portland/ --X --X R-X ---

Catatan

Izin tulis pada file tidak diperlukan untuk menghapusnya selama dua kondisi sebelumnya true.

Pengguna dan identitas

Setiap file dan folder memiliki izin yang berbeda untuk identitas ini:

  • Pengguna pemilik
  • Grup pemilik
  • Pengguna bernama
  • Grup bernama
  • Semua pengguna lainnya

Identitas pengguna dan grup adalah identitas Microsoft Entra. Jadi kecuali dinyatakan lain, "pengguna," dalam konteks Data Lake Storage Gen1, dapat berarti pengguna Microsoft Entra atau kelompok keamanan Microsoft Entra.

Pengguna super

Pengguna super memiliki hak terbanyak dari semua pengguna di akun Data Lake Storage Gen1. Pengguna super:

  • Memiliki Izin RWX untuk semua file dan folder.
  • Dapat mengubah izin pada file atau folder mana pun.
  • Dapat mengubah pengguna pemilik atau grup pemilik file atau folder apa pun.

Semua pengguna yang merupakan bagian dari peran Pemilik untuk akun Data Lake Storage Gen1 secara otomatis adalah pengguna super.

Pengguna pemilik

Pengguna yang membuat item secara otomatis adalah pengguna pemilik item. Pengguna pemilik dapat:

  • Mengubah izin file yang dimiliki.
  • Mengubah grup pemilik file yang dimiliki, selama pengguna pemilik juga merupakan anggota grup sasaran.

Catatan

Pengguna pemilik tidak dapat mengubah pengguna pemilik file atau folder. Hanya pengguna super yang dapat mengubah pengguna pemilik file atau folder.

Grup pemilik

Latar belakang

Di POSIX ACL, setiap pengguna dikaitkan dengan "grup utama." Misalnya, pengguna "alice" mungkin termasuk dalam grup "keuangan". Alice mungkin juga termasuk dalam beberapa grup, tetapi satu grup selalu ditetapkan sebagai grup utamanya. Di POSIX, saat Alice membuat file, grup pemilik file tersebut diatur ke grup utamanya, yang dalam hal ini adalah "keuangan". Grup pemilik berperilaku serupa dengan izin yang ditetapkan untuk pengguna/grup lain.

Karena tidak ada "grup utama" yang terkait dengan pengguna di Data Lake Storage Gen1, grup pemilik ditetapkan seperti di bawah ini.

Menetapkan grup pemilik untuk file atau folder baru

  • Kasus 1: Folder akar "/". Folder ini dibuat ketika akun Data Lake Storage Gen1 dibuat. Dalam kasus ini, grup pemilik diatur ke GUID all-zero. Nilai ini tidak mengizinkan akses apa pun. Ini adalah tempat penampung sampai grup ditetapkan.
  • Kasus 2 (Setiap kasus lainnya): Saat item baru dibuat, grup pemilik disalin dari folder induk.

Mengubah grup pemilik

Grup pemilik dapat diubah oleh:

  • Semua pengguna super.
  • Pengguna pemilik, jika pengguna pemilik juga merupakan anggota grup target.

Catatan

Grup pemilik tidak dapat mengubah ACL file atau folder.

Untuk akun yang dibuat pada atau sebelum September 2018, grup pemilik diatur ke pengguna yang membuat akun dalam kasus folder akar untuk Kasus 1, di atas. Satu akun pengguna tidak valid untuk memberikan izin melalui grup pemilik, sehingga tidak ada izin yang diberikan oleh pengaturan default ini. Anda bisa menetapkan izin ini ke grup pengguna yang valid.

Algoritma pemeriksaan akses

Pseudocode berikut ini menunjukkan algoritma pemeriksaan akses untuk akun Data Lake Storage Gen1.

def access_check( user, desired_perms, path ) : 
  # access_check returns true if user has the desired permissions on the path, false otherwise
  # user is the identity that wants to perform an operation on path
  # desired_perms is a simple integer with values from 0 to 7 ( R=4, W=2, X=1). User desires these permissions
  # path is the file or folder
  # Note: the "sticky bit" is not illustrated in this algorithm
  
# Handle super users.
  if (is_superuser(user)) :
    return True

  # Handle the owning user. Note that mask IS NOT used.
  entry = get_acl_entry( path, OWNER )
  if (user == entry.identity)
      return ( (desired_perms & entry.permissions) == desired_perms )

  # Handle the named users. Note that mask IS used.
  entries = get_acl_entries( path, NAMED_USER )
  for entry in entries:
      if (user == entry.identity ) :
          mask = get_mask( path )
          return ( (desired_perms & entry.permmissions & mask) == desired_perms)

  # Handle named groups and owning group
  member_count = 0
  perms = 0
  entries = get_acl_entries( path, NAMED_GROUP | OWNING_GROUP )
  for entry in entries:
    if (user_is_member_of_group(user, entry.identity)) :
      member_count += 1
      perms | =  entry.permissions
  if (member_count>0) :
    return ((desired_perms & perms & mask ) == desired_perms)
 
  # Handle other
  perms = get_perms_for_other(path)
  mask = get_mask( path )
  return ( (desired_perms & perms & mask ) == desired_perms)

Masker

Seperti yang diilustrasikan dalam Algoritma Pemeriksaan Akses, masker membatasi akses untuk pengguna bernama, grup pemilik, dan grup bernama.

Catatan

Untuk akun Data Lake Storage Gen1 baru, masker untuk ACL Akses folder akar ("/") defaultnya ke RWX.

Bit lekat

Bit lekat adalah fitur yang lebih canggih dari sistem file POSIX. Dalam konteks Data Lake Storage Gen1, bit lekat kemungkinan tidak akan diperlukan. Singkatnya, jika bit lengket diaktifkan pada folder, item anak hanya dapat dihapus atau diganti namanya oleh pengguna pemilik item anak.

Bit lekat tidak ditampilkan di portal Azure.

Izin default pada file dan folder baru

Saat file atau folder baru dibuat di bawah folder yang sudah ada, ACL Default pada folder induk menentukan:

  • ACL Default folder anak dan ACL Akses.
  • ACL Akses file anak (file tidak memiliki ACL Default).

umask

Saat membuat file atau folder, umask digunakan untuk memodifikasi bagaimana ACL Default diatur pada item anak. umask adalah nilai 9-bit pada folder induk yang berisi nilai RWX untuk pengguna pemilik, grup pemilik, dan lainnya.

umask untuk Azure Data Lake Storage Gen1 adalah nilai konstan yang diatur ke 007. Nilai ini diterjemahkan menjadi

Komponen umask Formulir numerik Formulir pendek Makna
umask.owning_user 0 --- Untuk pengguna pemilik, salin ACL Default induk ke ACL Akses anak
umask.owning_group 0 --- Untuk grup pemilik, salin ACL Default induk ke ACL Akses anak
umask.other 7 RWX Untuk yang lain, hapus semua izin pada ACL Akses anak

Nilai umask yang digunakan oleh Azure Data Lake Storage Gen1 secara efektif berarti bahwa nilai untuk yang lain tidak pernah ditransmisikan secara default pada anak baru - terlepas dari apa yang ditunjukkan oleh ACL Default.

Pseudocode berikut menunjukkan bagaimana umask diterapkan saat membuat ACL untuk item anak.

def set_default_acls_for_new_child(parent, child):
    child.acls = []
    for entry in parent.acls :
        new_entry = None
        if (entry.type == OWNING_USER) :
            new_entry = entry.clone(perms = entry.perms & (~umask.owning_user))
        elif (entry.type == OWNING_GROUP) :
            new_entry = entry.clone(perms = entry.perms & (~umask.owning_group))
        elif (entry.type == OTHER) :
            new_entry = entry.clone(perms = entry.perms & (~umask.other))
        else :
            new_entry = entry.clone(perms = entry.perms )
        child_acls.add( new_entry )

Pertanyaan umum tentang ACL di Data Lake Storage Gen1

Apakah saya harus mengaktifkan dukungan untuk ACL?

Nomor. Kontrol akses melalui ACL selalu aktif untuk akun Data Lake Storage Gen1.

Izin mana yang diperlukan untuk menghapus folder dan isinya secara rekursif?

  • Folder induk harus memiliki izin Tulis + Jalankan.
  • Folder yang akan dihapus, dan setiap folder di dalamnya, memerlukan izin Baca + Tulis + Jalankan.

Catatan

Anda tidak memerlukan izin Tulis untuk menghapus file di dalam folder. Selain itu, folder akar "/" tidak pernah dapat dihapus.

Siapa pemilik file atau folder?

Pembuat file atau folder menjadi pemiliknya.

Grup mana yang diatur sebagai grup pemilik file atau folder saat pembuatan?

Grup pemilik disalin dari grup pemilik folder induk tempat file atau folder baru dibuat.

Saya adalah pengguna pemilik file, tetapi saya tidak memiliki izin RWX yang saya butuhkan. Apa yang harus saya lakukan?

Pengguna pemilik dapat mengubah izin file untuk memberi diri mereka sendiri izin RWX yang mereka butuhkan.

Ketika saya melihat ACL di portal Azure, saya melihat nama pengguna tetapi melalui API, saya melihat GUID, mengapa begitu?

Entri dalam ACL disimpan sebagai GUID yang sesuai dengan pengguna di Microsoft Entra ID. API mengembalikan GUID apa adanya. Portal Azure mencoba menjadikan ACL lebih mudah digunakan dengan menerjemahkan GUID ke dalam nama yang mudah digunakan jika memungkinkan.

Mengapa saya terkadang melihat GUID di ACL saat saya menggunakan portal Azure?

GUID ditampilkan saat pengguna tidak ada di Microsoft Entra lagi. Biasanya ini terjadi ketika pengguna telah meninggalkan perusahaan atau jika akun mereka telah dihapus di Microsoft Entra ID. Selain itu, pastikan Anda menggunakan ID yang tepat untuk mengatur ACL (detail yang dimaksud ada di bawah).

Saat menggunakan perwakilan layanan, ID apa yang harus saya gunakan untuk mengatur ACL?

Di Portal Microsoft Azure, buka Microsoft Entra ID -> Aplikasi perusahaan dan pilih aplikasi Anda. Tab Ringkasan harus menampilkan ID Objek dan inilah yang harus digunakan saat menambahkan ACL untuk akses data (dan bukan Id Aplikasi).

Apakah Data Lake Storage Gen1 mendukung pewarisan ACL?

Tidak, tetapi ACL Default dapat digunakan untuk mengatur ACL untuk file dan folder anak yang baru dibuat di bawah folder induk.

Apa batasan untuk entri ACL pada file dan folder?

32 ACL dapat diatur per file dan per direktori. Akses dan ACL Default masing-masing memiliki batas entri 32 ACL mereka sendiri. Gunakan kelompok keamanan untuk penugasan ACL jika memungkinkan. Dengan menggunakan grup, Anda kemungkinan tidak akan melebihi jumlah maksimum entri ACL per file atau direktori.

Di mana saya dapat mempelajari selengkapnya tentang model kontrol akses POSIX?

Lihat juga