Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы узнаете, как разрешить доступ на чтение к BLOB-объектам на основе тегов индекса BLOB-объектов и настраиваемых атрибутов безопасности с помощью условий управления доступом на основе атрибутов (ABAC). Это может упростить управление доступом к BLOB-объектам.
Предпосылки
Чтобы назначить настраиваемые атрибуты безопасности и добавить условия назначения ролей в клиенте Microsoft Entra, вам потребуется:
- Администратор определения атрибутов и администратор назначения атрибутов
- Администратор управления доступом на основе ролей
Это важно
По умолчанию у глобального администратора и других ролей администратора нет разрешений на чтение, определение и назначение настраиваемых атрибутов безопасности. Если эти предварительные требования не выполнены, атрибуты субъекта или пользователя не отображаются в редакторе условий.
Состояние
В этой статье можно разрешить доступ на чтение к BLOB-объектам, если у пользователя есть настраиваемый атрибут безопасности, соответствующий тегу индекса BLOB-объектов. Это достигается путем добавления условия в назначение роли.
Например, если у Бренды есть атрибут Project=Baker, она может читать только BLOB-объекты с тегом индекса BLOB Project=Baker. Аналогичным образом Chandra может считывать только большие двоичные объекты с использованием Project=Cascade.
Вот как выглядит условие в коде:
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
)
)
Дополнительные сведения об условиях см. в статье "Что такое управление доступом на основе атрибутов Azure( Azure ABAC)?
Шаг 1. Добавление нового настраиваемого атрибута безопасности
Войдите на портал Azure.
Щелкните Microsoft Entra ID>настраиваемые атрибуты безопасности.
Добавьте атрибут с именем
Projectи значениямиBakerиCascade. Или используйте существующий атрибут. Дополнительные сведения см. в разделе "Добавление или отключение настраиваемых атрибутов безопасности" в идентификаторе Microsoft Entra ID.
Шаг 2. Назначение пользовательского атрибута безопасности пользователю
В идентификаторе Microsoft Entra создайте группу безопасности.
Добавьте пользователя в качестве члена группы.
Назначьте пользователю атрибут
Projectсо значениемCascade. Дополнительные сведения см. в разделе "Назначение, обновление, список" или удаление настраиваемых атрибутов безопасности для пользователя.
Не забудьте нажать кнопку "Сохранить" , чтобы сохранить назначение.
Шаг 3. Настройка тегов индекса хранилища и BLOB-объектов
Создайте учетную запись хранения, совместимую с функцией тегов индекса блобов. Дополнительные сведения см. в статье Управление данными BLOB-объектов Azure и их поиск с помощью тегов индекса BLOB-объектов.
Создайте контейнер в учетной записи хранения и задайте для уровня общедоступного доступазначение Private (без анонимного доступа).
Задайте тип проверки подлинности для учетной записи пользователя Azure AD.
Загрузите текстовые файлы в контейнер и установите следующие индексные теги блобов.
Файл Ключ Ценность Текстовый файл Бейкера Проект Пекарь Каскадный текстовый файл Проект Каскад Подсказка
Сведения о символах, разрешенных для тегов индекса BLOB-объектов, см. в разделе "Настройка тегов индекса BLOB-объектов".
Шаг 4. Назначение роли чтения данных BLOB-объектов хранилища с условием
Откройте новую вкладку и войдите на портал Azure.
Откройте группу ресурсов с учетной записью хранения.
Выберите Управление доступом (IAM).
Откройте вкладку Назначения ролей, чтобы просмотреть назначения ролей в этой области.
Нажмите Добавить>Добавить назначение роли.
На вкладке "Роль" выберите роль Чтение данных блобов хранилища.
На вкладке "Участники" выберите созданную ранее группу безопасности.
(Необязательно) В поле "Описание" введите доступ на чтение к blob-объектам, если у пользователя есть настраиваемый атрибут безопасности, соответствующий тегу индекса BLOB-объектов.
На вкладке "Условия" (необязательно) нажмите кнопку "Добавить условие".
Откроется страница "Добавить условие назначения ролей".
В разделе "Добавить действие " нажмите кнопку "Добавить действие".
Появляется область "Выберите действие". Эта панель — отфильтрованный список действий с данными на основе назначения роли, на который будет нацелено ваше условие.
Нажмите кнопку "Чтение большого двоичного объекта" и нажмите кнопку "Выбрать".
В разделе "Выражение сборки" нажмите кнопку "Добавить".
Введите следующие параметры:
Настройки Ценность Источник атрибута Основной Атрибут <attributeset>_Project Оператор StringEquals Вариант Атрибут Источник атрибута Ресурс Атрибут Теги индекса BLOB [значения в ключе] Ключ Проект Примечание.
Если Principal не указан в качестве опции в источнике атрибутов, убедитесь, что вы определили настраиваемый атрибут безопасности, как описано ранее на шаге 1: Добавление нового настраиваемого атрибута безопасности.
Прокрутите до типа редактора и нажмите кнопку "Код".
Состояние должно выглядеть примерно так:
( ( !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) ) OR ( @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ) )Нажмите кнопку "Сохранить", чтобы сохранить условие.
На вкладке "Обзор и назначение" нажмите "Обзор и назначение", чтобы назначить "роль чтения данных BLOB-объектов хранилища" с условием.
Шаг 5. Назначение роли читателя
Повторите предыдущие действия, чтобы назначить роль Читатель для группы безопасности в области группы ресурсов.
Примечание.
Обычно не требуется назначать роль читателя. Однако это сделано, чтобы проверить условие с помощью портала Azure.
Шаг 6. Проверка условия
В новом окне откройте портал Azure.
Войдите как пользователь, созданный с помощью настраиваемого атрибута
Project=Cascadeбезопасности.Откройте созданную учетную запись хранения и контейнер.
Убедитесь, что для метода проверки подлинности задана учетная запись пользователя Azure AD , а не ключ доступа.
Щелкните текстовый файл Бейкера.
Вы не должны иметь возможность просматривать или скачивать объект, и должно отображаться сообщение о неудачной авторизации.
Щелкните текстовый файл Cascade.
Вы должны иметь возможность просматривать и скачивать блоб.
Azure PowerShell
Вы также можете использовать Azure PowerShell для добавления условий назначения ролей. В следующих командах показано, как добавить условия. Дополнительные сведения см. в руководстве: Добавление условия назначения роли для ограничения доступа к blob-объектам с помощью Azure PowerShell.
Добавить условие
Используйте команду Connect-AzAccount и следуйте инструкциям, которые отображаются, чтобы войти в каталог как Администратор управления доступом на основе ролей.
Connect-AzAccountИспользуйте Get-AzRoleAssignment, чтобы получить назначение роли для группы безопасности.
$groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>ConditionЗадайте свойство объекта назначения роли. Обязательно используйте имя набора атрибутов.$groupRoleAssignment.Condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>]))"ConditionVersionЗадайте свойство объекта назначения роли.$groupRoleAssignment.ConditionVersion = "2.0"Используйте Set-AzRoleAssignment для обновления назначения ролей.
Set-AzRoleAssignment -InputObject $groupRoleAssignment
Проверка условия
В новом окне PowerShell используйте команду Connect-AzAccount для входа в качестве члена группы безопасности.
Connect-AzAccountИспользуйте New-AzStorageContext , чтобы задать контекст для учетной записи хранения.
$bearerCtx = New-AzStorageContext -StorageAccountName <accountName>Используйте Get-AzStorageBlob , чтобы попытаться прочитать файл Бейкера.
Get-AzStorageBlob -Container <containerName> -Blob <blobNameBaker> -Context $bearerCtxВы не должны иметь возможности читать объект, и должно отображаться сообщение о неудаче авторизации.
Get-AzStorageBlob : This request is not authorized to perform this operation using this permission. HTTP Status Code: 403 - HTTP Error Message: This request is not authorized to perform this operation using this permission. ...Используйте Get-AzStorageBlob , чтобы попытаться прочитать каскадный файл.
Get-AzStorageBlob -Container <containerName> -Blob <blobNameCascade> -Context $bearerCtx You should be able to read the blob. AccountName: <storageAccountName>, ContainerName: <containerName> Name BlobType Length ContentType LastModified AccessTier SnapshotT ime ---- -------- ------ ----------- ------------ ---------- --------- CascadeFile.txt BlockBlob 7 text/plain 2021-04-24 05:35:24Z Hot
Azure CLI (интерфейс командной строки Azure)
Вы также можете использовать Azure CLI для добавления условий назначения ролей. В следующих командах показано, как добавить условия. Дополнительные сведения см. в руководстве. Добавление условия назначения ролей для ограничения доступа к blob-объектам с помощью Azure CLI.
Добавить условие
Используйте команду az login и следуйте инструкциям, которые отображаются для входа в каталог в качестве администратора управления доступом на основе ролей.
az loginИспользуйте команду az role assignment list, чтобы получить назначение роли, которое вы назначили группе безопасности.
az role assignment list --assignee <groupObjectId> --scope <scope>Создайте JSON-файл со следующим форматом.
{ "canDelegate": null, "condition": "", "conditionVersion": "", "description": "", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{groupObjectId}", "principalName": "{principalName}", "principalType": "Group", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "roleDefinitionName": "Storage Blob Data Reader", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }Обновите свойство
condition. Обязательно используйте имя набора атрибутов."condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]))",Обновите свойство
conditionVersion."conditionVersion": "2.0",Используйте az role assignment update , чтобы добавить условие в назначение роли.
az role assignment update --role-assignment "./path/roleassignment.json"
Проверка условия
В новом командном окне используйте команду az login для входа в качестве члена группы безопасности.
az loginИспользуйте az storage blob show , чтобы попытаться прочитать свойства файла Baker.
az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameBaker> --auth-mode loginВы не должны иметь возможности читать объект, и должно отображаться сообщение о неудаче авторизации.
You do not have the required permissions needed to perform this operation. ...Используйте az storage blob show , чтобы попытаться прочитать свойства каскадного файла.
az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameCascade> --auth-mode login You should be able to read the blob. { "container": "<containerName>", "content": "", "deleted": false, "encryptedMetadata": null, "encryptionKeySha256": null, "encryptionScope": null, ... }