다음을 통해 공유


Azure CLI를 사용하는 Azure Database for MySQL - 유연한 서버에 대한 데이터 암호화

적용 대상: Azure Database for MySQL - 유연한 서버

이 자습서에서는 Azure CLI를 사용하여 Azure Database for MySQL 유연한 서버에 대한 데이터 암호화를 설정하고 관리하는 방법을 보여 줍니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 데이터 암호화를 사용하여 Azure Database for MySQL 유연한 서버 인스턴스 만들기
  • 데이터 암호화를 사용하여 기존 Azure Database for MySQL 유연한 서버 인스턴스 업데이트
  • Azure Resource Manager 템플릿을 사용하여 데이터 암호화 사용

필수 조건

  • 활성 구독이 있는 Azure 계정.

  • Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

    참고 항목

    Azure 무료 계정을 사용하면 이제 12개월 동안 Azure Database for MySQL 유연한 서버를 무료로 사용해 볼 수 있습니다. 자세한 내용은 Azure Database for MySQL 유연한 서버를 무료로 사용해 보기를 참조하세요.

  • Azure CLI를 설치하거나 최신 버전으로 업그레이드합니다. Azure CLI 설치를 참조하세요.

  • az login 명령을 사용하여 Azure 계정에 로그인합니다. Azure 계정의 구독 ID를 나타내는 ID 속성에 유의합니다.

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

고객 관리형 키로 사용하려면 키에 다음 특성이 있어야 합니다.

  • 만료 날짜 없음
  • 사용 안 함 없음
  • 나열, 가져오기, 래핑, 래핑 해제 작업 수행
  • recoverylevel 특성이 복구 가능으로 설정됨(보존 기간이 90일로 설정된 일시 삭제를 사용해야 함)
  • 제거 보호 사용

다음 명령을 사용하여 키의 특성을 확인할 수 있습니다.

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

데이터 암호화를 사용하여 기존 Azure Database for MySQL 유연한 서버 인스턴스 업데이트

데이터 암호화에 대한 키 및 ID를 설정하거나 변경합니다.

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

Azure Database for MySQL 유연한 서버에 대한 데이터 암호화를 사용하지 않도록 설정:

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

지역 중복 백업 및 데이터 암호화를 사용하도록 설정된 Azure Database for MySQL 유연한 서버 인스턴스 만들기

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

지역 중복 백업을 사용하여 데이터 암호화에 대한 키, ID, 백업 키 및 백업 ID를 설정하거나 변경합니다.

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는 각각 사용자 관리 ID 및 사용자 관리형 키의 리소스 ID입니다.

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

다음 단계