Настройка ключей, управляемых клиентом, для учетной записи Azure Cosmos DB с помощью Azure Key Vault

Данные, хранящиеся в учетной записи Azure Cosmos DB, автоматически шифруются с помощью управляемых службой ключей, управляемых корпорацией Майкрософт. Однако можно добавить второй уровень шифрования с помощью ключей, которыми вы управляете. Эти ключи называются ключами, управляемыми клиентом (или CMK). Управляемые клиентом ключи хранятся в экземпляре Azure Key Vault.

В этой статье описывается, как настроить шифрование с помощью ключей, управляемых клиентом, во время создания учетной записи Azure Cosmos DB. В этом примере, в межтенантном сценарии, учетная запись Azure Cosmos DB управляется арендатором, который поддерживается независимым поставщиком программного обеспечения (ISV), и называется поставщиком услуг. Ключ, используемый для шифрования учетной записи Azure Cosmos DB, находится в хранилище ключей в другом арендаторе, управляемом клиентом.

Сведения о кросс-тенантных ключах, управляемых пользователем

Многие поставщики служб, создающие предложения SaaS (программное обеспечение как услуга) в Azure, хотят предоставить своим клиентам возможность управлять собственными ключами шифрования. Ключи, управляемые клиентом, позволяют поставщику службы шифровать данные клиента с помощью ключа шифрования, управляемого клиентом поставщика службы и недоступного поставщику службы. В Azure клиент поставщика услуг может использовать Azure Key Vault для управления ключами шифрования в собственном клиенте и подписке Microsoft Entra.

Службы платформы Azure и ресурсы, принадлежащие поставщику услуг и находящиеся в его клиенте, требуют доступа к ключу из клиента заказчика для выполнения операций шифрования и расшифровки.

На рисунке ниже показан процесс шифрования покоящихся данных с использованием федеративной идентификации в кросс-тенантном рабочем процессе CMK, который охватывает поставщика услуг и его клиента.

Снимок экрана, показывающий кросс-тенантный CMK с федеративной идентичностью.

В приведенном выше примере существует два клиента Microsoft Entra: клиент независимого поставщика услуг (Тенант 1) и клиент клиента (Тенант 2). Клиент 1 содержит службы платформы Azure и клиент 2 размещает хранилище ключей клиента.

Регистрация мультитенантного приложения создается поставщиком услуг в клиенте 1. Учетные данные федеративной идентификации создаются в этом приложении с использованием управляемой идентичности, назначенной пользователем. Затем имя и идентификатор приложения отправляются клиенту.

Пользователь с соответствующими разрешениями устанавливает приложение поставщика услуг в арендаторе клиента, арендатор 2. Затем пользователь предоставляет субъекту-службе, связанному с установленным приложением, доступ к хранилищу ключей клиента. Кроме того, клиент сохраняет ключ шифрования или ключ, управляемый клиентом, в хранилище ключей. Клиент отправляет сведения о расположении ключа (URL-адрес ключа) поставщику службы.

Теперь у поставщика службы есть следующее:

  • Идентификатор приложения для мультитенантного приложения, установленного в арендаторе клиента, которому предоставлен доступ к ключу, управляемому клиентом.
  • Управляемое удостоверение, сконфигурированное в качестве метода аутентификации в мультитенантном приложении.
  • сведения о расположении ключа в хранилище ключей клиента.

С этими тремя параметрами поставщик услуг подготавливает ресурсы Azure в Tenant 1, которые можно зашифровать с помощью ключа, управляемого клиентом, в Tenant 2.

Давайте разделим указанное выше комплексное решение на три этапа:

  1. Поставщик услуг настраивает идентификаторы.
  2. Клиент предоставляет мультитенантным приложениям поставщика услуг доступ к ключу шифрования в Azure Key Vault.
  3. Поставщик службы шифрует данные в ресурсе Azure с помощью CMK.

Для большинства приложений поставщиков служб операции настройки на этапе 1 выполняются однократно. Операции на этапах 2 и 3 будут повторяться для каждого клиента.

Этап 1. Поставщик услуг настраивает приложение Microsoft Entra

Step Description Минимальная роль в Azure RBAC Минимальная роль в системе Microsoft Entra RBAC
1. Создайте новую мультитенантную регистрацию приложения Microsoft Entra или начните с уже существующей регистрации приложения. Запишите идентификатор приложения (идентификатор клиента) регистрации приложения на портале Azure, в Microsoft API Graph, Azure PowerShell или Azure CLI. Нет Разработчик приложений
2. Создайте управляемое удостоверение, назначаемое пользователем (для использования в качестве учетных данных федеративного удостоверения).
Портал Azure / Azure CLI / Azure PowerShell/ Шаблоны Azure Resource Manager
Участник с управляемой учетной записью Нет
3. Настройте назначаемое пользователем управляемое удостоверение в качестве учетных данных федеративного удостоверения в приложении, чтобы оно могло представлять идентификацию приложения.
Справочные материалы по API Graph/ Портал Azure/ Azure CLI/ Azure PowerShell
Нет Владелец приложения
4. Предоставьте клиенту общий доступ к имени приложения и идентификатору приложения, чтобы он смог установить и авторизовать приложение. Нет Нет

Рекомендации для поставщиков служб

  • Шаблоны Azure Resource Manager (ARM) не рекомендуется использовать для создания приложений Microsoft Entra.
  • Одно и то же мультитенантное приложение можно использовать для доступа к ключам в любом количестве клиентов, таких как Tenant 2, Tenant 3, Tenant 4 и т. д. У каждого арендатора создается независимый экземпляр приложения, имеющий одинаковый идентификатор приложения, но разный идентификатор объекта. Таким образом, каждый экземпляр этого приложения авторизуется независимо. Обратите внимание на то, как объект приложения, применяемый для этой функции, используется для секционирования приложения по всем клиентам.
    • Приложение может иметь не более 20 учетных данных федеративного удостоверения, что требует от поставщика услуг совместного использования федеративных удостоверений среди своих клиентов. Дополнительные сведения о проектировании федеративных удостоверений и ограничениях см. в разделе "Настройка приложения для доверия к внешнему поставщику удостоверений"
  • В редких сценариях поставщик услуг может использовать один объект Application на каждого клиента, но для управления приложениями во всех клиентах требуются значительные затраты на обслуживание.
  • В клиенте поставщика услуг невозможно автоматизировать проверку подлинности Publisher.

Этап 2. Клиент разрешает доступ к хранилищу ключей

Step Description Роли Azure RBAC с наименьшими правами доступа Наименее привилегированные роли Microsoft Entra
1.
  • Рекомендуется: попросите пользователя войти в ваше приложение. Если пользователь может войти в систему, значит, в его арендуемом пространстве существует служебный принципал для вашего приложения.
  • Используйте Microsoft Graph, Microsoft Graph PowerShell, Azure PowerShell или Azure CLI для создания субъекта-службы.
  • Создайте URL-адрес для предоставления согласия администратора и предоставьте согласие, действующее на уровне всего арендатора, для создания субъекта-службы с использованием идентификатора приложения.
  • Нет Пользователи с разрешениями на установку приложений
    2. Создайте Azure Key Vault и ключ, используемый в качестве ключа, управляемого клиентом. Пользователь должен быть назначен на роль Key Vault Contributor, чтобы создать хранилище ключей.

    Пользователю необходимо назначить роль Key Vault Crypto Officer, чтобы добавить ключ в хранилище ключей.
    Нет
    3. Предоставьте идентификатору приложения доступ к хранилищу ключей Azure, назначив роль Key Vault Crypto Service Encryption User Чтобы назначить приложению роль Key Vault Crypto Service Encryption User, вам должна быть назначена роль User Access Administrator. Нет
    4. Скопируйте URL-адрес хранилища ключей и имя ключа в конфигурацию ключей, управляемых клиентом предложения SaaS. Нет Нет

    Замечание

    Чтобы авторизовать доступ к управляемому HSM для шифрования с помощью CMK, см. пример для Storage Account здесь. Дополнительные сведения об управлении ключами с помощью управляемого HSM см. в статье "Управление управляемым HSM с помощью Azure CLI"

    Рекомендации для клиентов поставщиков служб

    • В клиентском тенанте Tenant 2 администратор может задать групповые политики, чтобы запретить пользователям, не являющимся администраторами, устанавливать приложения. Эти политики могут предотвратить создание субъектов-служб пользователями без прав администратора. Если такая политика настроена, пользователи с разрешениями на создание служебных сущностей должны участвовать.
    • Доступ к Azure Key Vault можно авторизовать с помощью Azure RBAC или политик доступа. При предоставлении доступа к хранилищу ключей обязательно используйте активный механизм для хранилища ключей.
    • Регистрация приложения Microsoft Entra имеет идентификатор приложения (идентификатор клиента). При установке приложения в вашем арендаторе создается служебный представитель. Служебный принципал использует тот же идентификатор приложения, что и регистрация приложения, но создает собственный идентификатор объекта. При авторизации доступа приложения к ресурсам может потребоваться использовать служебный объект Name или свойство ObjectID.

    Этап 3. Поставщик службы шифрует данные в ресурсе Azure с помощью ключа, управляемого клиентом

    После завершения этапа 1 и 2 поставщик услуг может настроить шифрование в ресурсе Azure с помощью ключа и хранилища ключей в клиенте клиента и ресурса Azure в клиенте поставщика услуг. Поставщик службы может настроить кросс-тенантные ключи, управляемые клиентом, с помощью клиентских средств, поддерживаемых этим ресурсом Azure, с помощью шаблона ARM или REST API.

    Настройка междоменных ключей, управляемых пользователем

    В этом разделе объясняется, как настроить кросс-тенантный ключ, управляемый клиентом (CMK), и зашифровать данные клиента. Вы узнаете, как шифровать данные клиента в ресурсе в Tenant1 с помощью CMK, хранящегося в хранилище ключей в Tenant2. Вы можете использовать портал Azure, Azure PowerShell или Azure CLI.

    Войдите на портал Azure и выполните следующие действия.

    Поставщик услуг настраивает идентификационные данные

    Поставщик услуги выполняет следующие действия в арендаторе поставщика услуги Tenant1.

    Поставщик услуг создает новую регистрацию для мультитенантного приложения

    Можно создать новую регистрацию мультитенантного приложения Microsoft Entra или начать с существующей регистрации такого приложения. Если вы начинаете с существующей регистрации приложения, запишите идентификатор приложения (идентификатор клиента).

    Чтобы создать новую регистрацию:

    1. Найдите Microsoft Entra ID в поле поиска. Найдите и выберите расширение Microsoft Entra ID.

    2. В области слева выберите Управление > регистрацией приложений.

    3. Выберите +Создать регистрацию.

    4. Укажите имя регистрации приложения и выберите учетную запись в любом каталоге организации (любой каталог Microsoft Entra — Multitenant).

    5. Выберите Зарегистрировать.

    6. Запишите значение ApplicationId или ClientId приложения.

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

    Поставщик службы создает назначаемое пользователем управляемое удостоверение

    Создайте управляемую идентификацию, назначаемую пользователем, для использования в качестве учетных данных федеративной идентификации.

    1. В поле поиска введите запрос управляемые удостоверения. Найдите и выберите расширение Управляемые идентификаторы.

    2. Нажмите кнопку +Создать.

    3. Укажите группу ресурсов, регион и имя для управляемого удостоверения.

    4. Выберите Review + create.

    5. При успешном развертывании обратите внимание на Azure ResourceId назначенного пользователем управляемого удостоверения, которое доступно в разделе Properties. Рассмотрим пример.

      /subscriptions/tttttttt-0000-tttt-0000-tttt0000tttt/resourcegroups/XTCMKDemo/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ConsotoCMKDemoUA

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

    Поставщик службы настраивает управляемое удостоверение, назначаемое пользователем, в качестве федеративных учетных данных в приложении

    Настройте управляемое удостоверение, назначенное пользователем, в качестве учетных данных федеративного удостоверения в приложении, чтобы оно могло действовать от имени приложения.

    1. Перейдите к Microsoft Entra ID > регистрации приложений > вашего приложения.

    2. Выберите Сертификаты и секреты.

    3. Выберите элемент Федеративные учетные данные.

      Снимок экрана: переход к разделу

    4. Выберите + Добавить учетные данные.

    5. В сценарии "Федеративные учетные данные" выберите Управляемое удостоверение.

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

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

    7. В разделе Сведения об учетных данных укажите имя и необязательное описание учетных данных и нажмите кнопку Добавить.

      Снимок экрана: добавление учетных данных.

    Поставщик услуг делится идентификатором приложения с клиентом

    Найдите идентификатор приложения (идентификатор клиента) мультитенантного приложения и поделитесь им с клиентом.

    Клиент предоставляет приложению поставщика службы доступ к ключу в хранилище ключей

    Клиент выполняет следующие действия в своей учетной записи Tenant2. Клиент может использовать портал Azure, Azure PowerShell или Azure CLI.

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

    Войдите на портал Azure и выполните следующие действия.

    Клиент устанавливает приложение поставщика услуг в арендаторе клиента

    Чтобы установить зарегистрированное приложение поставщика услуг в арендаторе клиента, создайте представителя службы, используя идентификатор зарегистрированного приложения. Представителя службы можно создать одним из следующих способов:

    Клиент создает хранилище ключей

    Чтобы создать хранилище ключей, учетной записи пользователя должна быть назначена роль Участник хранилища ключей или другая роль, которая разрешает создание хранилища ключей.

    1. В меню портала Azure или на домашней странице выберите + Создать ресурс. В поле поиска введите запрос хранилища ключей. В списке результатов выберите элемент Хранилища ключей. На странице Хранилища ключей нажмите кнопку Создать.

    2. На вкладке Основные сведения выберите подписку. В разделе Группа ресурсов выберите команду Создать и введите имя группы ресурсов.

    3. Введите уникальное имя хранилища ключей.

    4. Выберите регион и ценовую категорию.

    5. Включите защиту от очистки для нового хранилища ключей.

    6. На вкладке Политика доступа выберите значение Управление доступом на основе ролей Azure для параметра Модель разрешений.

    7. Выберите Проверить и создать, а затем Создать.

      Снимок экрана: создание хранилища ключей.

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

    Дополнительные сведения см. в разделе Quickstart — создание Azure Key Vault с помощью портала Azure.

    Клиент назначает учетной записи пользователя роль криптоофицера Key Vault.

    Этот шаг гарантирует, что вы сможете создать ключи шифрования.

    1. Перейдите в хранилище ключей и выберите контроль доступа (IAM) на левой панели.
    2. В разделе Предоставить доступ к этому ресурсу выберите Добавить назначение роли.
    3. Выполните поиск по запросу Специалист по шифрованию хранилища ключей и выберите соответствующий результат.
    4. В разделе Члены выберите элемент Пользователь, группа или субъект-служба.
    5. Выберите элемент Члены и найдите свою учетную запись пользователя.
    6. Выберите Проверить и Назначить.

    Клиент создает ключ шифрования

    Чтобы создать ключ шифрования, учетной записи пользователя необходимо назначить роль специалиста по шифрованию хранилища ключей или другую роль, которая разрешает создание ключа.

    1. На странице свойств хранилища ключей выберите элемент Ключи.
    2. Выберите Создать/Импортировать.
    3. На экране создания ключа укажите имя ключа. Оставьте остальные значения по умолчанию.
    4. Нажмите кнопку "Создать".
    5. Скопируйте URI ключа.

    Клиент предоставляет приложению поставщика службы доступ к хранилищу ключей

    Назначьте роль Azure RBAC Пользователь службы шифрования хранилища ключей зарегистрированному приложению поставщика службы, чтобы оно могло получить доступ к хранилищу ключей.

    1. Перейдите в хранилище ключей и выберите контроль доступа (IAM) на левой панели.
    2. В разделе Предоставить доступ к этому ресурсу выберите Добавить назначение роли.
    3. Выполните поиск и выберите пользователя службы шифрования Key Vault Crypto Service Encryption.
    4. В разделе Члены выберите элемент Пользователь, группа или субъект-служба.
    5. Выберите элемент Члены и найдите имя установленного приложения, полученного от поставщика службы.
    6. Выберите Проверить и Назначить.

    Теперь вы можете настроить ключи, управляемые клиентом, с помощью URI хранилища ключей и ключа.

    Создание учетной записи Azure Cosmos DB, зашифрованной ключом из другого клиента

    До этого момента вы настроили мультитенантное приложение на клиенте поставщика услуг. Вы также установили приложение в тенанте клиента и настроили хранилище ключей и ключ в тенанте клиента. Затем можно создать учетную запись Azure Cosmos DB в клиенте поставщика услуг и настроить ключи, управляемые клиентом, с ключом клиента.

    При создании учетной записи Azure Cosmos DB с ключами, управляемыми клиентом, необходимо убедиться, что у него есть доступ к ключам, используемым клиентом. В одноклиентских сценариях можно предоставить прямой доступ к хранилищу ключей главному субъекту (principal) Azure Cosmos DB или использовать определённую управляемую идентичность. В сценарии с несколькими клиентами мы больше не можем зависеть от прямого доступа к хранилищу ключей, так как он находится в другом клиенте, управляемом клиентом. Из-за этого ограничения в предыдущих разделах мы создали приложение для нескольких арендаторов и зарегистрировали управляемое удостоверение внутри приложения, чтобы предоставить ему доступ к хранилищу ключей клиента. Управляемое удостоверение, в сочетании с идентификатором межтенантного приложения, используется нами при создании межклиентской учетной записи CMK Azure Cosmos DB. Для получения дополнительной информации см. раздел этой статьи Этап 3 - Поставщик услуг шифрует данные в ресурсе Azure с использованием ключа, управляемого клиентом.

    Когда новая версия ключа доступна в хранилище ключей, она автоматически обновляется в учетной записи Azure Cosmos DB.

    Использование шаблонов JSON в Azure Resource Manager

    Разверните шаблон ARM со следующими параметрами:

    Замечание

    Если вы воссоздаете этот пример в одном из шаблонов Azure Resource Manager, используйте apiVersion к 2022-05-15.

    Parameter Description Пример значения
    keyVaultKeyUri Идентификатор ключа, управляемого клиентом, который находится в хранилище ключей поставщика услуг. https://my-vault.vault.azure.com/keys/my-key
    identity Объект, указывающий, что управляемое удостоверение должно быть присвоено учетной записи Azure Cosmos DB. "identity":{"type":"UserAssigned","userAssignedIdentities":{"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity":{}}}
    defaultIdentity Сочетание идентификатора ресурса управляемого удостоверения и идентификатора приложения мультитенантного приложения Microsoft Entra. UserAssignedIdentity=/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity&FederatedClientId=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e

    Ниже приведен пример сегмента шаблона с тремя параметрами, настроенными:

    {
      "kind": "GlobalDocumentDB",
      "location": "East US 2",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity": {}
        }
      },
      "properties": {
        "locations": [
          {
            "locationName": "East US 2",
            "failoverPriority": 0,
            "isZoneRedundant": false
          }
        ],
        "databaseAccountOfferType": "Standard",
        "keyVaultKeyUri": "https://my-vault.vault.azure.com/keys/my-key",
        "defaultIdentity": "UserAssignedIdentity=/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity&FederatedClientId=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
      }
    }
    

    Important

    Эта функция пока не поддерживается в Azure PowerShell, Azure CLI или на портале Azure.

    Вы не можете настроить ключи, управляемые клиентом, с определенной версией ключа при создании новой учетной записи Azure Cosmos DB. Сам ключ должен быть передан без версий и без конечных обратных косых черт.

    Чтобы отозвать или отключить ключи, управляемые клиентом, ознакомьтесь с инструкцией по настройке ключей, управляемых клиентом, для учетной записи Azure Cosmos DB с помощью Azure Key Vault.

    FAQs

    Как перенести учетную запись Azure Cosmos DB с ключами, управляемыми клиентом, в другую группу ресурсов или в другую подписку?

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

    Общие рекомендации по переносу учетной записи Cosmos DB в другую группу ресурсов или подписку описаны в статье о перемещении ресурсов Azure в новую группу ресурсов или статью подписки .

    После того как вы успешно переместили учетную запись Azure Cosmos DB согласно общим рекомендациям, все удостоверения (System-Assigned или User-Assigned), связанные с учетной записью, должны быть переназначены. Это переназначение необходимо, чтобы гарантировать, что эти идентификаторы продолжат иметь необходимые разрешения для доступа к ключу Key Vault.

    Как перенести учетную запись Azure Cosmos DB в другой клиент?

    Если для вашей учетной записи Cosmos DB включены ключи, управляемые клиентом, вы можете переносить учетную запись только в том случае, если она является меж-арендаторской учетной записью с управляемыми клиентом ключами. Дополнительные сведения см. в руководстве по настройке клиентских ключей управления для разных тенантов в учетной записи Azure Cosmos DB с помощью Azure Key Vault.

    Предупреждение

    После миграции важно сохранить учетную запись Azure Cosmos DB и Azure Key Vault в отдельных арендаторах, чтобы сохранить исходную связь между арендаторами. Убедитесь, что ключ Key Vault остается на месте до завершения миграции учетной записи Cosmos DB.

    См. также