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

ПРИМЕНИМО К: API SQL API Cassandra API Gremlin API таблиц API Azure Cosmos DB для MongoDB

Примечание

Использование управляемых клиентом ключей с Azure Cosmos DBным аналитическим хранилищем в настоящее время требует дополнительной настройки вашей учетной записи. Обратитесь за дополнительными azurecosmosdbcmk@service.microsoft.com сведениями.

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

Уровни шифрования данных клиента

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

Примечание

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

Регистрация поставщика ресурсов Azure Cosmos DB в своей подписке Azure

  1. Войдите на портал Azure, перейдите к своей подписке Azure и на вкладке Параметры выберите Поставщики ресурсов.

    Элемент поставщиков ресурсов в меню слева

  2. Найдите поставщик ресурсов Microsoft.DocumentDB. Убедитесь, что поставщик ресурсов уже помечен как зарегистрированный. В противном случае выберите выделите его и выберите Зарегистрировать.

    Регистрация поставщика ресурсов Microsoft.DocumentDB

Настройка экземпляра Azure Key Vault

Для использования управляемых клиентом ключей с Azure Cosmos DB требуется установка двух свойств в экземпляре Azure Key Vault, который планируется использовать для размещения ключей шифрования: Обратимое удаление и Защита от очистки.

Если вы создаете новый экземпляр Azure Key Vault, включите эти свойства во время создания:

Включение обратимого удаления и защиты от очистки для нового экземпляра Azure Key Vault

Если вы используете имеющийся экземпляр Azure Key Vault, проверьте, включены ли эти свойства, на портале Azure в разделе Свойства. Если какое-либо из этих свойств не включено, см. разделы "Включение обратимого удаления" и "Включение защиты от очистки" в одной из следующих статей:

Добавление политики доступа к экземпляру Azure Key Vault

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

    Политики доступа из меню слева

  2. Нажмите + Добавить политику доступа.

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

    Выбор нужных разрешений

  4. В разделе Выбор субъекта выберите пункт Не выбрано. Затем выполните поиск субъекта Azure Cosmos DB и выберите его (для удобства поиск можно выполнить по идентификатору субъекта: 57506a73-e302-42a9-b869-6f12d9ec29e9 регионах Azure для государственных организаций и a232010e-820c-4083-83bb-3ace5fc29d0b во всех остальных регионах Azure). Наконец, в нижней части нажмите кнопку Выбрать. Если субъект Azure Cosmos DB отсутствует в списке, может потребоваться повторная регистрация поставщика ресурсов Microsoft.DocumentDB, как описано в разделе Регистрация поставщика ресурсов в этой статье.

    Выбор субъекта Azure Cosmos DB

  5. Выберите Добавить, чтобы добавить новую политику доступа.

  6. Выберите сохранить на экземпляре Key Vault, чтобы сохранить все изменения.

Создание нового ключа в Azure Key Vault

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

    Элемент Keys в меню слева

  2. Выберите Создать или импортировать, введите имя нового ключа и выберите размер ключа RSA. Для максимальной безопасности рекомендуется использовать как минимум 3072. Щелкните Создать.

    Создание ключа

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

  4. Скопируйте идентификатор ключа, кроме части после последней косой черты:

    Копирование идентификатора ключа

Создание учетной записи Azure Cosmos

Использование портала Azure

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

Настройка параметров CMK на портале Azure

Использование Azure PowerShell

При создании учетной записи Azure Cosmos DB с помощью PowerShell придерживайтесь следующих рекомендаций.

  • Передайте скопированный ранее универсальный код ресурса (URI) ключа Azure Key Vault в свойство keyVaultKeyUri в PropertyObject.

  • В качестве версии API используйте 2019-12-12 или более новую.

Важно!

Для успешного создания учетной записи с управляемыми клиентом ключами необходимо явно задать свойство locations.

$resourceGroupName = "myResourceGroup"
$accountLocation = "West US 2"
$accountName = "mycosmosaccount"

$failoverLocations = @(
    @{ "locationName"="West US 2"; "failoverPriority"=0 }
)

$CosmosDBProperties = @{
    "databaseAccountOfferType"="Standard";
    "locations"=$failoverLocations;
    "keyVaultKeyUri" = "https://<my-vault>.vault.azure.net/keys/<my-key>";
}

New-AzResource -ResourceType "Microsoft.DocumentDb/databaseAccounts" `
    -ApiVersion "2019-12-12" -ResourceGroupName $resourceGroupName `
    -Location $accountLocation -Name $accountName -PropertyObject $CosmosDBProperties

Чтобы после создания учетной записи проверить, включены ли управляемые клиентом ключи, получите URI ключа Azure Key Vault:

Get-AzResource -ResourceGroupName $resourceGroupName -Name $accountName `
    -ResourceType "Microsoft.DocumentDb/databaseAccounts" `
    | Select-Object -ExpandProperty Properties `
    | Select-Object -ExpandProperty keyVaultKeyUri

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

При создании новой учетной записи Azure Cosmos с помощью шаблона Azure Resource Manager придерживайтесь следующих рекомендаций.

  • Передайте скопированный ранее универсальный код ресурса (URI) ключа Azure Key Vault в свойство keyVaultKeyUri в объекте properties.

  • В качестве версии API используйте 2019-12-12 или более новую.

Важно!

Для успешного создания учетной записи с управляемыми клиентом ключами необходимо явно задать свойство locations.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "accountName": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "keyVaultKeyUri": {
            "type": "string"
        }
    },
    "resources": 
    [
        {
            "type": "Microsoft.DocumentDB/databaseAccounts",
            "name": "[parameters('accountName')]",
            "apiVersion": "2019-12-12",
            "kind": "GlobalDocumentDB",
            "location": "[parameters('location')]",
            "properties": {
                "locations": [ 
                    {
                        "locationName": "[parameters('location')]",
                        "failoverPriority": 0,
                        "isZoneRedundant": false
                    }
                ],
                "databaseAccountOfferType": "Standard",
                "keyVaultKeyUri": "[parameters('keyVaultKeyUri')]"
            }
        }
    ]
}

Разверните шаблон, используя следующий скрипт PowerShell:

$resourceGroupName = "myResourceGroup"
$accountName = "mycosmosaccount"
$accountLocation = "West US 2"
$keyVaultKeyUri = "https://<my-vault>.vault.azure.net/keys/<my-key>"

New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile "deploy.json" `
    -accountName $accountName `
    -location $accountLocation `
    -keyVaultKeyUri $keyVaultKeyUri

Использование Azure CLI

При создании новой учетной записи Azure Cosmos с помощью Azure CLI передайте универсальный код ресурса (URI) ключа Azure Key Vault, скопированный ранее из параметра --key-uri.

resourceGroupName='myResourceGroup'
accountName='mycosmosaccount'
keyVaultKeyUri = 'https://<my-vault>.vault.azure.net/keys/<my-key>'

az cosmosdb create \
    -n $accountName \
    -g $resourceGroupName \
    --locations regionName='West US 2' failoverPriority=0 isZoneRedundant=False \
    --key-uri $keyVaultKeyUri

Чтобы после создания учетной записи проверить, включены ли управляемые клиентом ключи, получите URI ключа Azure Key Vault:

az cosmosdb show \
    -n $accountName \
    -g $resourceGroupName \
    --query keyVaultKeyUri

Смена ключей

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

  • Создайте новую версию ключа, которая сейчас используется из Azure Key Vault:

    Создание новой версии ключа

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

    Запись меню шифрования данных

    Затем замените универсальный код ресурса (URI) ключа новым ключом, который вы хотите использовать, и выберите сохранить:

    Обновление URI ключа

    Вот как добиться того же результата в PowerShell:

    $resourceGroupName = "myResourceGroup"
    $accountName = "mycosmosaccount"
    $newKeyUri = "https://<my-vault>.vault.azure.net/keys/<my-new-key>"
    
    $account = Get-AzResource -ResourceGroupName $resourceGroupName -Name $accountName `
        -ResourceType "Microsoft.DocumentDb/databaseAccounts"
    
    $account.Properties.keyVaultKeyUri = $newKeyUri
    
    $account | Set-AzResource -Force
    

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

Обработка ошибок

При использовании ключей Customer-Managed (CMK) в Azure Cosmos DB при возникновении ошибок Azure Cosmos DB возвращает сведения об ошибке вместе с кодом подсостояния HTTP в ответе. Этот код подсостояния можно использовать для отладки основной причины проблемы. Список поддерживаемых кодов подсостояния HTTP см. в статье коды состояния HTTP для Azure Cosmos DB .

Часто задаваемые вопросы

Взимается ли дополнительная плата за включение управляемых клиентом ключей?

Нет, плата за включение этой функции не взимается.

Как управляемые клиентом ключи влияют на планирование ресурсов?

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

Operation type (Тип операции) Увеличение количества единиц запроса
Точечные операции чтения (получение элементов по их идентификаторам) +5 % на операцию
Любая операция записи +6 % на операцию
примерно +0,06 единиц запроса на индексированное свойство
Запросы, канал изменений для чтения или канал с конфликтами +15 % на операцию

Какие данные шифруются с помощью управляемых клиентом ключей?

С помощью управляемых клиентом ключей шифруются все данные, хранящиеся в учетной записи Azure Cosmos, за исключением следующих метаданных:

Поддерживаются ли управляемые клиентом ключи для имеющихся учетных записей Azure Cosmos?

Сейчас эта возможность доступна только для новых учетных записей.

Можно ли использовать управляемые клиентом ключи в сочетании с Azure Cosmos DBным аналитическим хранилищем?

Да, но в настоящее время для вашей учетной записи требуется дополнительная настройка. Обратитесь за дополнительными azurecosmosdbcmk@service.microsoft.com сведениями.

Планируется ли поддержка большей детализации по сравнению с ключами уровня учетной записи?

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

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

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

Запись меню шифрования данных

Можно также программно получить сведения об учетной записи Azure Cosmos и найти keyVaultKeyUri свойство. Сведения о том, как это можно сделать в PowerShell и с помощью Azure CLI, см. выше.

Как управляемые клиентом ключи влияют на резервное копирование?

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

Как отозвать ключ шифрования?

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

Отключение версии ключа

Кроме того, чтобы отозвать все ключи из экземпляра Azure Key Vault, можно удалить политику доступа, предоставленную субъекту Azure Cosmos DB.

Удаление политики доступа для субъекта-Azure Cosmos DB

Какие операции доступны после отзыва управляемого клиентом ключа?

Единственная операция, возможная после отзыва ключа шифрования, — это удаление учетной записи.

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