你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用资源锁来保护 Azure Cosmos DB 资源
适用对象: NoSQL MongoDB Cassandra Gremlin 表
作为管理员,你可能需要锁定 Azure Cosmos DB 帐户、数据库或容器。 锁可防止组织中的其他用户意外删除或修改关键资源。 可以将锁级别设置为 CanNotDelete
或 ReadOnly
。
Level | 说明 |
---|---|
CanNotDelete |
经过授权的用户仍可以读取和修改资源,但不能删除资源。 |
ReadOnly |
经授权的用户可以读取资源,但不能删除或更新资源。 应用此锁类似于将所有经授权的用户限制于“读者”角色授予的权限。 |
先决条件
- 现有的 Azure Cosmos DB 帐户。
- 如果你有 Azure 订阅,请创建一个新帐户。
- 如果还没有 Azure 订阅,可以在开始前创建一个免费帐户。
- 或者,可以在提交之前免费试用 Azure Cosmos DB。
锁的应用方式
在父范围应用锁时,该范围内所有资源都会继承相同的锁。 即使是之后添加的资源也会从父作用域继承该锁。 继承中限制性最强的锁优先执行。
与 Azure 基于角色的访问控制不同,你可以使用管理锁来对所有用户和角色应用限制。
资源管理器锁仅适用于管理平面内发生的操作,包括发送到 https://management.azure.com
的操作。 这类锁不会限制资源如何执行各自的函数。 资源更改将受到限制,但资源操作不受限制。 例如,Azure Cosmos DB 容器上的 ReadOnly 锁定会阻止你删除或修改容器。 它不会阻止你在容器中创建、更新或删除数据。 会允许数据事务,因为这些操作不会发送到 https://management.azure.com
。
管理锁定
资源锁定对于使用帐户密钥访问 Azure Cosmos DB 的用户所做的更改不起作用,除非首先通过启用 disableKeyBasedMetadataWriteAccess
属性锁定 Azure Cosmos DB 帐户。 确保此属性不会中断使用任何 SDK、Azure 门户或第三方工具对资源进行更改的现有应用程序。 启用此属性会中断通过帐户密钥进行连接以修改资源的应用程序。 这些修改可能包括更改吞吐量、更新索引策略等。
$RESOURCE_GROUP_NAME = "<resource-group>"
$ACCOUNT_NAME = "<account-name>"
$LOCK_NAME = "$ACCOUNT_NAME-lock"
首先,更新帐户,以防止通过帐户密钥连接的任何内容进行更改。
$parameters = @{
Name = $ACCOUNT_NAME
ResourceGroupName = $RESOURCE_GROUP_NAME
DisableKeyBasedMetadataWriteAccess = true
}
Update-AzCosmosDBAccount @parameters
在 Azure Cosmos DB 帐户资源和所有子资源上创建删除锁。
$parameters = @{
ResourceGroupName = $RESOURCE_GROUP_NAME
ResourceName = $ACCOUNT_NAME
LockName = $LOCK_NAME
ApiVersion = "2020-04-01"
ResourceType = "Microsoft.DocumentDB/databaseAccounts"
LockLevel = "CanNotDelete"
}
New-AzResourceLock @parameters
模板
将锁应用到 Azure Cosmos DB 资源时,请使用 Microsoft.Authorization/locks
Azure 资源管理器 (ARM) 资源。
{
"type": "Microsoft.Authorization/locks",
"apiVersion": "2017-04-01",
"name": "cosmoslock",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName'))]"
],
"properties": {
"level": "CanNotDelete",
"notes": "Do not delete Azure Cosmos DB account."
},
"scope": "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName'))]"
}
示例
管理 Azure Cosmos DB 的资源锁:
- API for Cassandra 密钥空间和表 Azure CLI | Azure PowerShell
- API for Gremlin 数据库和图形 Azure CLI | Azure PowerShell
- API for MongoDB 数据库和集合 Azure CLI| Azure PowerShell
- API for NoSQL 数据库和容器 Azure CLI | Azure PowerShell
- API for Table 表 Azure CLI | Azure PowerShell