本文提供为 Azure Database for PostgreSQL 灵活服务器配置数据加密的分步说明。
重要
在创建服务器时,唯一可以决定是否要使用系统托管密钥或客户托管密钥进行数据加密。 做出该决定并创建服务器后,不能在两个选项之间切换。
本文介绍如何创建新服务器并配置其数据加密选项。 对于将数据加密配置为使用客户管理的加密密钥的现有服务器,你将了解:
- 如何选择服务访问加密密钥的不同用户分配的托管标识。
- 如何指定不同的加密密钥,或如何轮换当前用于数据加密的加密密钥。
若要了解 Azure Database for PostgreSQL 灵活服务器上下文中的数据加密,请参阅 数据加密。
使用 Azure 门户:
在预配新的 Azure Database for PostgreSQL 灵活服务器期间,数据加密在 “安全 ”选项卡中进行配置。对于 数据加密密钥,请选择 服务管理的密钥 单选按钮。
如果将异地冗余备份存储与服务器一起预配, “安全 ”选项卡的方面会略有更改,因为服务器使用两个单独的加密密钥。 一个用于要在其中部署服务器的主要区域,一个用于异步复制服务器备份到的配对区域。
可以使用系统分配的加密密钥启用数据加密,同时通过 az postgres flexible-server create 命令预配新服务器。
az postgres flexible-server create \
--resource-group <resource_group> \
--name <server> ...
备注
上一命令中没有特殊参数,用于指定必须使用系统分配的密钥创建服务器才能进行数据加密。 使用系统分配的密钥进行数据加密的原因是默认选项。
此外,请注意,必须完成提供给其他参数的命令,其存在和值将因配置预配服务器的其他功能的方式而异。
使用 Azure 门户:
-
如果还没有托管标识,请创建一个用户分配的托管标识。 如果服务器启用了异地冗余备份,则需要创建到不同的标识。 每个标识都用于访问两个数据加密密钥中的每一个。
备注
尽管不需要维护区域复原能力,但建议在服务器所在的同一区域中创建用户托管标识。 如果服务器启用了异地备份冗余,我们建议在服务器的 配对区域中 创建用于访问异地冗余备份的数据加密密钥的第二个用户托管标识。
-
创建一个 Azure Key Vault(如果尚未创建一个密钥存储)。 请确保满足 要求。 此外,在配置密钥存储之前以及创建密钥之前,请遵循 建议 ,并将所需的权限分配给用户分配的托管标识。 如果服务器启用了异地冗余备份,则需要创建第二个密钥存储。 第二个密钥存储用于保留备份复制到服务器的 配对区域 的数据加密密钥。
备注
用于保留数据加密密钥的密钥存储必须部署在服务器所在的同一区域中。 如果服务器启用了异地备份冗余,则必须在服务器的 配对区域中 创建保留异地冗余备份的数据加密密钥的密钥存储。
在密钥存储中创建一个密钥。 如果服务器启用了异地冗余备份,则需要每个密钥存储上的一个密钥。 使用这些密钥之一,我们将加密服务器的所有数据(包括所有系统和用户数据库、临时文件、服务器日志、预写日志段和备份)。 使用第二个密钥,我们将加密通过服务器的 配对区域 异步复制的备份副本。
在预配新的 Azure Database for PostgreSQL 灵活服务器期间,数据加密在 “安全 ”选项卡中进行配置。对于 数据加密密钥,请选择 “客户管理的密钥 ”单选按钮。
如果将异地冗余备份存储与服务器一起预配, “安全 ”选项卡的方面会略有更改,因为服务器使用两个单独的加密密钥。 一个用于要在其中部署服务器的主要区域,一个用于异步复制服务器备份到的配对区域。
在 “用户分配的托管标识”中,选择“ 更改标识”。
在用户分配的托管标识列表中,选择希望服务器用来访问 Azure Key Vault 中存储的数据加密密钥。
选择 并添加。
选择密钥。
订阅 会自动填充要在其上创建服务器的订阅的名称。 保留数据加密密钥的密钥存储必须与服务器位于同一订阅中。
展开 Key Vault,然后选择数据加密密钥所在的实例。
备注
展开下拉列表框时,会显示 “无可用项”。 它需要几秒钟时间才能列出部署在服务器所在的同一区域中的密钥保管库的所有实例。
展开 密钥,然后选择要用于数据加密的密钥的名称。
展开 “版本”,然后选择要用于数据加密的密钥版本的标识符。
选中“选择”。
配置新服务器的所有其他设置,然后选择“ 查看 + 创建”。
可以通过 az postgres flexible-server create 命令通过用户分配的加密密钥启用数据加密,同时预配新服务器。
如果服务器未启用异地冗余备份:
az postgres flexible-server create \
--resource-group <resource_group> \
--name <server> \
--geo-redundant-backup Disabled \
--identity <managed_identity_to_access_primary_encryption_key> \
--key <resource_identifier_of_primary_encryption_key> ...
备注
需要使用其他参数完成上一个命令,这些参数的状态和值会因配置预配服务器的其他功能的方式而异。
如果服务器启用了异地冗余备份:
az postgres flexible-server create \
--resource-group <resource_group> \
--name <server> \
--geo-redundant-backup Enabled \
--identity <managed_identity_to_access_primary_encryption_key> \
--key <resource_identifier_of_primary_encryption_key> \
--backup-identity <managed_identity_to_access_geo_backups_encryption_key> \
--backup-key <resource_identifier_of_geo_backups_encryption_key> ...
备注
需要使用其他参数完成上一个命令,这些参数的状态和值会因配置预配服务器的其他功能的方式而异。
在创建服务器时,唯一可以决定是否要使用系统托管密钥或客户托管密钥进行数据加密。 做出该决定并创建服务器后,不能在两个选项之间切换。 如果想要从一个备份更改为另一个,唯一的替代方法需要 将服务器可用的任何备份还原到新的服务器上。 配置还原时,可以更改新服务器的数据加密配置。
对于使用客户托管密钥使用数据加密部署的现有服务器,可以执行多项配置更改。 可以更改的内容是对用于加密的密钥的引用,以及服务用来访问密钥存储中保留的密钥的用户分配的托管标识的引用。
必须更新 Azure Database for PostgreSQL 灵活服务器对密钥的引用:
- 轮换存储在密钥存储中的密钥时,手动或自动轮换 Azure Database for PostgreSQL 灵活服务器指向密钥的特定版本。
- 如果想要使用不同的密钥存储中存储的相同或不同的密钥。
必须更新 Azure Database for PostgreSQL 灵活服务器使用的用户分配的托管标识,以便在使用其他标识时访问加密密钥。
使用 Azure 门户:
选择 Azure Database for PostgreSQL 灵活服务器。
在资源菜单中的 “安全性”下,选择 “数据加密”。
若要更改服务器访问密钥所在的密钥存储区的用户分配的托管标识,请展开 “用户分配的托管标识 ”下拉列表,然后选择任何可用的标识。
备注
组合框中显示的标识只是为 Azure Database for PostgreSQL 灵活服务器分配的标识。
尽管这不是必需的,但为了保持区域复原能力,我们建议在服务器所在的同一区域中选择用户托管标识。 如果服务器启用了异地备份冗余,我们建议用于访问异地冗余备份的数据加密密钥的第二个用户托管标识存在于服务器的 配对区域中 。
如果用户分配的用于访问数据加密密钥的托管标识未分配给 Azure Database for PostgreSQL 灵活服务器,并且它甚至不存在为 Azure 资源,其相应对象位于 Microsoft Entra ID 中,可以通过选择“ 创建”来创建它。
在 “创建用户分配的托管标识 ”面板中,完成要创建的用户分配的托管标识的详细信息,并自动分配给 Azure Database for PostgreSQL 灵活服务器以访问数据加密密钥。
如果用户分配的用于访问数据加密密钥的托管标识未分配给 Azure Database for PostgreSQL 灵活服务器,但它确实作为 Azure 资源,其相应对象位于 Microsoft Entra ID 中,可以通过选择 “选择”来分配它。
在用户分配的托管标识列表中,选择希望服务器用来访问 Azure Key Vault 中存储的数据加密密钥。
选择 并添加。
如果轮换密钥,或者要使用其他密钥,则必须更新 Azure Database for PostgreSQL 灵活服务器,使其指向新的密钥版本或新密钥。 为此,可以复制密钥的资源标识符,并将其粘贴到 “密钥标识符 ”框中。
如果访问 Azure 门户的用户有权访问密钥存储中存储的密钥,则可以使用替代方法选择新密钥或新密钥版本。 为此,请在 “键选择”方法中选择 “选择密钥 单选按钮”。
选择 “选择密钥”。
订阅 会自动填充要在其上创建服务器的订阅的名称。 保留数据加密密钥的密钥存储必须与服务器位于同一订阅中。
展开 Key Vault,然后选择数据加密密钥所在的实例。
备注
展开下拉列表框时,会显示 “无可用项”。 它需要几秒钟时间才能列出部署在服务器所在的同一区域中的密钥保管库的所有实例。
展开 密钥,然后选择要用于数据加密的密钥的名称。
展开 “版本”,然后选择要用于数据加密的密钥版本的标识符。
选中“选择”。
对所做的更改感到满意后,选择“ 保存”。
可以通过 az postgres flexible-server update 命令为现有服务器配置用户分配的加密密钥的数据加密。
az postgres flexible-server update \
--resource-group <resource_group> \
--name <server> \
--identity <managed_identity_to_access_primary_encryption_key> \
--key <resource_identifier_of_primary_encryption_key> ...
备注
前述命可能令需要结合使用其他参数来完成,所使用的参数及其取值会有所不同,具体取决于要如何为现有服务器配置其他功能。
无论是仅更改用于访问密钥的用户分配的托管标识,还是只想更改用于数据加密的密钥,还是要同时更改两者,都需要同时提供参数 --identity
和 --key
(或 --backup-identity
异 --backup-key
地冗余备份)。 如果同时提供这两个错误之一,则会收到以下任何错误:
User assigned identity and keyvault key need to be provided together. Please provide --identity and --key together.
User assigned identity and keyvault key need to be provided together. Please provide --backup-identity and --backup-key together.
如果传递给 --key
参数(或 --backup-key
异地冗余备份)的值指向的密钥不存在,或者如果用户分配的托管标识的资源标识符传递给 --identity
参数( --backup-identity
用于异地冗余备份)没有访问密钥所需的权限,则会出现以下错误:
Code: AzureKeyVaultKeyNameNotFound
Message: The operation could not be completed because the Azure Key Vault Key name '<key_vault_resource>' does not exist or User Assigned Identity does not have Get access to the Key (https://learn.docs.azure.cn/postgresql/flexible-server/concepts-data-encryption#requirements-for-configuring-data-encryption-for-azure-database-for-postgresql-flexible-server).
如果服务器启用了异地冗余备份,则可以配置用于加密异地冗余备份的密钥,以及用于访问该密钥的标识。 为此,可以使用 --backup-identity
和 --backup-key
参数。
az postgres flexible-server update \
--resource-group <resource_group> \
--name <server> \
--backup-identity <managed_identity_to_access_georedundant_encryption_key> \
--backup-key <resource_identifier_of_georedundant_encryption_key> ...
如果传递参数--backup-identity
和--backup-key
az postgres flexible server update
命令,并引用未启用异地冗余备份的现有服务器,则会出现以下错误:
Geo-redundant backup is not enabled. You cannot provide Geo-location user assigned identity and keyvault key.
传递给和参数的--identity
--backup-identity
标识(如果存在且有效)会自动添加到与 Azure Database for PostgreSQL 灵活服务器关联的用户分配的托管标识列表中。 即使命令稍后失败并出现其他错误,也是如此。 在这种情况下,你可能想要使用 az postgres flexible-server identity 命令列出、分配或删除分配给 Azure Database for PostgreSQL 灵活服务器的用户分配的托管标识。 若要详细了解如何在 Azure Database for PostgreSQL 灵活服务器中配置用户分配的托管标识,请参阅 将用户分配的托管标识关联到现有服务器, 将用户分配的托管标识取消关联到现有服务器,并 显示关联的用户分配的托管标识。