Controllo di accesso in Azure Data Lake Storage Gen1Access control in Azure Data Lake Storage Gen1

Azure Data Lake Storage Gen1 implementa un modello di controllo di accesso derivante da HDFS, che a sua volta deriva dal modello di controllo di accesso POSIX.Azure Data Lake Storage Gen1 implements an access control model that derives from HDFS, which in turn derives from the POSIX access control model. Questo articolo offre un riepilogo delle nozioni di base del modello di controllo di accesso per Data Lake Storage Gen1.This article summarizes the basics of the access control model for Data Lake Storage Gen1.

Elenchi di controllo di accesso per file e cartelleAccess control lists on files and folders

Esistono due tipologie di elenchi di controllo di accesso (ACL): ACL di accesso e ACL predefiniti.There are two kinds of access control lists (ACLs), Access ACLs and Default ACLs.

  • ACL di accesso: questi elenchi controllano l'accesso a un oggetto.Access ACLs: These control access to an object. Sia i file che le cartelle hanno ACL di accesso.Files and folders both have Access ACLs.

  • ACL predefiniti: "modello" di ACL associato a una cartella che determina gli ACL di accesso per tutti gli elementi figlio creati in tale cartella.Default ACLs: A "template" of ACLs associated with a folder that determine the Access ACLs for any child items that are created under that folder. I file non hanno ACL predefiniti.Files do not have Default ACLs.

Sia gli ACL di accesso che gli ACL predefiniti presentano la stessa struttura.Both Access ACLs and Default ACLs have the same structure.

Nota

La modifica dell'ACL predefinito per un elemento padre non influisce sull'ACL di accesso o sull'ACL predefinito degli elementi figlio già esistenti.Changing the Default ACL on a parent does not affect the Access ACL or Default ACL of child items that already exist.

AutorizzazioniPermissions

Le autorizzazioni per un oggetto del file system sono Lettura, Scrittura ed Esecuzione e possono essere usate per file e cartelle come illustrato nella tabella seguente:The permissions on a filesystem object are Read, Write, and Execute, and they can be used on files and folders as shown in the following table:

FileFile CartellaFolder
Lettura (R)Read (R) È possibile leggere il contenuto di un fileCan read the contents of a file Per elencare il contenuto della cartella sono necessarie le autorizzazioni di Lettura ed EsecuzioneRequires Read and Execute to list the contents of the folder
Scrittura (W)Write (W) È possibile scrivere o aggiungere in un fileCan write or append to a file Per creare elementi figlio in una cartella sono necessarie le autorizzazioni di Scrittura ed Esecuzione.Requires Write and Execute to create child items in a folder
Esecuzione (X)Execute (X) Nessun valore nel contesto di Data Lake Storage Gen1Does not mean anything in the context of Data Lake Storage Gen1 È necessaria per attraversare gli elementi figlio di una cartellaRequired to traverse the child items of a folder

Forme brevi per le autorizzazioniShort forms for permissions

La forma RWX viene usata per indicare Lettura + Scrittura + Esecuzione.RWX is used to indicate Read + Write + Execute. Esiste una forma numerica ridotta in cui Lettura=4, Scrittura=2 ed Esecuzione=1 e la cui somma rappresenta le autorizzazioni.A more condensed numeric form exists in which Read=4, Write=2, and Execute=1, the sum of which represents the permissions. Di seguito sono riportati alcuni esempi.Following are some examples.

Forma numericaNumeric form Forma breveShort form SignificatoWhat it means
77 RWX Lettura + Scrittura + EsecuzioneRead + Write + Execute
55 R-X Lettura + EsecuzioneRead + Execute
44 R-- LetturaRead
00 --- Nessuna autorizzazioneNo permissions

Non ereditarietà delle autorizzazioniPermissions do not inherit

Nel modello di tipo POSIX usato da Data Lake Storage Gen1, le autorizzazioni per un elemento vengono archiviate nell'elemento stesso.In the POSIX-style model that's used by Data Lake Storage Gen1, permissions for an item are stored on the item itself. In altri termini, le autorizzazioni per un elemento non sono ereditabili dagli elementi padre.In other words, permissions for an item cannot be inherited from the parent items.

Di seguito sono riportati alcuni scenari comuni che consentono di comprendere quali autorizzazioni sono necessarie per eseguire determinate operazioni su un account Data Lake Storage Gen1.Following are some common scenarios to help you understand which permissions are needed to perform certain operations on a Data Lake Storage Gen1 account.

OperazioneOperation ObjectObject / Seattle/Seattle/ Portland/Portland/ Data.txtData.txt
LetturaRead Data.txtData.txt --X --X --X R--
Accoda aAppend to Data.txtData.txt --X --X --X RW-
EliminareDelete Data.txtData.txt --X --X -WX ---
CreateCreate Data.txtData.txt --X --X -WX ---
ListList / R-X --- --- ---
ListList /Seattle//Seattle/ --X R-X --- ---
ListList /Seattle/Portland//Seattle/Portland/ --X --X R-X ---

Nota

Se vengono soddisfatte le due condizioni precedenti, non sono necessarie autorizzazioni di scrittura per il file per eliminarlo.Write permissions on the file are not required to delete it as long as the previous two conditions are true.

Utenti e identitàUsers and identities

Ogni file e cartella ha autorizzazioni distinte per le entità seguenti:Every file and folder has distinct permissions for these identities:

  • Utente proprietarioThe owning user
  • Gruppo proprietarioThe owning group
  • Utenti non anonimiNamed users
  • Gruppi con nomeNamed groups
  • Tutti gli altri utentiAll other users

Le identità di utenti e gruppi sono identità di Azure Active Directory (Azure AD).The identities of users and groups are Azure Active Directory (Azure AD) identities. Se non viene specificato diversamente, quindi, nel contesto di Data Lake Storage Gen1 un "utente" può essere un utente di Azure AD o un gruppo di sicurezza di Azure AD.So unless otherwise noted, a "user," in the context of Data Lake Storage Gen1, can either mean an Azure AD user or an Azure AD security group.

Utente con privilegi avanzatiThe super-user

Un utente con privilegi avanzati ha diritti superiori rispetto a qualsiasi altro utente nell'account Data Lake Storage Gen1.A super-user has the most rights of all the users in the Data Lake Storage Gen1 account. Un utente con privilegi avanzati:A super-user:

  • Ha autorizzazioni RWX per tutti i file e le cartelle.Has RWX Permissions to all files and folders.
  • Può modificare le autorizzazioni per qualsiasi file o cartella.Can change the permissions on any file or folder.
  • Può modificare l'utente o il gruppo proprietario di qualsiasi file o cartella.Can change the owning user or owning group of any file or folder.

Tutti i membri che fanno parte del ruolo Proprietari per un account Data Lake Storage Gen1 sono automaticamente utenti con privilegi avanzati.All users that are part of the Owners role for a Data Lake Storage Gen1 account are automatically a super-user.

Utente proprietarioThe owning user

L'utente che ha creato l'elemento ne è automaticamente l'utente proprietario.The user who created the item is automatically the owning user of the item. Un utente proprietario può:An owning user can:

  • Modificare le autorizzazioni di un file di sua proprietà.Change the permissions of a file that is owned.
  • Modificare il gruppo proprietario di un file di sua proprietà, a condizione che l'utente proprietario sia anche membro del gruppo di destinazione.Change the owning group of a file that is owned, as long as the owning user is also a member of the target group.

Nota

L'utente proprietario non può modificare l'utente proprietario di un file o di una cartella.The owning user cannot change the owning user of a file or folder. Solo i superuser possono modificare l'utente proprietario di un file o una cartella.Only super-users can change the owning user of a file or folder.

Gruppo proprietarioThe owning group

BackgroundBackground

Negli ACL POSIX ogni utente è associato a un "gruppo primario".In the POSIX ACLs, every user is associated with a "primary group." L'utente "alice", ad esempio, può appartenere al gruppo "finanza".For example, user "alice" might belong to the "finance" group. Alice può anche appartenere a più gruppi, ma uno solo è sempre designato come il suo gruppo primario.Alice might also belong to multiple groups, but one group is always designated as her primary group. Quando Alice crea un file in POSIX, come gruppo proprietario del file viene impostato il gruppo primario di Alice, in questo caso "finanza".In POSIX, when Alice creates a file, the owning group of that file is set to her primary group, which in this case is "finance." Il gruppo proprietario si comporta in modo analogo alle autorizzazioni assegnate per altri utenti o gruppi.The owning group otherwise behaves similarly to assigned permissions for other users/groups.

Poiché non esiste alcun "gruppo primario" associato agli utenti in Data Lake Storage Gen1, il gruppo proprietario viene assegnato come mostrato di seguito.Because there is no “primary group” associated to users in Data Lake Storage Gen1, the owning group is assigned as below.

Assegnazione del gruppo proprietario per un nuovo file o cartellaAssigning the owning group for a new file or folder

  • Caso 1: cartella radice "/".Case 1: The root folder "/". Questa cartella viene creata al momento della creazione di un account Data Lake Storage Gen1.This folder is created when a Data Lake Storage Gen1 account is created. In questo caso, il gruppo proprietario viene impostato su un GUID costituito solo da zeri.In this case, the owning group is set to an all-zero GUID. Questo valore non permette alcun accesso.This value does not permit any access. È un segnaposto fino a quando non viene assegnato un gruppo.It is a placeholder until such time a group is assigned.
  • Caso 2 (qualsiasi altro caso): quando viene creato un nuovo elemento, il gruppo proprietario viene copiato dalla cartella padre.Case 2 (Every other case): When a new item is created, the owning group is copied from the parent folder.

Modifica del gruppo proprietarioChanging the owning group

Il gruppo proprietario può essere modificato da:The owning group can be changed by:

  • Qualsiasi utente con privilegi avanzati.Any super-users.
  • Utente proprietario, se è anche membro del gruppo di destinazioneThe owning user, if the owning user is also a member of the target group.

Nota

Il gruppo proprietario non può modificare gli ACL di un file o di una cartella.The owning group cannot change the ACLs of a file or folder.

Per gli account creati a o prima di settembre 2018, il gruppo proprietario è impostato sull'utente che ha creato l'account nel caso della cartella radice per Caso 1, come descritto sopra.For accounts created on or before September 2018, the owning group was set to the user who created the account in the case of the root folder for Case 1, above. Poiché un singolo account utente non è valido per fornire autorizzazioni tramite il gruppo proprietario, non vengono concesse autorizzazioni tramite questa impostazione predefinita.A single user account is not valid for providing permissions via the owning group, thus no permissions are granted by this default setting. È possibile assegnare questa autorizzazione a un gruppo di utenti valido.You can assign this permission to a valid user group.

Algoritmo di controllo dell'accessoAccess check algorithm

Lo pseudocodice seguente rappresenta l'algoritmo di controllo dell'accesso per gli account Data Lake Storage Gen1.The following pseudocode represents the access check algorithm for Data Lake Storage Gen1 accounts.

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)

La mascheraThe mask

Come illustrato nell'algoritmo di controllo dell'accesso, la maschera limita l'accesso agli utenti non anonimi, il gruppo proprietario, e i gruppi non anonimi.As illustrated in the Access Check Algorithm, the mask limits access for named users, the owning group, and named groups.

Nota

Per un nuovo account Data Lake Storage Gen1, l'impostazione predefinita della maschera per l'elenco di controllo di accesso della cartella radice ("/") è RWX.For a new Data Lake Storage Gen1 account, the mask for the Access ACL of the root folder ("/") defaults to RWX.

Sticky bitThe sticky bit

Lo sticky bit è una funzionalità più avanzata di un file system POSIX.The sticky bit is a more advanced feature of a POSIX filesystem. Nel contesto di Data Lake Storage Gen1, è improbabile che lo sticky bit sia necessario.In the context of Data Lake Storage Gen1, it is unlikely that the sticky bit will be needed. In breve, se lo sticky bit è abilitato in una cartella, un elemento figlio può essere solo eliminato o rinominato dall'utente proprietario dell'elemento figlio.In summary, if the sticky bit is enabled on a folder, a child item can only be deleted or renamed by the child item's owning user.

Lo sticky bit non viene visualizzato nel portale di Azure.The sticky bit is not shown in the Azure portal.

Autorizzazioni predefinite per nuovi file e cartelleDefault permissions on new files and folders

Quando si crea un nuovo file o una nuova cartella in una cartella esistente, l'ACL predefinito per la cartella padre determina quanto segue:When a new file or folder is created under an existing folder, the Default ACL on the parent folder determines:

  • ACL predefinito e ACL di accesso di una cartella figlio.A child folder’s Default ACL and Access ACL.
  • ACL di accesso di un file figlio (i file non hanno un ACL predefinito).A child file's Access ACL (files do not have a Default ACL).

umaskumask

Quando si crea un file o una cartella, la proprietà umask viene usata per modificare la modalità in cui gli ACL predefiniti vengono impostati sull'elemento figlio.When creating a file or folder, umask is used to modify how the default ACLs are set on the child item. umask è un valore a 9 bit per le cartelle padre che contiene un valore RWX per l' utente proprietario, il gruppo proprietarioe altro.umask is a 9-bit value on parent folders that contains an RWX value for owning user, owning group, and other.

Umask per Azure Data Lake Storage Gen1 è un valore costante impostato su 007.The umask for Azure Data Lake Storage Gen1 is a constant value set to 007. Questo valore viene convertito inThis value translates to

componente umaskumask component Forma numericaNumeric form Forma breveShort form SignificatoMeaning
umask.owning_userumask.owning_user 00 --- Per l'utente proprietario, copiare l'ACL predefinito dell'elemento padre nell'ACL di accesso dell'elemento figlioFor owning user, copy the parent's Default ACL to the child's Access ACL
umask.owning_groupumask.owning_group 00 --- Per il gruppo proprietario, copiare l'ACL predefinito dell'elemento padre nell'ACL di accesso dell'elemento figlioFor owning group, copy the parent's Default ACL to the child's Access ACL
umask.otherumask.other 77 RWX Per altri, rimuovere tutte le autorizzazioni sull'ACL di accesso dell'elemento figlioFor other, remove all permissions on the child's Access ACL

Il valore umask usato efficacemente da Azure Data Lake Storage Gen1 significa che il valore per gli altri non viene mai trasmesso per impostazione predefinita sui nuovi elementi figlio, indipendentemente da ciò che indica l'ACL predefinito.The umask value used by Azure Data Lake Storage Gen1 effectively means that the value for other is never transmitted by default on new children - regardless of what the Default ACL indicates.

Lo pseudocodice seguente illustra come viene applicata la proprietà umask quando si creano gli ACL per un elemento figlio.The following pseudocode shows how the umask is applied when creating the ACLs for a child item.

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 )

Domande frequenti sugli elenchi di controllo di accesso in Data Lake Storage Gen1Common questions about ACLs in Data Lake Storage Gen1

È necessario abilitare il supporto per gli ACL?Do I have to enable support for ACLs?

No.No. Il controllo di accesso tramite gli elenchi di controllo di accesso (ACL) è sempre attivo per un account Data Lake Storage Gen1.Access control via ACLs is always on for a Data Lake Storage Gen1 account.

Quali autorizzazioni sono necessarie per eliminare in modo ricorsivo una cartella e il relativo contenuto?Which permissions are required to recursively delete a folder and its contents?

  • Sono necessarie autorizzazioni di Scrittura + Esecuzione per la cartella padre.The parent folder must have Write + Execute permissions.
  • Sono necessarie autorizzazioni di Lettura + Scrittura + Esecuzione per la cartella da eliminare e per ogni cartella al suo interno.The folder to be deleted, and every folder within it, requires Read + Write + Execute permissions.

Nota

Non sono necessarie autorizzazioni di Scrittura per eliminare i file nelle cartelle.You do not need Write permissions to delete files in folders. La cartella radice "/" non può mai essere eliminata.Also, the root folder "/" can never be deleted.

Chi è il proprietario di un file o una cartella?Who is the owner of a file or folder?

Il creatore di un file o una cartella ne diventa il proprietario.The creator of a file or folder becomes the owner.

Quale gruppo viene impostato come gruppo proprietario di un file o una cartella al momento della creazione?Which group is set as the owning group of a file or folder at creation?

Il gruppo proprietario viene copiato da quello della cartella padre in cui si crea il nuovo file o la nuova cartella.The owning group is copied from the owning group of the parent folder under which the new file or folder is created.

Se l'utente proprietario di un file non ha le autorizzazioni RWX di cui ha bisogno,I am the owning user of a file but I don’t have the RWX permissions I need. Cosa devo fare?What do I do?

L'utente proprietario può modificare le autorizzazioni del file in modo da assegnarsi tutte le autorizzazioni RWX necessarie.The owning user can change the permissions of the file to give themselves any RWX permissions they need.

La visualizzazione degli ACL nel portale di Azure mostra i nomi utente, mentre tramite le API vengono visualizzati i GUID. Per quale motivo?When I look at ACLs in the Azure portal I see user names but through APIs, I see GUIDs, why is that?

Le voci negli ACL vengono archiviate come GUID che corrispondono agli utenti in Azure AD.Entries in the ACLs are stored as GUIDs that correspond to users in Azure AD. Le API restituiscono i GUID così come sono.The APIs return the GUIDs as is. Il portale di Azure tenta di semplificare l'uso degli ACL traducendo i GUID in nomi descrittivi, quando è possibile.The Azure portal tries to make ACLs easier to use by translating the GUIDs into friendly names when possible.

Perché a volte negli ACL vengono visualizzati i GUID quando si usa il portale di Azure?Why do I sometimes see GUIDs in the ACLs when I'm using the Azure portal?

Il GUID viene visualizzato quando l'utente non esiste più in Azure AD.A GUID is shown when the user doesn't exist in Azure AD anymore. In genere ciò si verifica se l'utente non fa più parte dell'azienda o l'account è stato eliminato in Azure AD.Usually this happens when the user has left the company or if their account has been deleted in Azure AD.

Data Lake Storage Gen1 supporta l'ereditarietà degli elenchi di controllo di accesso?Does Data Lake Storage Gen1 support inheritance of ACLs?

No, ma gli ACL predefiniti possono essere usati per impostare gli ACL per i file e le cartelle figlio appena creati nella cartella padre.No, but Default ACLs can be used to set ACLs for child files and folder newly created under the parent folder.

Dove è possibile reperire altre informazioni sul modello di controllo di accesso POSIX?Where can I learn more about POSIX access control model?

Vedere ancheSee also