Criptografia de dados para o Banco de Dados do Azure para PostgreSQL Servidor único usando a CLI do Azure
APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Único
Importante
O Banco de Dados do Azure para PostgreSQL - Servidor Único está no caminho da desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para PostgreSQL - Servidor Flexível. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para PostgreSQL - Servidor Flexível, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único PostgreSQL?.
Saiba como usar a CLI do Azure para configurar e gerenciar a criptografia de dados para seu Banco de Dados do Azure para servidor único PostgreSQL.
Pré-requisitos para a CLI do Azure
Você deve ter uma assinatura do Azure e ser um administrador nessa assinatura.
Crie um cofre de chaves e uma chave para usar para uma chave gerenciada pelo cliente. Habilite também a proteção contra limpeza e a exclusão suave no cofre de chaves.
az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
No Cofre da Chave do Azure criado, crie a chave que será usada para a criptografia de dados do Banco de Dados do Azure para o servidor único PostgreSQL.
az keyvault key create --name <key_name> -p software --vault-name <vault_name>
Para usar um cofre de chaves existente, ele deve ter as seguintes propriedades para usar como uma chave gerenciada pelo cliente:
-
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
-
A chave deve ter os seguintes atributos para a utilizar como uma chave gerida pelo cliente:
- Não tem uma data de validade
- Não está desativada
- Executar operações de obter, encapsular e desembrulhar
Definir as permissões certas para operações de chave
Há duas maneiras de obter a identidade gerenciada para seu Banco de Dados do Azure para servidor único PostgreSQL.
Crie um novo Banco de Dados do Azure para o servidor PostgreSQL com uma identidade gerenciada.
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
Atualize um banco de dados do Azure existente para o servidor PostgreSQL para obter uma identidade gerenciada.
az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
Defina as permissões de chave (Get, Wrap, Unwrap) para a Principal, que é o nome do servidor de servidor único PostgreSQL.
az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principal id of the server>
Definir criptografia de dados para o Banco de Dados do Azure para PostgreSQL Servidor único
Habilite a criptografia de dados para o Banco de Dados do Azure para servidor único PostgreSQL usando a chave criada no Cofre de Chaves do Azure.
az postgres server key create --name <server_name> -g <resource_group> --kid <key_url>
URL da chave:
https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Usando criptografia de dados para restaurar ou replicar servidores
Depois que o Servidor Único do Banco de Dados do Azure para PostgreSQL é criptografado com a chave gerenciada de um cliente armazenada no Cofre da Chave, qualquer cópia recém-criada do servidor também é criptografada. Você pode fazer essa nova cópia por meio de uma operação local ou de restauração geográfica, ou por meio de uma operação de réplica (local/entre regiões). Portanto, para um servidor único PostgreSQL criptografado, você pode usar as etapas a seguir para criar um servidor restaurado criptografado.
Criando um servidor restaurado/de réplica
Depois que o servidor for restaurado, revalide a criptografia de dados do servidor restaurado
- Atribuir identidade para o servidor de réplica
az postgres server update --name <server name> -g <resource_group> --assign-identity
- Obtenha a chave existente que deve ser usada para o servidor restaurado/de réplica
az postgres server key list --name '<server_name>' -g '<resource_group_name>'
- Definir a política para a nova identidade para o servidor restaurado/de réplica
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>
- Revalide o servidor restaurado/de réplica com a chave de criptografia
az postgres server key create –name <server name> -g <resource_group> --kid <key url>
Capacidade adicional para a chave que está sendo usada para o Banco de Dados do Azure para PostgreSQL Servidor único
Utilize a chave
az postgres server key show --name <server name> -g <resource_group> --kid <key url>
URL da chave: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Listar a chave usada
az postgres server key list --name <server name> -g <resource_group>
Solte a chave que está sendo usada
az postgres server key delete -g <resource_group> --kid <key url>
Usando um modelo do Azure Resource Manager para habilitar a criptografia de dados
Além do portal do Azure, você também pode habilitar a criptografia de dados em seu Banco de Dados do Azure para servidor único PostgreSQL usando modelos do Azure Resource Manager para servidor novo e existente.
Para um servidor existente
Além disso, você pode usar modelos do Azure Resource Manager para habilitar a criptografia de dados em seu Banco de Dados do Azure existente para servidores PostgreSQL Únicos.
Passe a ID do Recurso da chave do Cofre da Chave do Azure que você copiou anteriormente na
Uri
propriedade no objeto de propriedades.Use 2020-01-01-preview como a versão da 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'))]"
}
}
]
}
Próximos passos
Para saber mais sobre criptografia de dados, consulte Banco de Dados do Azure para PostgreSQL Criptografia de dados de servidor único com chave gerenciada pelo cliente.