Azure CLI ile MySQL için Azure Veritabanı esnek sunucu için veri şifreleme

Bu öğreticide, Azure CLI kullanarak MySQL için Azure Veritabanı Esnek Sunucusu için veri şifrelemeyi ayarlama ve yönetme adımları gösterilmektedir.

Bu eğitimde şunları öğreniyorsunuz:

  • Veri şifrelemesi ile MySQL için Azure Veritabanı esnek sunucu örneği oluşturma
  • Mevcut MySQL için Azure Veritabanı esnek sunucu örneğini veri şifreleme ile güncelleştirme
  • Veri şifrelemeyi etkinleştirmek için Azure Resource Manager şablonu kullanma

Prerequisites

az login
  • Birden çok aboneliğiniz varsa az account set komutunu kullanarak sunucuyu oluşturmak istediğiniz uygun aboneliği seçin:
az account set --subscription \<subscription id\>
  • Azure Key Vault'ta bir anahtar kasası veya yönetilen HSM ve anahtar oluşturun. Yönetilen bir müşteri anahtarı olarak kullanılabilmesi için anahtar kasası veya yönetilen HSM, aşağıdaki özellikleri bulundurmalıdır.

Yumuşak silme:

az resource update --id $(az keyvault show --name \ \<key\_vault\_name\> -o tsv | awk '{print $1}') --set \ properties.enableSoftDelete=true

Korumalı boşaltma

az keyvault update --name \<key\_vault\_name\> --resource-group \<resource\_group\_name\> --enable-purge-protection true

Bekletme günleri 90 gün olarak ayarlandı:

az keyvault update --name \<key\_vault\_name\> --resource-group \<resource\_group\_name\> --retention-days 90

Müşteri tarafından yönetilen anahtar olarak kullanılabilmesi için anahtarın aşağıdaki özniteliklere sahip olması gerekir:

  • Son kullanma tarihi yok
  • Devre dışı değil
  • List, Get, Wrap ve Unwrap işlemlerini gerçekleştirin.
  • Geçici silme etkin
  • Saklama süresi 90 güne ayarlanmış olarak etkin temizleme koruması
  • recoverylevel özniteliği Recoverable olarak ayarlandı

Aşağıdaki komutu kullanarak anahtarın yukarıdaki özniteliklerini doğrulayabilirsiniz:

  • Azure Key Vault için:
az keyvault key show --vault-name \<key\_vault\_name\> -n \<key\_name\>
  • Azure Key Vault Yönetilen HSM için
az keyvault key show --hsm-name \<key\_vault\_name\> -n \<key\_name\>

Mevcut MySQL için Azure Veritabanı Esnek Sunucu örneğini veri şifrelemesi ile güncelleştirme

Veri şifrelemesi için anahtarı ve kimliği ayarlayın veya değiştirin:

az mysql flexible-server update --resource-group testGroup --name testserver \\ --key \<key identifier of newKey\> --identity newIdentity

MySQL için Azure Veritabanı Esnek Sunucusu için veri şifrelemeyi devre dışı bırakın:

az mysql flexible-server update --resource-group testGroup --name testserver --disable-data-encryption

Coğrafi olarak yedekli yedekleme ve veri şifreleme etkinleştirilmiş mySQL için Azure Veritabanı Esnek Sunucu örneği oluşturma

az mysql flexible-server create -g testGroup -n testServer --location testLocation \\
--geo-redundant-backup Enabled \\
--key <key identifier of testKey> --identity testIdentity \\
--backup-key <key identifier of testBackupKey> --backup-identity testBackupIdentity

Coğrafi yedekli yedekleme ile veri şifrelemesi için anahtarı, kimliği, yedekleme anahtarını ve yedekleme kimliğini ayarlayın veya değiştirin.

az mysql flexible-server update --resource-group testGroup --name testserver \\ --key \<key identifier of newKey\> --identity newIdentity \\  --backup-key \<key identifier of newBackupKey\> --backup-identity newBackupIdentity

Veri şifrelemeyi etkinleştirmek için Azure Resource Manager şablonu kullanma

params identityUri ve primaryKeyUri , sırasıyla kullanıcı tarafından yönetilen kimliğin ve kullanıcı tarafından yönetilen anahtarın kaynak kimliğidir.

    "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "administratorLogin": {
            "type": "string"
        },
        "administratorLoginPassword": {
            "type": "securestring"
        },
        "location": {
            "type": "string"
        },
        "serverName": {
            "type": "string"
        },
        "serverEdition": {
            "type": "string"
        },
        "vCores": {
            "type": "int",
            "defaultValue": 4
        },
        "storageSizeGB": {
            "type": "int"
        },
        "haEnabled": {
            "type": "string",
            "defaultValue": "Disabled"
        },
        "availabilityZone": {
            "type": "string"
        },
        "standbyAvailabilityZone": {
            "type": "string"
        },
        "version": {
            "type": "string"
        },
        "tags": {
            "type": "object",
            "defaultValue": {}
        },
        "backupRetentionDays": {
            "type": "int"
        },
        "geoRedundantBackup": {
            "type": "string"
        },
        "vmName": {
            "type": "string",
            "defaultValue": "Standard_B1ms"
        },
        "storageIops": {
            "type": "int"
        },
        "storageAutogrow": {
            "type": "string",
            "defaultValue": "Enabled"
        },
        "autoIoScaling": {
            "type": "string",
            "defaultValue": "Disabled"
        },
        "vnetData": {
            "type": "object",
            "metadata": {
                "description": "Vnet data is an object which contains all parameters pertaining to vnet and subnet"
            },
            "defaultValue": {
                "virtualNetworkName": "testVnet",
                "subnetName": "testSubnet",
                "virtualNetworkAddressPrefix": "10.0.0.0/16",
                "virtualNetworkResourceGroupName": "[resourceGroup().name]",
                "location": "eastus2",
                "subscriptionId": "[subscription().subscriptionId]",
                "subnetProperties": {},
                "isNewVnet": false,
                "subnetNeedsUpdate": false,
                "Network": {}
            }
        },
        "identityUri": {
            "type": "string",
            "metadata": {
                "description": "The resource ID of the identity used for data encryption"
            }
        },
        "primaryKeyUri": {
            "type": "string",
            "metadata": {
                "description": "The resource ID of the key used for data encryption"
            }
        }
    },
    "variables": {
        "api": "2021-05-01",
        "identityData": "[if(empty(parameters('identityUri')), json('null'), createObject('type', 'UserAssigned', 'UserAssignedIdentities', createObject(parameters('identityUri'), createObject())))]",
        "dataEncryptionData": "[if(or(empty(parameters('identityUri')), empty(parameters('primaryKeyUri'))), json('null'), createObject('type', 'AzureKeyVault', 'primaryUserAssignedIdentityId', parameters('identityUri'), 'primaryKeyUri', parameters('primaryKeyUri')))]"
    },
    "resources": [
        {
            "apiVersion": "[variables('api')]",
            "location": "[parameters('location')]",
            "name": "[parameters('serverName')]",
            "identity": "[variables('identityData')]",
            "properties": {
                "version": "[parameters('version')]",
                "administratorLogin": "[parameters('administratorLogin')]",
                "administratorLoginPassword": "[parameters('administratorLoginPassword')]",
                "Network": "[if(empty(parameters('vnetData').Network), json('null'), parameters('vnetData').Network)]",
                "Storage": {
                    "StorageSizeGB": "[parameters('storageSizeGB')]",
                    "Iops": "[parameters('storageIops')]",
                    "Autogrow": "[parameters('storageAutogrow')]",
                    "AutoIoScaling": "[parameters('autoIoScaling')]"
                },
                "Backup": {
                    "backupRetentionDays": "[parameters('backupRetentionDays')]",
                    "geoRedundantBackup": "[parameters('geoRedundantBackup')]"
                },
                "availabilityZone": "[parameters('availabilityZone')]",
                "highAvailability": {
                    "mode": "[parameters('haEnabled')]",
                    "standbyAvailabilityZone": "[parameters('standbyAvailabilityZone')]"
                },
                "dataEncryption": "[variables('dataEncryptionData')]"
            },
            "sku": {
                "name": "[parameters('vmName')]",
                "tier": "[parameters('serverEdition')]",
                "capacity": "[parameters('vCores')]"
            },
            "tags": "[parameters('tags')]",
            "type": "Microsoft.DBforMySQL/flexibleServers"
        }
    ]
}