共用方式為


適用於 MySQL 的 Azure 資料庫資料加密- Azure CLI 的彈性伺服器

適用於:適用於 MySQL 的 Azure 資料庫 - 彈性伺服器

本教學課程說明如何使用 Azure CLI,針對適用於 MySQL 的 Azure 資料庫彈性伺服器設定及管理資料加密。

在本教學課程中,您會了解如何:

  • 使用資料加密建立適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體
  • 使用資料加密更新現有適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體
  • 使用 Azure Resource Manager 範本來啟用資料加密

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。

  • 如果您沒有 Azure 訂閱,請在開始之前先建立 Azure 免費帳戶

    注意

    Azure 免費帳戶現在可讓您免費試用適用於 MySQL 的 Azure 資料庫彈性伺服器 12 個月。 如需詳細資訊,請參閱免費試用適用於 MySQL 的 Azure 資料庫彈性伺服器

  • 安裝 Azure CLI 或升級至最新版本。 請參閱安裝 Azure CLI

  • 使用 az login 命令登入 Azure 帳戶。 請注意識別碼屬性,其代表您 Azure 帳戶的訂用帳戶識別碼:

az login
  • 如果您有多個訂用帳戶,請使用 az account set 命令選擇您想要在其中建立伺服器的適當訂用帳戶:
az account set --subscription \<subscription id\>
  • 在 Azure Key Vault 中,建立金鑰保存庫或受控 HSM 和金鑰。 金鑰保存庫或受控 HSM 必須具有下列屬性,才能用來作為客戶自控金鑰:

虛刪除

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

保留天數設定為 90 天:

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

金鑰必須具有下列屬性才能作為客戶自控金鑰:

  • 沒有到期日
  • 未停用
  • 執行 ListGetWrapUnwrap 作業
  • recoverylevel 屬性設定為 [Recoverable] (這需要啟用虛刪除,且保留期間設定為 90 天)
  • 已啟用清除保護

您可以使用下列命令來驗證金鑰的上述屬性:

az keyvault key show --vault-name \<key\_vault\_name\> -n \<key\_name\>

使用資料加密更新現有適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體

設定或變更資料加密的金鑰和身分識別:

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

停用適用於 MySQL 的 Azure 資料庫彈性伺服器的資料加密:

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

使用已啟用異地備援備份和資料加密,建立適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體

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

使用異地備援備份來設定或變更資料加密的金鑰、身分識別、備份金鑰和備份身分識別:

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

使用 Azure Resource Manager 範本來啟用資料加密

params identityUriprimaryKeyUri 分別為使用者受控識別和使用者受控金鑰的資源識別碼。

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

下一步