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

В этой статье вы узнаете, как разрешить доступ на чтение к BLOB-объектам на основе тегов индекса BLOB-объектов и настраиваемых атрибутов безопасности с помощью условий управления доступом на основе атрибутов (ABAC). Это упрощает управление доступом к BLOB-объектам.

Необходимые компоненты

Чтобы назначить настраиваемые атрибуты безопасности и добавить условия назначения ролей в клиенте Microsoft Entra, вам потребуется:

Важно!

По умолчанию у глобального администратора и других ролей администратора нет разрешений на чтение, определение и назначение настраиваемых атрибутов безопасности. Если эти предварительные требования не выполнены, атрибуты субъекта или пользователя не отображаются в редакторе условий.

Condition

В этой статье можно разрешить доступ на чтение к BLOB-объектам, если у пользователя есть настраиваемый атрибут безопасности, соответствующий тегу индекса BLOB-объектов. Это достигается путем добавления условия в назначение роли.

Diagram of role assignment with a condition.

Например, если У Brenda есть атрибут Project=Baker, она может читать только большие двоичные объекты с тегом Project=Baker индекса BLOB-объектов. Аналогичным образом Chandra может считывать только большие двоичные объекты.Project=Cascade

Diagram showing read access to blobs based on tags and custom security attributes.

Вот как выглядит условие в коде:

(
 (
  !(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.

    Screenshot of adding a custom security attribute.

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

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

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

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

    Screenshot of assigning a custom security attribute.

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

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

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

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

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

  4. Отправьте текстовые файлы в контейнер и задайте следующие теги индекса BLOB-объектов.

    Файл Ключ Значение
    Текстовый файл Бейкера Project Baker
    Каскадный текстовый файл Project Cascade

    Совет

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

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

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

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

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

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

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

  6. На вкладке "Роль" выберите роль чтения данных blob-объектов служба хранилища.

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

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

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

    Откроется страница добавления условия назначения роли.

  10. В разделе Добавить действие щелкните Добавить действие.

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

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

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

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

    Параметр Значение
    Источник атрибута Субъект
    Атрибут <attributeset>_Project
    Оператор StringEquals
    Параметр Атрибут
    Источник атрибута Ресурс
    Атрибут Теги индекса BLOB-объектов [значения в ключе]
    Ключ. Project

    Примечание.

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

    Screenshot of condition using principal attribute displayed in visual editor.

  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. На вкладке "Рецензирование и назначение" нажмите кнопку "Рецензирование" и "На служба хранилища значить", чтобы назначить роль чтения данных больших двоичных объектов с условием.

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

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

    Примечание.

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

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

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

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

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

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

    Screenshot of storage container with test files.

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

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

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

    Вы сможете просматривать и скачивать BLOB-объект.

Azure PowerShell

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

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

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

    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 используйте команду Подключение-AzAccount для входа в качестве члена группы безопасности.

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

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

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

  1. Используйте команду az login и следуйте инструкциям, которые, как представляется, войдите в каталог как role Based контроль доступа Администратор istrator.

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

    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,
    ...
    }
    

Следующие шаги