Разрешить доступ на чтение больших двоичных объектов на основе тегов и настраиваемых атрибутов безопасности

В этой статье вы узнаете, как разрешить доступ на чтение к 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. Добавление нового настраиваемого атрибута безопасности

  1. Войдите на портал Azure.

  2. Щелкните Microsoft Entra ID>настраиваемые атрибуты безопасности.

  3. Добавьте атрибут с именем Project и значениями Baker и Cascade. Или используйте существующий атрибут. Дополнительные сведения см. в разделе "Добавление или отключение настраиваемых атрибутов безопасности" в идентификаторе Microsoft Entra ID.

    Снимок экрана: добавление настраиваемого атрибута безопасности.

Шаг 2. Назначение пользовательского атрибута безопасности пользователю

  1. В идентификаторе Microsoft Entra создайте группу безопасности.

  2. Добавьте пользователя в качестве члена группы.

  3. Назначьте пользователю атрибут Project со значением Cascade. Дополнительные сведения см. в разделе "Назначение, обновление, список" или удаление настраиваемых атрибутов безопасности для пользователя.

    Снимок экрана: назначение пользовательского атрибута безопасности.

  4. Не забудьте нажать кнопку "Сохранить" , чтобы сохранить назначение.

Шаг 3. Настройка тегов индекса хранилища и BLOB-объектов

  1. Создайте учетную запись хранения, совместимую с функцией тегов индекса блобов. Дополнительные сведения см. в статье Управление данными BLOB-объектов Azure и их поиск с помощью тегов индекса BLOB-объектов.

  2. Создайте контейнер в учетной записи хранения и задайте для уровня общедоступного доступазначение Private (без анонимного доступа).

  3. Задайте тип проверки подлинности для учетной записи пользователя Azure AD.

  4. Загрузите текстовые файлы в контейнер и установите следующие индексные теги блобов.

    Файл Ключ Ценность
    Текстовый файл Бейкера Проект Пекарь
    Каскадный текстовый файл Проект Каскад

    Подсказка

    Сведения о символах, разрешенных для тегов индекса BLOB-объектов, см. в разделе "Настройка тегов индекса BLOB-объектов".

Шаг 4. Назначение роли чтения данных BLOB-объектов хранилища с условием

  1. Откройте новую вкладку и войдите на портал Azure.

  2. Откройте группу ресурсов с учетной записью хранения.

  3. Выберите Управление доступом (IAM).

  4. Откройте вкладку Назначения ролей, чтобы просмотреть назначения ролей в этой области.

  5. Нажмите Добавить>Добавить назначение роли.

  6. На вкладке "Роль" выберите роль Чтение данных блобов хранилища.

  7. На вкладке "Участники" выберите созданную ранее группу безопасности.

  8. (Необязательно) В поле "Описание" введите доступ на чтение к blob-объектам, если у пользователя есть настраиваемый атрибут безопасности, соответствующий тегу индекса BLOB-объектов.

  9. На вкладке "Условия" (необязательно) нажмите кнопку "Добавить условие".

    Откроется страница "Добавить условие назначения ролей".

  10. В разделе "Добавить действие " нажмите кнопку "Добавить действие".

    Появляется область "Выберите действие". Эта панель — отфильтрованный список действий с данными на основе назначения роли, на который будет нацелено ваше условие.

  11. Нажмите кнопку "Чтение большого двоичного объекта" и нажмите кнопку "Выбрать".

  12. В разделе "Выражение сборки" нажмите кнопку "Добавить".

  13. Введите следующие параметры:

    Настройки Ценность
    Источник атрибута Основной
    Атрибут <attributeset>_Project
    Оператор StringEquals
    Вариант Атрибут
    Источник атрибута Ресурс
    Атрибут Теги индекса BLOB [значения в ключе]
    Ключ Проект

    Примечание.

    Если Principal не указан в качестве опции в источнике атрибутов, убедитесь, что вы определили настраиваемый атрибут безопасности, как описано ранее на шаге 1: Добавление нового настраиваемого атрибута безопасности.

    Снимок экрана условия с использованием основного атрибута, отображаемого в визуальном редакторе.

  14. Прокрутите до типа редактора и нажмите кнопку "Код".

    Состояние должно выглядеть примерно так:

    (
     (
      !(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$>]
     )
    )
    
  15. Нажмите кнопку "Сохранить", чтобы сохранить условие.

  16. На вкладке "Обзор и назначение" нажмите "Обзор и назначение", чтобы назначить "роль чтения данных BLOB-объектов хранилища" с условием.

Шаг 5. Назначение роли читателя

  • Повторите предыдущие действия, чтобы назначить роль Читатель для группы безопасности в области группы ресурсов.

    Примечание.

    Обычно не требуется назначать роль читателя. Однако это сделано, чтобы проверить условие с помощью портала Azure.

Шаг 6. Проверка условия

  1. В новом окне откройте портал Azure.

  2. Войдите как пользователь, созданный с помощью настраиваемого атрибута Project=Cascade безопасности.

  3. Откройте созданную учетную запись хранения и контейнер.

  4. Убедитесь, что для метода проверки подлинности задана учетная запись пользователя Azure AD , а не ключ доступа.

    Снимок экрана: контейнер хранилища с тестовыми файлами.

  5. Щелкните текстовый файл Бейкера.

    Вы не должны иметь возможность просматривать или скачивать объект, и должно отображаться сообщение о неудачной авторизации.

  6. Щелкните текстовый файл Cascade.

    Вы должны иметь возможность просматривать и скачивать блоб.

Azure PowerShell

Вы также можете использовать Azure PowerShell для добавления условий назначения ролей. В следующих командах показано, как добавить условия. Дополнительные сведения см. в руководстве: Добавление условия назначения роли для ограничения доступа к blob-объектам с помощью Azure PowerShell.

Добавить условие

  1. Используйте команду Connect-AzAccount и следуйте инструкциям, которые отображаются, чтобы войти в каталог как Администратор управления доступом на основе ролей.

    Connect-AzAccount
    
  2. Используйте Get-AzRoleAssignment, чтобы получить назначение роли для группы безопасности.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. 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`$>]))"
    
  4. ConditionVersion Задайте свойство объекта назначения роли.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Используйте Set-AzRoleAssignment для обновления назначения ролей.

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

Проверка условия

  1. В новом окне PowerShell используйте команду Connect-AzAccount для входа в качестве члена группы безопасности.

    Connect-AzAccount
    
  2. Используйте New-AzStorageContext , чтобы задать контекст для учетной записи хранения.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. Используйте 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.
    ...
    
  4. Используйте 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.

Добавить условие

  1. Используйте команду az login и следуйте инструкциям, которые отображаются для входа в каталог в качестве администратора управления доступом на основе ролей.

    az login
    
  2. Используйте команду az role assignment list, чтобы получить назначение роли, которое вы назначили группе безопасности.

    az role assignment list --assignee <groupObjectId> --scope <scope>
    
  3. Создайте 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"
    }
    
  4. Обновите свойство 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$>]))",
    
  5. Обновите свойство conditionVersion.

    "conditionVersion": "2.0",
    
  6. Используйте az role assignment update , чтобы добавить условие в назначение роли.

    az role assignment update --role-assignment "./path/roleassignment.json"
    

Проверка условия

  1. В новом командном окне используйте команду az login для входа в качестве члена группы безопасности.

    az login
    
  2. Используйте 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.
    ...
    
  3. Используйте 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,
    ...
    }
    

Дальнейшие действия