可以对 Azure Database for PostgreSQL 灵活服务器实例应用管理锁,特别是 CanNotDelete 和 ReadOnly,以保护这些实例免受意外删除或修改。 这些锁在控制平面上运行并替代用户权限,提供额外的资源保护层。
锁类型
| 锁类型 | 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 灵活服务器实例意外删除,而不会妨碍日常作。 请考虑将其添加到自动化脚本和部署策略,以提高生产工作流的安全性。