Enkripsi data untuk server fleksibel Azure Database for MySQL dengan Azure CLI

Tutorial ini menunjukkan kepada Anda cara menyiapkan dan mengelola enkripsi data untuk Azure Database for MySQL Flexible Server menggunakan Azure CLI.

Dalam tutorial ini, Anda akan belajar cara:

  • Membuat instans server fleksibel Azure Database for MySQL dengan enkripsi data
  • Memperbarui instans server fleksibel Azure Database for MySQL yang ada dengan enkripsi data
  • Menggunakan templat Azure Resource Manager untuk mengaktifkan enkripsi data

Prasyarat

az login
  • Jika Anda memiliki beberapa langganan, pilih langganan yang sesuai tempat Anda ingin membuat server menggunakan perintah az account set:
az account set --subscription \<subscription id\>
  • Di Azure Key Vault, buat sebuah brankas kunci atau HSM terkelola (Hardware Security Module) dan sebuah kunci. Brankas kunci atau HSM terkelola harus memiliki properti berikut untuk digunakan sebagai kunci yang dikelola oleh pelanggan.

Penghapusan sementara:

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

Pemurnian dilindungi:

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

Hari retensi diatur ke 90 hari:

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

Kunci harus memiliki atribut berikut untuk digunakan sebagai kunci yang dikelola pelanggan:

  • Tidak ada tanggal kedaluwarsa
  • Tidak dinonaktifkan
  • Melakukan operasi List, Get, Wrap, Unwrap
  • Fitur penghapusan sementara diaktifkan
  • Proteksi penghapusan diaktifkan dengan periode retensi yang diatur ke 90 hari
  • recoverylevel atribut diatur ke Recoverable

Anda dapat memverifikasi atribut kunci di atas dengan menggunakan perintah berikut:

  • Untuk Azure Key Vault:
az keyvault key show --vault-name \<key\_vault\_name\> -n \<key\_name\>
  • Untuk HSM Terkelola Azure Key Vault
az keyvault key show --hsm-name \<key\_vault\_name\> -n \<key\_name\>

Memperbarui instans Server Fleksibel Azure Database for MySQL yang sudah ada dengan enkripsi data

Atur atau ubah kunci dan identitas untuk enkripsi data:

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

Nonaktifkan enkripsi data untuk Server Fleksibel Azure Database for MySQL:

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

Buat Azure Database untuk instans Server Fleksibel MySQL dengan pencadangan redundan geografis dan enkripsi data diaktifkan.

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

Atur atau ubah kunci, identitas, kunci cadangan, dan identitas cadangan untuk enkripsi data dengan cadangan redundan geografis:

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

Menggunakan templat Azure Resource Manager untuk mengaktifkan enkripsi data

Param identityUri dan primaryKeyUri masing-masing adalah ID sumber daya dari identitas terkelola pengguna dan kunci yang dikelola pengguna.

    "$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"
        }
    ]
}