Предоставление доступа к Azure Data Lake Gen2 Access только через списки управления доступом (без RBAC)
Моя цель - ограничить доступ к хранилищу Azure Data Lake Gen 2 на уровне каталогов (что должно быть возможным в соответствии с обещаниями Microsoft).
У меня есть два каталога data
, а также sensitive
в контейнере озера данных поколения 2. Для определенного пользователя я хочу предоставить доступ для чтения к каталогуdata
и запретить любой доступ к каталогу sensitive
.
В документации я удалил все назначения RBAC для этого пользователя (в учетной записи хранения, а также в контейнере озера данных), чтобы у меня не было унаследованного доступа для чтения к каталогам. Затем я добавил инструкцию Read-ACL вdata
каталог для этого пользователя.
Мое ожидание:
- Пользователь может напрямую скачивать файлы из
data
каталог. - Пользователь не может получить доступ к файлам
sensitive
дирекция
Реальность: когда я пытаюсь загрузить файлы из каталога данных, я получаю 403 ServiceCode=AuthorizationPermissionMismatch
az storage blob directory download -c containername -s data --account-name XXX --auth-mode login -d "./download" --recursive
RESPONSE Status: 403 This request is not authorized to perform this operation using this permission.
Я ожидаю, что это должно сработать. В противном случае я могу предоставить доступ только путем назначения роли чтения BLOB-объектов хранилища, но это относится ко всем каталогам и файлам в контейнере и не может быть перезаписано операторами ACL. Я здесь что-то не так?
2 ответа
Согласно моему исследованию, если вы хотите предоставить субъекту безопасности доступ на чтение к файлу, нам необходимо предоставить субъекту безопасности разрешения Execute для контейнера и каждой папки в иерархии папок, ведущих к файлу. для более подробной информации, пожалуйста, обратитесь к документу
Я обнаружил, что не могу заставить ACL работать без роли RBAC. В итоге я создал настраиваемую роль RBAC «Storage Blob Container Reader» в своей группе ресурсов только с разрешением «Microsoft.Storage/storageAccounts/blobServices/containers/read», чтобы предотвратить доступ к списку и чтению реальных больших двоичных объектов.