Azure CLI を使用した Azure Database for PostgreSQL 単一サーバーのデータ暗号化
適用対象: Azure Database for PostgreSQL - 単一サーバー
重要
Azure Database for PostgreSQL - シングル サーバーは廃止パスにあります。 Azure Database for PostgreSQL - フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for PostgreSQL - フレキシブル サーバーへの移行の詳細については、Azure Database for PostgreSQL 単一サーバーの現状に関するページを参照してください。
Azure CLI を使用して Azure Database for PostgreSQL 単一サーバーのデータ暗号化を設定および管理する方法について説明します。
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 PostgreSQL 単一サーバーのデータ暗号化に使用するキーを作成します。
az keyvault key create --name <key_name> -p software --vault-name <vault_name>
既存のキー コンテナーを使用するには、カスタママー マネージド キーとして使用すための次のプロパティが必要です。
カスタマー マネージド キーとして使用するには、キーに次の属性が必要です。
- 有効期限がない
- 無効化されていない
- get、wrap および unwrap の操作を実行する
キー操作に対する適切なアクセス許可を設定する
Azure Database for PostgreSQL 単一サーバーのマネージド ID を取得する方法は 2 つあります。
マネージド ID を使用して Azure Database for PostgreSQL サーバーを新規作成する。
az postgres server create --name <server_name> -g <resource_group> --location <location> --storage-size <size> -u <user> -p <pwd> --backup-retention <7> --sku-name <sku name> --geo-redundant-backup <Enabled/Disabled> --assign-identity
既存の Azure Database for PostgreSQL サーバーを更新して、マネージド ID を取得する。
az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
PostgreSQL 単一サーバーの名前であるプリンシパルに対して、キーのアクセス許可 (get、wrap、unwrap) を設定します。
az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principal id of the server>
Azure Database for PostgreSQL 単一サーバーのデータ暗号化を設定する
Azure Key Vault に作成されたキーを使用して、Azure Database for PostgreSQL 単一サーバーのデータ暗号化を有効にします。
az postgres 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 PostgreSQL 単一サーバーが暗号化されると、そのサーバーの新しく作成されたコピーも暗号化されます。 この新しいコピーは、ローカルまたは geo 復元操作を使用するか、レプリカ (ローカル/リージョン間) 操作を使用して作成できます。 そのため、暗号化された PostgreSQL 単一サーバーの場合は、次の手順を使用して、暗号化済みの復元されたサーバーを作成できます。
復元/レプリカ サーバーの作成
サーバーが復元された後、復元されたサーバーのデータ暗号化を再検証する
- レプリカ サーバーに ID を割り当てる
az postgres server update --name <server name> -g <resource_group> --assign-identity
- 復元されたサーバーまたはレプリカ サーバーに使用されたはずの既存のキーを取得する
az postgres server key list --name '<server_name>' -g '<resource_group_name>'
- 復元されたサーバーまたはレプリカ サーバーの新しい ID に対するポリシーを設定する
az keyvault set-policy --name <keyvault> -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principl id of the server returned by the step 1>
- 暗号化キーを使用して復元されたサーバーまたはレプリカ サーバーを再検証します
az postgres server key create –name <server name> -g <resource_group> --kid <key url>
Azure Database for PostgreSQL 単一サーバーに使用されているキーの追加機能
使用されているキーを取得する
az postgres server key show --name <server name> -g <resource_group> --kid <key url>
キーの URL: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
使用されているキーを一覧表示する
az postgres server key list --name <server name> -g <resource_group>
使用されているキーを削除する
az postgres server key delete -g <resource_group> --kid <key url>
Azure Resource Manager テンプレートを使用したデータ暗号化の有効化
Azure portal とは別に、新規および既存のサーバー用の Azure Resource Manager テンプレートを使用して、Azure Database for PostgreSQL の単一サーバー上でデータ暗号化を有効にすることもできます。
既存のサーバーの場合
また、Azure Resource Manager テンプレートを使用して、既存の Azure Database for PostgreSQL 単一サーバー上でデータ暗号化を有効にすることもできます。
プロパティ オブジェクトの
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.DBforPostgreSQL/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.DBforPostgreSQL/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.DBforPostgreSQL/servers/', parameters('serverName')), '2017-12-01', 'Full').identity.principalId]",
"permissions": {
"keys": [
"get",
"wrapKey",
"unwrapKey"
]
}
}
]
}
}
]
}
}
},
{
"name": "[concat(parameters('serverName'), '/', variables('serverKeyName'))]",
"type": "Microsoft.DBforPostgreSQL/servers/keys",
"apiVersion": "2020-01-01-preview",
"dependsOn": [
"addAccessPolicy",
"[resourceId('Microsoft.DBforPostgreSQL/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'))]"
}
}
]
}
次のステップ
データ暗号化の詳細については、「カスタマー マネージド キーを使用した Azure Database for PostgreSQL 単一サーバーのデータの暗号化」を参照してください。