Разрешить доступ на чтение больших двоичных объектов на основе тегов и настраиваемых атрибутов безопасности
В этой статье вы узнаете, как разрешить доступ на чтение к BLOB-объектам на основе тегов индекса BLOB-объектов и настраиваемых атрибутов безопасности с помощью условий управления доступом на основе атрибутов (ABAC). Это упрощает управление доступом к BLOB-объектам.
Необходимые компоненты
Чтобы назначить настраиваемые атрибуты безопасности и добавить условия назначения ролей в клиенте Microsoft Entra, вам потребуется:
- Определение атрибутов Администратор istrator и назначение атрибутов Администратор istrator
- Контроль доступа Администратор istrator на основе ролей
Важно!
По умолчанию у глобального администратора и других ролей администратора нет разрешений на чтение, определение и назначение настраиваемых атрибутов безопасности. Если эти предварительные требования не выполнены, атрибуты субъекта или пользователя не отображаются в редакторе условий.
Condition
В этой статье можно разрешить доступ на чтение к BLOB-объектам, если у пользователя есть настраиваемый атрибут безопасности, соответствующий тегу индекса BLOB-объектов. Это достигается путем добавления условия в назначение роли.
Например, если У Brenda есть атрибут Project=Baker
, она может читать только большие двоичные объекты с тегом Project=Baker
индекса BLOB-объектов. Аналогичным образом 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-объектов. Дополнительные сведения см. в статье Управление данными BLOB-объектов Azure и их поиск с помощью тегов индекса BLOB-объектов.
Создайте контейнер в учетной записи хранения и задайте для уровня общедоступного доступа значение Private (без анонимного доступа).
Задайте тип проверки подлинности для учетной записи пользователя Azure AD.
Отправьте текстовые файлы в контейнер и задайте следующие теги индекса BLOB-объектов.
Файл Ключ Значение Текстовый файл Бейкера Project Baker Каскадный текстовый файл Project Cascade Совет
Сведения о символах, разрешенных для тегов индекса BLOB-объектов, см. в разделе "Настройка тегов индекса BLOB-объектов".
Шаг 4. Назначение роли чтения данных BLOB-объектов служба хранилища условием
Откройте новую вкладку и войдите в портал Azure.
Откройте группу ресурсов с учетной записью хранения.
Выберите Управление доступом (IAM).
Откройте вкладку Назначения ролей, чтобы просмотреть назначения ролей в этой области.
Нажмите Добавить>Добавить назначение роли.
На вкладке "Роль" выберите роль чтения данных blob-объектов служба хранилища.
На вкладке "Участники" выберите созданную ранее группу безопасности.
(Необязательно) В поле "Описание" введите доступ на чтение к blob-объектам, если у пользователя есть настраиваемый атрибут безопасности, соответствующий тегу индекса BLOB-объектов.
На вкладке Условия (необязательно) нажмите кнопку Добавить условие.
Откроется страница добавления условия назначения роли.
В разделе Добавить действие щелкните Добавить действие.
Отобразится область "Выберите действие". Эта область представляет собой отфильтрованный список действий с данными на основе назначения роли, который будет целевым объектом условия.
Нажмите кнопку "Чтение большого двоичного объекта " и нажмите кнопку " Выбрать".
В разделе "Выражение сборки" нажмите кнопку "Добавить".
Введите следующие параметры:
Параметр Значение Источник атрибута Субъект Атрибут <attributeset>_Project Оператор StringEquals Параметр Атрибут Источник атрибута Ресурс Атрибут Теги индекса BLOB-объектов [значения в ключе] Ключ. Project Примечание.
Если субъект не указан в качестве параметра в источнике атрибутов, убедитесь, что вы определили настраиваемый атрибут безопасности, как описано ранее на шаге 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$>] ) )
Нажмите кнопку "Сохранить", чтобы сохранить условие.
На вкладке "Рецензирование и назначение" нажмите кнопку "Рецензирование" и "На служба хранилища значить", чтобы назначить роль чтения данных больших двоичных объектов с условием.
Шаг 5. Назначение роли читателя
Повторите предыдущие шаги, чтобы назначить роль читателя для группы безопасности в группе ресурсов область.
Примечание.
Обычно не требуется назначать роль читателя. Однако это делается, чтобы можно было проверить условие с помощью портала Azure.
Шаг 6. Проверка условия
В новом окне откройте портал Azure.
Войдите как пользователь, созданный с помощью настраиваемого атрибута
Project=Cascade
безопасности.Откройте созданную учетную запись хранения и контейнер.
Убедитесь, что для метода проверки подлинности задана учетная запись пользователя Azure AD, а не ключ доступа.
Щелкните текстовый файл Baker.
Вы не сможете просматривать или скачивать BLOB-объект, поэтому должно отобразиться сообщение о сбое авторизации.
Щелкните текстовый файл Cascade.
Вы сможете просматривать и скачивать BLOB-объект.
Azure PowerShell
Вы также можете использовать Azure PowerShell для добавления условий назначения ролей. В следующих командах показано, как добавить условия. Дополнительные сведения см. в руководстве . Добавление условия назначения ролей для ограничения доступа к blob-объектам с помощью Azure PowerShell.
Добавить условие
Используйте команду Подключение-AzAccount и следуйте инструкциям, которые, как представляется, войдите в каталог в качестве контроль доступа Администратор istrator на основе ролей.
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 используйте команду Подключение-AzAccount для входа в качестве члена группы безопасности.
Connect-AzAccount
Используйте New-Az служба хранилища Context, чтобы задать контекст для учетной записи хранения.
$bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
Используйте Get-Az служба хранилища Blob, чтобы попытаться прочитать файл Бейкера.
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-Az служба хранилища Blob, чтобы попытаться прочитать каскадный файл.
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 CLI для добавления условий назначения ролей. В следующих командах показано, как добавить условия. Дополнительные сведения см. в руководстве . Добавление условия назначения ролей для ограничения доступа к blob-объектам с помощью Azure CLI.
Добавить условие
Используйте команду az login и следуйте инструкциям, которые, как представляется, войдите в каталог как role Based контроль доступа Администратор istrator.
az login
Используйте список назначений ролей az, чтобы получить назначение роли, назначенное группе безопасности.
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, ... }