Настройка ключей, управляемых клиентом, для шифрования данных в службе "Поиск ИИ Azure"

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

В этой статье описаны действия по настройке ключа, управляемого клиентом (CMK) или шифрования byOK. При этом нужно помнить о следующем.

  • Шифрование CMK принимается для отдельных объектов. Если требуется cmK в службе поиска, задайте политику принудительного применения.

  • Шифрование CMK зависит от Azure Key Vault. Вы можете создать собственные ключи шифрования и сохранить их в хранилище ключей или использовать API Azure Key Vault для создания ключей шифрования. Azure Key Vault должен находиться в той же подписке и клиенте, что и поиск azure AI. Поиск по искусственному интеллекту Azure извлекает управляемый ключ, подключаясь через системное или управляемое пользователем удостоверение. Для этого требуется, чтобы обе службы совместно используют один и тот же клиент.

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

Примечание.

Если индекс зашифрован, он доступен только в том случае, если служба поиска имеет доступ к ключу. Если доступ отозван, индекс недоступен и служба не может быть масштабирована до тех пор, пока индекс не будет удален или доступ к ключу восстановлен.

Зашифрованные объекты CMK

К объектам, которые могут быть зашифрованы, относятся индексы, списки синонимов, индексаторы, источники данных и наборы навыков. Расшифровка требует много вычислительных ресурсов, поэтому шифрование применяется только к конфиденциальному содержимому.

Шифрование выполняется по следующему содержимому:

  • Все содержимое в индексах и списках синонимов, включая описания.

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

Полное двойное шифрование

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

Включение шифрования CMK увеличивает размер индекса и снижает производительность запросов. На основе наблюдений на сегодняшний день вы можете ожидать увеличения на 30–60 процентов запросов, хотя фактическая производительность зависит от определения индекса и типов запросов. Так как производительность уменьшается, рекомендуется включить только эту функцию для индексов, которые действительно требуют его.

Хотя двойное шифрование теперь доступно во всех регионах, поддержка была развернута на двух этапах:

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

    • западная часть США 2
    • Восточная часть США
    • Центрально-южная часть США
    • US Gov (Вирджиния)
    • US Gov (Аризона)
  • Второй выпуск 13 мая 2021 г. добавил шифрование временных дисков и расширенное шифрование CMK для всех поддерживаемых регионов.

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

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

В этом сценарии используются перечисленные ниже службы и инструменты.

У вас должен быть клиент поиска, который может создать зашифрованный объект. В этом коде вы ссылаетесь на ключ хранилища ключей и сведения о регистрации приложения. Этот код может быть рабочим приложением или прототипом кода, таким как пример кода C# DotNetHowToEncryptionUsingCMK.

Совет

Клиент REST или Azure PowerShell можно использовать для создания индексов и карт синонимов, которые включают параметр ключа шифрования. Кроме того, можно использовать пакеты SDK для Azure. Поддержка портала для добавления ключа в индексы или карты синонимов не поддерживается.

Советы по Key Vault

Если вы не знакомы с Azure Key Vault, ознакомьтесь с этим кратким руководством, чтобы узнать о основных задачах: задайте и извлеките секрет из Azure Key Vault с помощью PowerShell. Ниже приведены некоторые советы по использованию Key Vault.

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

  • Включите ведение журнала в Key Vault, чтобы можно было отслеживать использование ключа.

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

1. Включение защиты от очистки

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

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

Оба свойства можно задать с помощью команд портала, PowerShell или Azure CLI.

  1. Войдите в портал Azure и откройте страницу обзора хранилища ключей.

  2. На странице Обзор в разделе Основные компоненты включите Обратимое удаление и Защиту от очистки.

2 — Создание ключа в хранилище ключей

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

  1. Войдите в портал Azure и откройте страницу обзора хранилища ключей.

  2. Выберите Ключи слева и нажмите кнопку + Создать/импортировать.

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

  4. Введите Имя ключа и при необходимости выберите другие его свойства.

  5. Нажмите кнопку Создать, чтобы начать развертывание.

  6. Выберите ключ, выберите текущую версию и запишите идентификатор ключа. Он состоит из URI значения ключа, имени ключа и версии ключа. Вам нужен идентификатор для определения зашифрованного индекса в службе поиска искусственного интеллекта Azure.

    Создайте нового ключа в хранилище ключей

3. Создание субъекта безопасности

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

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

Управляемое удостоверение позволяет службе поиска проходить проверку подлинности в Azure Key Vault без хранения учетных данных (ApplicationID или ApplicationSecret) в коде. Жизненный цикл управляемого удостоверения этого типа связан с жизненным циклом службы поиска, у которой может быть только одно управляемое удостоверение. Дополнительные сведения о работе управляемых удостоверений см. в статье Что такое управляемые удостоверения для ресурсов Azure?

  1. Сделайте службу поиска доверенной.

    Включение управляемого удостоверения, назначаемого системой

Ниже приведены условия, которые препятствуют внедрению этого подхода:

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

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

4. Предоставление разрешений

На этом шаге вы создадите политику доступа в Key Vault. Эта политика предоставляет приложению, зарегистрированное в идентификаторе Microsoft Entra ID, для использования ключа, управляемого клиентом.

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

  1. По-прежнему находясь на портале Azure, откройте страницу обзора хранилища ключей.

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

     Создайте политику доступа .

  3. На странице "Разрешения" выберите "Получить разрешения для ключей", "Разрешения секрета" и "Разрешения сертификата". Выберите "Распаковка ключа " и " Ключ оболочки" для криптографических операций с ключом.

    Выберите разрешения на странице

  4. Выберите Далее.

  5. На странице "Принцип" найдите и выберите субъект безопасности, используемый службой поиска для доступа к ключу шифрования. Это будет управляемое системой или управляемое пользователем удостоверение службы поиска или зарегистрированное приложение.

  6. Нажмите кнопку "Далее" и "Создать".

Внимание

Зашифрованное содержимое в поиске ИИ Azure настроено для использования определенного ключа Azure Key Vault с определенной версией. Если изменить ключ или версию, необходимо обновить индекс или карту синонимов, чтобы использовать ее перед удалением предыдущей. Не удалось сделать это, отрисовка индекса или карты синонимов непригодна для использования. Вы не сможете расшифровать содержимое, если ключ потерян.

5 — Шифрование содержимого

Ключи шифрования добавляются при создании объекта. Чтобы добавить ключ, управляемый клиентом, в индекс, карту синонимов, индексатор, источник данных или набор навыков, используйте REST API поиска или пакет SDK Azure и создайте объект с включенным шифрованием. Портал не разрешает свойства шифрования при создании объекта.

  1. Вызовите API создания, чтобы указать свойство encryptionKey:

  2. Вставьте конструкцию encryptionKey в определение объекта. Это свойство первого уровня, которое находится на том же уровне, что и имя и описание. В следующих примерах REST показано размещение свойств. Если вы используете то же хранилище, ключ и версию, вы можете вставить одну и ту же конструкцию encryptionKey в каждое определение объекта.

    В первом примере показан ключ шифрования для службы поиска, которая подключается с помощью управляемого удостоверения:

    {
      "encryptionKey": {
        "keyVaultUri": "https://demokeyvault.vault.azure.net",
        "keyVaultKeyName": "myEncryptionKey",
        "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660"
      }
    }
    

    Второй пример включает accessCredentials, необходимый для регистрации приложения в идентификаторе Microsoft Entra:

    {
      "encryptionKey": {
        "keyVaultUri": "https://demokeyvault.vault.azure.net",
        "keyVaultKeyName": "myEncryptionKey",
        "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
        "accessCredentials": {
          "applicationId": "00000000-0000-0000-0000-000000000000",
          "applicationSecret": "myApplicationSecret"
        }
      }
    }
    

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

Примечание.

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

6. Настройка политики

Политики Azure помогают применять стандарты организации и оценивать соответствие в масштабе. Поиск по искусственному интеллекту Azure имеет необязательную встроенную политику для принудительного применения CMK на уровне службы.

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

  1. Перейдите к встроенной политике в веб-браузере. Выберите Назначить.

    Снимок экрана: назначение встроенной политики CMK.

  2. Настройте политику область. В разделе "Параметры" un проверка show parameters... and set Effect to Deny(Запретить).

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

    Снимок экрана: изменение эффекта встроенной политики CMK для запрета.

  3. Завершите создание политики.

  4. Вызовите службы — обновите API, чтобы включить принудительное применение политик CMK на уровне обслуживания.

PATCH https://management.azure.com/subscriptions/[subscriptionId]/resourceGroups/[resourceGroupName]/providers/Microsoft.Search/searchServices/[serviceName]?api-version=2022-11-01

{
    "properties": {
        "encryptionWithCmk": {
            "enforcement": "Enabled",
            "encryptionComplianceStatus": "Compliant"
        }
    }
}

Примеры REST

В этом разделе показан json для нескольких объектов, чтобы увидеть, где найти "encryptionKey" в определении объекта.

Шифрование индекса

Сведения о создании нового индекса с помощью REST API можно найти в разделе Create Index (REST API), где единственное различие заключается в указании сведений ключа шифрования в рамках определения индекса:

{
 "name": "hotels",
 "fields": [
  {"name": "HotelId", "type": "Edm.String", "key": true, "filterable": true},
  {"name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false},
  {"name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.lucene"},
  {"name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.lucene"},
  {"name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true},
  {"name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true},
  {"name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": true, "sortable": true, "facetable": true},
  {"name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true, "facetable": true},
  {"name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true},
  {"name": "Location", "type": "Edm.GeographyPoint", "filterable": true, "sortable": true}
 ],
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

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

Шифрование сопоставлений синонимов

Создайте зашифрованную карту синонимов с помощью REST API поиска azure для сопоставления синонимов. Используйте свойство encryptionKey, чтобы указать, какой ключ шифрования следует использовать.

{
  "name" : "synonymmap1",
  "format" : "solr",
  "synonyms" : "United States, United States of America, USA\n
  Washington, Wash. => WA",
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

Теперь можно отправить запрос на создание сопоставления синонимов, а затем начать использовать его в обычном режиме.

Шифрование источника данных

Создайте зашифрованный источник данных с помощью команды Создать источник данных (REST API). Используйте свойство encryptionKey, чтобы указать, какой ключ шифрования следует использовать.

{
  "name" : "datasource1",
  "type" : "azureblob",
  "credentials" :
  { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=datasource;AccountKey=accountkey;EndpointSuffix=core.windows.net"
  },
  "container" : { "name" : "containername" },
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

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

Шифрование набора навыков

Создайте зашифрованный набор навыков с помощью команды Создать набор навыков с помощью REST API. Используйте свойство encryptionKey, чтобы указать, какой ключ шифрования следует использовать.

{
    "name": "skillset1",
    "skills":  [ omitted for brevity ],
    "cognitiveServices": { omitted for brevity },
      "knowledgeStore":  { omitted for brevity  },
    "encryptionKey": (optional) { 
        "keyVaultKeyName": "myEncryptionKey",
        "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
        "keyVaultUri": "https://demokeyvault.vault.azure.net",
        "accessCredentials": {
            "applicationId": "00000000-0000-0000-0000-000000000000",
            "applicationSecret": "myApplicationSecret"}
    }
}

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

Шифрование индексатора

Создайте зашифрованный индексатор с помощью команды Создать индексатор с помощью REST API. Используйте свойство encryptionKey, чтобы указать, какой ключ шифрования следует использовать.

{
  "name": "indexer1",
  "dataSourceName": "datasource1",
  "skillsetName": "skillset1",
  "parameters": {
      "configuration": {
          "imageAction": "generateNormalizedImages"
      }
  },
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

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

Внимание

Хотя "encryptionKey" нельзя добавить в существующие индексы поиска или карты синонимов, его можно обновить, предоставив различные значения для любого из трех сведений о хранилище ключей (например, обновление версии ключа). При переходе на новый ключ из Key Vault или новую версию ключа необходимо сначала обновить любой индекс поиска или сопоставление синонимов, которое использует этот ключ, чтобы использовать новый ключ/версию перед удалением предыдущего ключа/версии. Если этого не сделать, индекс или сопоставление синонимов перестанет работать, и вы не сможете расшифровать содержимое после того, как будет потерян доступ к ключу. Хотя восстановление разрешений доступа к хранилищу ключей в дальнейшем восстановит доступ к содержимому.

Работа с зашифрованным содержимым

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

В течение времени должна происходить смена ключа. При каждой смене ключей важно выполнять следующую последовательность:

  1. Определите ключ, используемый индексом или сопоставлением синонимов.
  2. Создайте новый ключ в хранилище ключей, но не удаляйте исходный ключ.
  3. Обновите свойства encryptionKey в индексе или сопоставлении синонимов, указав новые значения. Другие значения могут быть указаны только в объектах, которые изначально были созданы с этим свойством.
  4. Отключите или удалите предыдущий ключ в хранилище ключей. Проконтролируйте доступ к ключу и удостоверьтесь, что используется новый ключ.

По соображениям производительности служба поиска кэширует ключ на несколько часов. Если вы отключите или удалите ключ без предоставления нового, запросы продолжают работать на временной основе до истечения срока действия кэша. Однако после того, как служба поиска больше не сможет расшифровать содержимое, вы получите это сообщение: "Доступ запрещен. Возможно, используемый ключ запросов был отозван. Повторите попытку".

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

Если вы не знакомы с архитектурой безопасности Azure, ознакомьтесь с документацией по безопасности Azure и, в частности, этой статьей: