使用资源锁保护 Azure Database for PostgreSQL

可以对 Azure Database for PostgreSQL 灵活服务器实例应用管理锁,特别是 CanNotDeleteReadOnly,以保护这些实例免受意外删除或修改。 这些锁在控制平面上运行并替代用户权限,提供额外的资源保护层。

锁类型

锁类型 Description
CanNotDelete 用户可以读取和修改设置,但不能删除服务器资源。
ReadOnly 用户只能进行读取;他们无法更新或删除服务器。 类似于“读取者”角色。

先决条件

  • 订阅中现有的 Azure Database for PostgreSQL 灵活服务器实例。

锁行为和继承

  • 可以在订阅、资源组或服务器级别应用锁。
  • 子资源从其父级继承锁;限制性最大的锁优先。
  • 锁会限制 ARM 操作(门户、CLI、API),但不会阻止 SQL 数据平面操作(例如编辑表或架构)。

通过 Azure CLI 或 ARM 应用锁

Azure CLI

在现有服务器上应用 CanNotDelete 锁:
az lock create \
  --name PreventDelete \
  --lock-type CanNotDelete \
  --resource-group MyResourceGroup \
  --resource-type Microsoft.DBforPostgreSQL/flexibleServers \
  --resource-name MyFlexibleServer
移除锁:
az lock delete \
  --name PreventDelete \
  --resource-group MyResourceGroup \
  --resource-type Microsoft.DBforPostgreSQL/flexibleServers \
  --resource-name MyFlexibleServer

ARM 模板

将锁应用于 Azure PostgreSQL DB 资源时,请使用 Microsoft.Authorization/locks Azure 资源管理器 (ARM) 资源。

{
  "type": "Microsoft.Authorization/locks",
  "apiVersion": "2016-09-01",
  "name": "serverLock",
  "scope": "[resourceId('Microsoft.DBforPostgreSQL/flexibleServers', parameters('serverName'))]",
  "properties": {
    "level": "CanNotDelete",
    "notes": "Prevent accidental deletion of PostgreSQL server."
  }
}

Permissions

创建或删除锁需要 Microsoft.Authorization/locks/* 的权限,这些权限在“所有者”和“用户访问管理员”等内置角色中提供。

最佳做法和注意事项

  • 非常适合需要多项删除安全措施的生产工作负荷
  • 对于高可用性或后端服务器,请考虑在部署时实现锁。
  • 确保在预配之前解锁网络资源(VNET/子网),然后在部署后重新应用锁以避免干扰。
  • 当锁阻止服务器删除时,它们不会限制破坏性的 SQL 操作。 根据需要强制实施 SQL 级别策略。

结论

使用 ARM 管理锁有助于防止 PostgreSQL 灵活服务器实例意外删除,而不会妨碍日常作。 请考虑将其添加到自动化脚本和部署策略,以提高生产工作流的安全性。