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. W tym artykule przedstawiono 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:
Plik | 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 nic 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-- |
Odczyt |
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 pewnych operacji na koncie Data Lake Storage Gen1.
Operacja | Obiekt | / | Seattle/ | Portland/ | Data.txt |
---|---|---|---|---|---|
Odczyt | 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ą tożsamościami usługi Azure Active Directory (Azure AD). Tak więc, chyba że zostanie zanotowany inaczej, "użytkownik", w kontekście Data Lake Storage Gen1, może oznaczać użytkownika Azure AD lub grupę zabezpieczeń Azure AD.
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 administratorem.
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 poSIX, gdy Alice tworzy plik, grupa będąca właścicielem tego pliku jest ustawiona na jej grupę podstawową, która w tym przypadku jest "finanse". Grupa będąca właścicielem w przeciwnym razie 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 w następujący sposób.
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 takim przypadku grupa będąca właścicielem jest ustawiona na identyfikator GUID typu all-zero. Ta wartość nie zezwala na dostęp. Jest to symbol zastępczy, dopóki taka grupa nie zostanie przypisana.
- 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 właścicieli
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. 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 celu zapewnienia uprawnień za pośrednictwem grupy właścicieli, dlatego żadne uprawnienia nie są przyznawane przez to ustawienie domyślne. 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 ("/") jest domyślnie ustawiona na 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 był 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ę ACL 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 listy ACL dostępu podrzędnego |
Wartość maski umask używana przez Azure Data Lake Storage Gen1 skutecznie oznacza, że wartość dla innych nigdy nie jest domyślnie przesyłana dla nowych elementów podrzędnych — niezależnie od tego, co wskazuje domyślna lista ACL.
Poniższy pseudokod 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 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 na listach ACL są przechowywane jako identyfikatory GUID odpowiadające użytkownikom w usłudze Azure AD. 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 w przypadku, gdy dany użytkownik nie istnieje już w usłudze Azure AD. Zwykle dzieje się tak, gdy użytkownik opuścił firmę lub jego konto w usłudze Azure AD zostało usunięte. Upewnij się również, że używasz odpowiedniego identyfikatora do ustawiania list ACL (szczegóły podane 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 Azure Active Directory —> aplikacje dla przedsiębiorstw i wybierz aplikację. Karta Przegląd powinna wyświetlić identyfikator obiektu i jest to, co należy użyć 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 listy ACL można ustawić na plik 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. Korzystając z 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 uprawnień 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
- Listy ACL korzystające z list kontroli dostępu w systemie Linux