使用鎖定來保護 Azure Cosmos DB 資源

適用於:NoSQL MongoDB Cassandra Gremlin Table

身為管理員,您可能需要鎖定 Azure Cosmos DB 帳戶、資料庫或容器。 鎖定可避免組織中其他使用者不小心刪除或修改重要資源。 您可以將鎖定層級設定為 CanNotDeleteReadOnly

層級 描述
CanNotDelete 授權使用者仍可讀取或修改資源,但無法刪除資源。
ReadOnly 授權使用者可以讀取資源,但無法刪除或更新資源。 套用這個鎖定類似於限制所有經過授權使用者的權限是由讀者角色所授與。

必要條件

如何套用鎖定

當您在父範圍套用鎖定時,該範圍內的所有資源都會都繼承相同的鎖定。 甚至您稍後新增的資源都會繼承父項的鎖定。 繼承中限制最嚴格的鎖定優先順序最高。

不同於 Azure 角色型存取控制,您可以使用管理鎖定來對所有使用者和角色套用限制。 若要了解適用於 Azure Cosmos DB 的角色型存取控制,請參閱 Azure Cosmos DB 中的 Azure 角色型存取控制

Resource Manager 鎖定只會套用於管理平面發生的作業,亦即要傳送至 https://management.azure.com 的作業。 鎖定並不會限制資源執行自己功能的方式。 限制資源的變更,但沒有限制資源的作業。 例如,Azure Cosmos DB 容器上的 ReadOnly 鎖定可防止您刪除或修改容器。 但無法防止您建立、更新或刪除容器中的資料。 允許資料交易,因為那些作業並不會傳送到 https://management.azure.com

管理鎖定

除非啟用 disableKeyBasedMetadataWriteAccess 屬性已先鎖定 Azure Cosmos DB 帳戶,否則,資源鎖定不適用於使用者使用帳戶金鑰存取 Azure Cosmos DB 所做的變更。 請確定此屬性不會中斷使用任何 SDK、Azure 入口網站或協力廠商工具變更資源的現有應用程式。 啟用此屬性會中斷透過帳戶金鑰連線以修改資源的應用程式。 這些修改可以包括變更輸送量、更新索引原則等。若要深入了解並瀏覽檢查清單以確保應用程式能夠繼續運作,請參閱防止變更 Azure Cosmos DB SDK

$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 Resource Manager (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 的資源鎖定:

下一步