Access control in Azure Data Lake Storage Gen1 (Kontrola dostępu w usłudze Azure Data Lake Storage Gen1)
Azure Data Lake Storage Gen1 implementuje model kontroli dostępu pochodzący z systemu plików HDFS, który z kolei pochodzi z modelu kontroli dostępu POSIX. Ten artykuł zawiera podsumowanie podstaw modelu kontroli dostępu dla Data Lake Storage Gen1.
Listy kontroli dostępu do plików i folderów
Istnieją dwa typy list kontroli dostępu (ACL) — Listy ACL dostępu i Domyślne listy ACL.
Listy ACL dostępu: listy te kontrolują dostęp do obiektu. Pliki i foldery mają listy ACL dostępu.
Domyślne listy ACL: „szablon” list ACL skojarzonych z folderem, który określa listy ACL dostępu dla wszelkich elementów podrzędnych, które zostały utworzone w tym folderze. Pliki nie mają domyślnych list ACL.
Zarówno listy ACL dostępu, jak i domyślne listy ACL mają tę samą strukturę.
Uwaga
Zmiana domyślnej listy ACL w lokalizacji nadrzędnej nie wpływa na listę ACL dostępu lub domyślną listę ACL elementów podrzędnych, które już istnieją.
Uprawnienia
Uprawnienia do obiektu systemu plików to uprawnienia do odczytu, zapisu i wykonania. Mogą one być używane w stosunku do plików i folderów, jak pokazano w poniższej tabeli:
File | Folder | |
---|---|---|
Odczyt (R) | Może odczytywać zawartości pliku | Wymaga uprawnień do odczytu i wykonania, aby wyświetlać listę zawartości folderu |
Zapis (W) | Może zapisywać w pliku lub dołączać do pliku | Wymaga uprawnień do zapisu i wykonania, aby tworzyć elementy podrzędne w folderze |
Wykonanie (X) | Nie oznacza niczego w kontekście Data Lake Storage Gen1 | Wymagane w przypadku przechodzenia między elementami podrzędnymi w folderze |
Krótkie formy uprawnień
Skrót RWX służy do wskazywania uprawnień do odczytu, zapisu i wykonania. Istnieje bardziej skondensowana postać liczbowa, w której uprawnienia do odczytu = 4, zapisu = 2 i wykonania = 1, a ich suma reprezentuje uprawnienia. Poniżej przedstawiono kilka przykładów.
Forma liczbowa | Forma krótka | Co to oznacza |
---|---|---|
7 | RWX |
Odczyt (R) + zapis (W) + wykonanie (X) |
5 | R-X |
Odczyt (R) + wykonanie (X) |
4 | R-- |
Read |
0 | --- |
Brak uprawnień |
Uprawnienia nie są dziedziczone
W modelu w stylu POSIX używanym przez Data Lake Storage Gen1 uprawnienia do elementu są przechowywane w samym elemencie. Innymi słowy, uprawnienia dla elementu nie mogą być dziedziczone z elementów nadrzędnych.
Typowe scenariusze dotyczące uprawnień
Poniżej przedstawiono kilka typowych scenariuszy, które ułatwiają zrozumienie, które uprawnienia są potrzebne do wykonywania niektórych operacji na koncie Data Lake Storage Gen1.
Operacja | Obiekt | / | Seattle/ | Portland/ | Data.txt |
---|---|---|---|---|---|
Read | Data.txt | --X |
--X |
--X |
R-- |
Dołącz do | Data.txt | --X |
--X |
--X |
-W- |
Usuń | Data.txt | --X |
--X |
-WX |
--- |
Utwórz | Data.txt | --X |
--X |
-WX |
--- |
Lista | / | R-X |
--- |
--- |
--- |
Lista | /Seattle/ | --X |
R-X |
--- |
--- |
Lista | /Seattle/Portland/ | --X |
--X |
R-X |
--- |
Uwaga
Uprawnienia do zapisu dla pliku nie są wymagane do usunięcia go, jeśli dwa poprzednie warunki pozostają spełnione.
Użytkownicy i tożsamości
Każdy plik i folder ma różne uprawnienia do tych tożsamości:
- Użytkownik będący właścicielem
- Grupa będąca właścicielem
- Użytkownicy nazwani
- Grupy nazwane
- Wszyscy pozostali użytkownicy
Tożsamości użytkowników i grup są Microsoft Entra tożsamościami. Dlatego, o ile nie określono inaczej, "użytkownik", w kontekście Data Lake Storage Gen1, może oznaczać użytkownika Microsoft Entra lub Microsoft Entra grupy zabezpieczeń.
Administrator
Administrator ma najwięcej praw wszystkich użytkowników na koncie Data Lake Storage Gen1. Administrator:
- ma uprawnienia RWX do wszystkich plików i folderów;
- może zmieniać uprawnienia do dowolnego pliku lub folderu;
- może zmieniać właściciela lub grupę będącą właścicielem dla dowolnego pliku lub folderu.
Wszyscy użytkownicy będący częścią roli Właściciele konta Data Lake Storage Gen1 są automatycznie administratorami.
Użytkownik będący właścicielem
Użytkownik, który utworzył element, jest automatycznie właścicielem elementu. Użytkownik będący właścicielem może:
- zmieniać uprawnienia dla pliku, którego jest właścicielem;
- zmieniać grupę będącą właścicielem dla pliku, którego jest właścicielem, jeśli użytkownik będący właścicielem jest również członkiem grupy docelowej.
Uwaga
Użytkownik będący właścicielem nie może zmienić użytkownika będącego właścicielem pliku lub folderu. Tylko administratorzy mogą zmieniać użytkowników będących właścicielami pliku lub folderu.
Grupa będąca właścicielem
Tło
W listach ACL POSIX każdy użytkownik jest skojarzony z "grupą podstawową". Na przykład użytkownik "alice" może należeć do grupy "finanse". Alicja może również należeć do wielu grup, ale jedna grupa jest zawsze wyznaczona jako jej grupa główna. W systemie POSIX, gdy Alice tworzy plik, grupa będąca właścicielem tego pliku jest ustawiona na jej grupę podstawową, co w tym przypadku jest "finanse". W przeciwnym razie grupa będąca właścicielem zachowuje się podobnie do przypisanych uprawnień dla innych użytkowników/grup.
Ponieważ nie istnieje "grupa podstawowa" skojarzona z użytkownikami w Data Lake Storage Gen1, grupa będąca właścicielem jest przypisana tak, jak pokazano poniżej.
Przypisywanie grupy właścicieli dla nowego pliku lub folderu
- Przypadek 1: folder główny „/”. Ten folder jest tworzony podczas tworzenia konta Data Lake Storage Gen1. W tym przypadku grupa będąca właścicielem jest ustawiona na identyfikator GUID all-zero. Ta wartość nie zezwala na dostęp. Jest to symbol zastępczy do momentu przypisania takiej grupy.
- Przypadek 2 (każdy inny przypadek): gdy tworzony jest nowy element, grupa będąca właścicielem jest kopiowana z folderu nadrzędnego.
Zmienianie grupy będącą właścicielem
Grupę będącą właścicielem może zmienić:
- każdy administrator;
- użytkownik będący właścicielem, jeśli jest on również członkiem grupy docelowej.
Uwaga
Grupa będąca właścicielem nie może zmienić list kontroli dostępu do pliku lub folderu.
W przypadku kont utworzonych we wrześniu 2018 r. lub przed wrześniem 2018 r. grupa będąca właścicielem została ustawiona na użytkownika, który utworzył konto w przypadku folderu głównego dla sprawy 1 powyżej. Jedno konto użytkownika nie jest prawidłowe w przypadku udzielania uprawnień za pośrednictwem grupy będącą właścicielem, dlatego do tego ustawienia domyślnego nie są przyznawane żadne uprawnienia. To uprawnienie można przypisać do prawidłowej grupy użytkowników.
Algorytm kontroli dostępu
Poniższy pseudokod reprezentuje algorytm sprawdzania dostępu dla kont 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)
Maska
Jak pokazano w algorytmie sprawdzania dostępu, maska ogranicza dostęp do nazwanych użytkowników, grupy właścicieli i nazwanych grup.
Uwaga
W przypadku nowego konta Data Lake Storage Gen1 maska listy ACL dostępu folderu głównego ("/") domyślnie ma wartość RWX.
Atrybut sticky bit
Sticky bit jest bardziej zaawansowaną funkcją systemu plików POSIX. W kontekście Data Lake Storage Gen1 jest mało prawdopodobne, aby bit lepki będzie potrzebny. Podsumowując, jeśli bit sticky jest włączony w folderze, element podrzędny można usunąć lub zmienić nazwę tylko przez użytkownika elementu podrzędnego.
Atrybut sticky bit nie jest wyświetlany w witrynie Azure Portal.
Domyślne uprawnienia do nowych plików i folderów
Gdy nowy plik lub folder jest tworzony w istniejącym folderze, domyślna lista ACL w folderze nadrzędnym określa:
- domyślną listę ACL i listę ACL dostępu folderu podrzędnego;
- listę ACL dostępu pliku podrzędnego (pliki nie mają domyślnej listy ACL);
umask
Podczas tworzenia pliku lub folderu maska umask służy do modyfikowania sposobu ustawiania domyślnych list ACL w elemencie podrzędnym. maska umask to wartość 9-bitowa w folderach nadrzędnych, która zawiera wartość RWX dla użytkownika będącego właścicielem, grupy będącej właścicielem i innych.
Maska umask dla Azure Data Lake Storage Gen1 jest stałą wartością ustawioną na 007. Ta wartość przekłada się na
składnik maski umask | Forma liczbowa | Forma krótka | Znaczenie |
---|---|---|---|
umask.owning_user | 0 | --- |
W przypadku użytkownika, który jest właścicielem, skopiuj domyślną listę kontroli dostępu elementu nadrzędnego do listy ACL dostępu elementu podrzędnego |
umask.owning_group | 0 | --- |
W przypadku grupy będącą właścicielem skopiuj domyślną listę ACL elementu nadrzędnego do listy ACL dostępu elementu podrzędnego |
umask.other | 7 | RWX |
W przypadku innych usuń wszystkie uprawnienia do listy ACL dostępu elementu podrzędnego |
Wartość maski umask używanej przez Azure Data Lake Storage Gen1 skutecznie oznacza, że wartość dla innych nigdy nie jest domyślnie przekazywana dla nowych elementów podrzędnych — niezależnie od tego, co wskazuje domyślna lista ACL.
Poniższy kod pseudokodowy pokazuje, jak maska umask jest stosowana podczas tworzenia list ACL dla elementu podrzędnego.
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 )
Często zadawane pytania dotyczące list ACL w usłudze Data Lake Storage Gen1
Czy muszę włączyć obsługę list ACL?
Nie. Kontrola dostępu za pośrednictwem list ACL jest zawsze włączona dla konta Data Lake Storage Gen1.
Jakie uprawnienia są wymagane do rekursywnego usunięcia folderu i jego zawartości?
- Folder nadrzędny musi mieć uprawnienia do zapisu i wykonania.
- Folder do usunięcia i każdy folder w tym folderze muszą mieć uprawnienia do odczytu, zapisu i wykonania.
Uwaga
Do usuwania plików w folderach nie potrzebujesz uprawnienia do zapisu. Ponadto nigdy nie można usunąć folderu głównego „/”.
Kto jest właścicielem pliku lub folderu?
Twórca pliku lub folderu staje się jego właścicielem.
Jaka grupa zostaje ustawiona jako grupa będąca właścicielem pliku lub folderu w momencie jego tworzenia?
Grupa będąca właścicielem jest kopiowana z grupy będącej właścicielem folderu nadrzędnego, w którym tworzony jest nowy plik lub folder.
Jestem właścicielem pliku, ale nie mam wymaganych uprawnień RWX. Co mam zrobić?
Użytkownik będący właścicielem może zmienić uprawnienia do pliku, aby przydzielić sobie wymagane uprawnienia RWX.
Na listach ACL przeglądanych w witrynie Azure Portal są widoczne nazwy użytkowników, natomiast w przypadku korzystania z interfejsów API wyświetlane są identyfikatory GUID. Dlaczego?
Wpisy w listach ACL są przechowywane jako identyfikatory GUID odpowiadające użytkownikom w Tożsamość Microsoft Entra. Interfejsy API zwracają identyfikator GUID w faktycznej postaci. Witryna Azure Portal stara się ułatwić korzystanie z list ACL, dlatego identyfikatory GUID są w miarę możliwości zamieniane na przyjazne nazwy.
Dlaczego na listach ACL w witrynie Azure Portal są czasami wyświetlane identyfikatory GUID?
Identyfikator GUID jest wyświetlany, gdy użytkownik już nie istnieje w Microsoft Entra. Zwykle dzieje się tak, gdy użytkownik opuścił firmę lub jeśli jego konto zostało usunięte w Tożsamość Microsoft Entra. Upewnij się również, że używasz odpowiedniego identyfikatora do ustawiania list ACL (szczegóły, o których mowa poniżej).
W przypadku korzystania z jednostki usługi jakiego identyfikatora należy użyć do ustawiania list ACL?
W witrynie Azure Portal przejdź do pozycji Tożsamość Microsoft Entra —> Aplikacje dla przedsiębiorstw i wybierz aplikację. Na karcie Przegląd powinien zostać wyświetlony identyfikator obiektu, który powinien być używany podczas dodawania list ACL na potrzeby dostępu do danych (a nie identyfikatora aplikacji).
Czy Data Lake Storage Gen1 obsługuje dziedziczenie list ACL?
Nie, ale domyślne listy kontroli dostępu mogą być używane do ustawienia list ACL dla podrzędnych plików i folderów, które zostały nowo utworzone w folderze nadrzędnym.
Jakie są limity dla wpisów listy ACL w plikach i folderach?
32 list ACL można ustawić dla każdego pliku i na katalog. Listy ACL dostępu i domyślne listy ACL mają własny limit wynoszący 32 wpisy ACL. Jeśli to możliwe, użyj grup zabezpieczeń dla przypisań listy ACL. Przy użyciu grup mniej prawdopodobne jest przekroczenie maksymalnej liczby wpisów listy ACL na plik lub katalog.
Gdzie można dowiedzieć się więcej na temat modelu kontroli dostępu POSIX?
- Listy kontroli dostępu w modelu POSIX w systemie Linux
- Przewodnik po uprawnieniach systemu plików HDFS
- POSIX — często zadawane pytania
- POSIX 1003.1 2008
- POSIX 1003.1 2013
- POSIX 1003.1 2016
- Listy ACL modelu POSIX w systemie Ubuntu