Azure CLI を使用した Azure Database for MySQL のデータ暗号化
適用対象: Azure Database for MySQL - 単一サーバー
重要
Azure Database for MySQL シングル サーバーは廃止パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、Azure Database for MySQL シングル サーバーの現状に関するページを参照してください
Azure CLI を使用して Azure Database for MySQL のデータ暗号化を設定し、管理する方法について説明します。
Azure CLI の前提条件
Azure サブスクリプションがあり、そのサブスクリプションの管理者である必要があります。
カスタマー マネージド キーで使用するキー コンテナーとキーを作成します。 また、キー コンテナーの消去防止と論理的な削除も有効にします。
az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
作成された Azure Key Vault で、Azure Database for MySQL のデータ暗号化に使用するキーを作成します。
az keyvault key create --name <key_name> -p software --vault-name <vault_name>
既存のキー コンテナーを使用するには、カスタママー マネージド キーとして使用すための次のプロパティが必要です。
-
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
-
カスタマー マネージド キーとして使用するには、キーに次の属性が必要です。
- 有効期限がない
- 無効化されていない
- get、wrap、unwrap の操作を実行する
- Recoverable に設定された recoverylevel 属性 (これには保有期間を 90 日に設定して、論理的な削除を有効にする必要があります)
- 消去保護の有効化
次のコマンドを使用して、キーの上記の属性を確認できます。
az keyvault key show --vault-name <key_vault_name> -n <key_name>
- Azure Database for MySQL - 単一サーバーは、汎用またはメモリ最適化の価格レベルと、汎用ストレージ v2 である必要があります。 処理を進める前に、「カスタマー マネージド キーを使用したデータ暗号化」の制限事項を参照してください。
キー操作に対する適切なアクセス許可を設定する
Azure Database for MySQL でマネージド ID を取得する方法は 2 つあります。
マネージド ID を持つ Azure Database for MySQL サーバーを新規作成する。
az mysql server create --name -g <resource_group> --location <locations> --storage-size size> -u <user>-p <pwd> --backup-retention <7> --sku-name <sku name> -geo-redundant-backup <Enabled/Disabled> --assign-identity
既存の Azure Database for MySQL サーバーを更新して、マネージド ID を取得する。
az mysql server update --name <server name> -g <resource_group> --assign-identity
MySQL サーバーの名前である [プリンシパル] の [キーのアクセス許可] を設定します ( [取得] 、 [ラップ] 、 [ラップ解除] )。
az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principal id of the server>
Azure Database for MySQL のデータ暗号化を設定する
Azure Key Vault で作成されたキーを使用して、Azure Database for MySQL のデータ暗号化を有効にします。
az mysql server key create –name <server name> -g <resource_group> --kid <key url>
キーの URL:
https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
復元サーバーまたはレプリカ サーバーでのデータ暗号化の使用
Key Vault に格納されている顧客のマネージド キーで Azure Database for MySQL が暗号化された後、新しく作成されたサーバーのコピーも暗号化されます。 この新しいコピーは、ローカルまたは geo 復元操作を使用するか、レプリカ (ローカル/リージョン間) 操作を使用して作成できます。 そのため、暗号化された MySQL サーバーの場合は、次の手順を使用して、暗号化済みの復元されたサーバーを作成できます。
復元/レプリカ サーバーの作成
サーバーが復元された後、復元されたサーバーのデータ暗号化を再検証する
- レプリカ サーバーに ID を割り当てる
az mysql server update --name <server name> -g <resoure_group> --assign-identity
- 復元されたサーバーまたはレプリカ サーバーに使用されたはずの既存のキーを取得する
az mysql server key list --name '<server_name>' -g '<resource_group_name>'
- 復元されたサーバーまたはレプリカ サーバーの新しい ID に対するポリシーを設定する
az keyvault set-policy --name <keyvault> -g <resoure_group> --key-permissions get unwrapKey wrapKey --object-id <principl id of the server returned by the step 1>
- 暗号化キーを使用して復元されたサーバーまたはレプリカ サーバーを再検証する
az mysql server key create –name <server name> -g <resource_group> --kid <key url>
Azure Database for MySQL で使用されているキーの追加機能
使用されているキーを取得する
az mysql server key show --name <server name> -g <resource_group> --kid <key url>
キーの URL: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
使用されているキーを一覧表示する
az mysql server key list --name <server name> -g <resource_group>
使用されているキーを削除する
az mysql server key delete -g <resource_group> --kid <key url>
Azure Resource Manager テンプレートを使用したデータ暗号化の有効化
Azure portal とは別に、新規および既存のサーバー用の Azure Resource Manager テンプレートを使用して、Azure Database for MySQL サーバー上でデータ暗号化を有効にすることもできます。
新しいサーバーの場合
事前に作成したいずれかの Azure Resource Manager テンプレートを使用して、データ暗号化を有効にしてサーバーをプロビジョニングします。データの暗号化を使用した例
この Azure Resource Manager テンプレートでは、Azure Database for MySQL サーバーを作成し、パラメーターとして渡された KeyVault および Key を使用して、サーバーのデータ暗号化を有効にします。
既存のサーバーの場合
また、Azure Resource Manager テンプレートを使用して、既存の Azure Database for MySQL サーバー上でデータ暗号化を有効にすることもできます。
プロパティ オブジェクトの
Uri
プロパティで以前にコピーした Azure Key Vault キーのリソース ID を渡します。2020-01-01-preview を API バージョンとして使用します。
{
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
},
"serverName": {
"type": "string"
},
"keyVaultName": {
"type": "string",
"metadata": {
"description": "Key vault name where the key to use is stored"
}
},
"keyVaultResourceGroupName": {
"type": "string",
"metadata": {
"description": "Key vault resource group name where it is stored"
}
},
"keyName": {
"type": "string",
"metadata": {
"description": "Key name in the key vault to use as encryption protector"
}
},
"keyVersion": {
"type": "string",
"metadata": {
"description": "Version of the key in the key vault to use as encryption protector"
}
}
},
"variables": {
"serverKeyName": "[concat(parameters('keyVaultName'), '_', parameters('keyName'), '_', parameters('keyVersion'))]"
},
"resources": [
{
"type": "Microsoft.DBforMySQL/servers",
"apiVersion": "2017-12-01",
"kind": "",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"name": "[parameters('serverName')]",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-05-01",
"name": "addAccessPolicy",
"resourceGroup": "[parameters('keyVaultResourceGroupName')]",
"dependsOn": [
"[resourceId('Microsoft.DBforMySQL/servers', parameters('serverName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "[concat(parameters('keyVaultName'), '/add')]",
"apiVersion": "2018-02-14-preview",
"properties": {
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(resourceId('Microsoft.DBforMySQL/servers/', parameters('serverName')), '2017-12-01', 'Full').identity.principalId]",
"permissions": {
"keys": [
"get",
"wrapKey",
"unwrapKey"
]
}
}
]
}
}
]
}
}
},
{
"name": "[concat(parameters('serverName'), '/', variables('serverKeyName'))]",
"type": "Microsoft.DBforMySQL/servers/keys",
"apiVersion": "2020-01-01-preview",
"dependsOn": [
"addAccessPolicy",
"[resourceId('Microsoft.DBforMySQL/servers', parameters('serverName'))]"
],
"properties": {
"serverKeyType": "AzureKeyVault",
"uri": "[concat(reference(resourceId(parameters('keyVaultResourceGroupName'), 'Microsoft.KeyVault/vaults/', parameters('keyVaultName')), '2018-02-14-preview', 'Full').properties.vaultUri, 'keys/', parameters('keyName'), '/', parameters('keyVersion'))]"
}
}
]
}