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 無料アカウントを作成してください。
Note
Azure 無料アカウントがあれば、Azure Database for MySQL フレキシブル サーバーを 12 か月間無料でお試しいただけます。 詳細については、Azure Database for MySQL フレキシブル サーバーの無料トライアルに関するページを参照してください。
Azure CLI をインストールするか、最新バージョンにアップグレードします。 Azure CLI のインストールに関するページを参照してください。
az login コマンドを使用して Azure アカウントにサインインします。 ID プロパティにご注意ください。これは、ご使用の Azure アカウントのサブスクリプション ID のことです。
az login
- 複数のサブスクリプションがある場合は、次の az アカウント セット コマンドを使用して、サーバーを作成する適切なサブスクリプションを選択します。
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
カスタマー マネージド キーとして使用するには、キーに次の属性が必要です。
- 有効期限なし
- 無効化されていない
- List、Get、Wrap、Unwrap の操作を実行する
- Recoverable に設定された 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
geo 冗長バックアップとデータ暗号化を有効にして 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
geo 冗長バックアップを使用したデータ暗号化のキー、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 identityUri と primaryKeyUri は、それぞれユーザー マネージド 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"
}
]
}