Шифрование данных для отдельного сервера Базы данных Azure для PostgreSQL с использованием Azure CLI
Область применения: отдельный сервер Базы данных Azure для PostgreSQL
Внимание
База данных Azure для PostgreSQL — одиночный сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для PostgreSQL — гибкий сервер. Дополнительные сведения о миграции на База данных Azure для PostgreSQL — гибкий сервер см. в статье "Что происходит с одним сервером База данных Azure для PostgreSQL?".
Сведения о том, как с помощью Azure CLI настроить шифрование данных и управлять им для отдельного сервера Базы данных Azure для PostgreSQL.
Необходимые условия для Azure CLI
Подписка Azure и права администратора для нее.
Создайте хранилище ключей и ключ, который будет использоваться для ключа, управляемого клиентом. Также включите в хранилище ключей защиту от очистки и обратимое удаление.
az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
В созданном хранилище Azure Key Vault создайте ключ, который будет использоваться для шифрования данных отдельного сервера Базы данных Azure для PostgreSQL.
az keyvault key create --name <key_name> -p software --vault-name <vault_name>
Чтобы использовать существующее хранилище ключей, оно должно иметь следующие свойства для использования в качестве ключа, управляемого клиентом:
-
az resource update --id $(az keyvault show --name \ <key_vault_name> -o tsv | awk '{print $1}') --set \ properties.enableSoftDelete=true
-
az keyvault update --name <key_vault_name> --resource-group <resource_group_name> --enable-purge-protection true
-
Чтобы использовать ключ в качестве управляемого клиентом, он должен иметь следующие атрибуты:
- без даты окончания срока действия;
- не отключено;
- выполнение операций get, wrap, unwrap.
Задайте правильные разрешения для операций с ключами.
Существует два способа получения управляемого удостоверения для отдельного сервера Базы данных Azure для PostgreSQL.
Создание новой Базы данных Azure для сервера PostgreSQL с управляемым удостоверением.
az postgres server create --name <server_name> -g <resource_group> --location <location> --storage-size <size> -u <user> -p <pwd> --backup-retention <7> --sku-name <sku name> --geo-redundant-backup <Enabled/Disabled> --assign-identity
Обновление существующей Базы данных Azure для сервера PostgreSQL, чтобы получить управляемое удостоверение.
az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
Задайте Разрешения ключей (Get, Wrap, Unwrap) для параметра Субъект — это имя отдельного сервера PostgreSQL.
az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principal id of the server>
Настройка шифрования данных для отдельного сервера Базы данных Azure для PostgreSQL
Включите шифрование данных для отдельного сервера Базы данных Azure для PostgreSQL с помощью ключа, созданного в Azure Key Vault.
az postgres server key create --name <server_name> -g <resource_group> --kid <key_url>
URL-адрес ключа:
https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Использование шифрования данных для серверов восстановления или реплик
После шифрования отдельного сервера базы данных Azure для PostgreSQL с помощью управляемого ключа клиента, хранящегося в Key Vault, все создаваемые копии сервера также шифруются. Новую копию можно создать с помощью операции локального восстановления или геовосстановления либо с помощью операции реплики (локальной или между регионами). Чтобы создать зашифрованный восстановленный сервер для отдельного зашифрованного сервера PostgreSQL, выполните указанные ниже действия.
Создание восстановленного сервера или сервера-реплики
Повторная проверка шифрования данных на восстановленном сервере
- Присвоение удостоверения для сервера-реплики
az postgres server update --name <server name> -g <resource_group> --assign-identity
- Получение существующего ключа, который должен использоваться для восстановленного сервера или сервера-реплики
az postgres server key list --name '<server_name>' -g '<resource_group_name>'
- Задание политики для нового удостоверения для восстановленного сервера или сервера-реплики
az keyvault set-policy --name <keyvault> -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principl id of the server returned by the step 1>
- Повторная проверка восстановленного сервера или сервера-реплики с помощью ключа шифрования
az postgres server key create –name <server name> -g <resource_group> --kid <key url>
Дополнительные возможности для ключа, используемого для отдельного сервера Базы данных Azure для PostgreSQL
Получение используемого ключа
az postgres server key show --name <server name> -g <resource_group> --kid <key url>
URL-адрес ключа: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Получение списка используемых ключей
az postgres server key list --name <server name> -g <resource_group>
Удаление используемого ключа
az postgres server key delete -g <resource_group> --kid <key url>
Использование шаблона Azure Resource Manager для включения шифрования данных
Наряду с порталом Azure шифрование данных можно также включить на отдельном сервере Базы данных Azure для PostgreSQL с помощью шаблонов Azure Resource Manager для новых и существующих серверов.
Для существующего сервера
Вы также можете использовать шаблоны Azure Resource Manager, чтобы включить шифрование данных на существующих отдельных серверах Базы данных Azure для PostgreSQL.
Передайте скопированный ранее идентификатор ресурса ключа Azure Key Vault в свойство
Uri
в объекте "properties".Используйте 2020-01-01-preview в качестве версии API.
{
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
},
"serverName": {
"type": "string"
},
"keyVaultName": {
"type": "string",
"metadata": {
"description": "Key vault name where the key to use is stored"
}
},
"keyVaultResourceGroupName": {
"type": "string",
"metadata": {
"description": "Key vault resource group name where it is stored"
}
},
"keyName": {
"type": "string",
"metadata": {
"description": "Key name in the key vault to use as encryption protector"
}
},
"keyVersion": {
"type": "string",
"metadata": {
"description": "Version of the key in the key vault to use as encryption protector"
}
}
},
"variables": {
"serverKeyName": "[concat(parameters('keyVaultName'), '_', parameters('keyName'), '_', parameters('keyVersion'))]"
},
"resources": [
{
"type": "Microsoft.DBforPostgreSQL/servers",
"apiVersion": "2017-12-01",
"kind": "",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"name": "[parameters('serverName')]",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-05-01",
"name": "addAccessPolicy",
"resourceGroup": "[parameters('keyVaultResourceGroupName')]",
"dependsOn": [
"[resourceId('Microsoft.DBforPostgreSQL/servers', parameters('serverName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "[concat(parameters('keyVaultName'), '/add')]",
"apiVersion": "2018-02-14-preview",
"properties": {
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(resourceId('Microsoft.DBforPostgreSQL/servers/', parameters('serverName')), '2017-12-01', 'Full').identity.principalId]",
"permissions": {
"keys": [
"get",
"wrapKey",
"unwrapKey"
]
}
}
]
}
}
]
}
}
},
{
"name": "[concat(parameters('serverName'), '/', variables('serverKeyName'))]",
"type": "Microsoft.DBforPostgreSQL/servers/keys",
"apiVersion": "2020-01-01-preview",
"dependsOn": [
"addAccessPolicy",
"[resourceId('Microsoft.DBforPostgreSQL/servers', parameters('serverName'))]"
],
"properties": {
"serverKeyType": "AzureKeyVault",
"uri": "[concat(reference(resourceId(parameters('keyVaultResourceGroupName'), 'Microsoft.KeyVault/vaults/', parameters('keyVaultName')), '2018-02-14-preview', 'Full').properties.vaultUri, 'keys/', parameters('keyName'), '/', parameters('keyVersion'))]"
}
}
]
}
Следующие шаги
Дополнительные сведения о шифровании данных см. в статье Шифрование данных на отдельном сервере Базы данных Azure для PostgreSQL с помощью ключа, управляемого клиентом.