共用方式為


以 Azure Cosmos DB 限制使用者對資料作業的存取

適用於:NoSQL MongoDB Cassandra Gremlin 桌子

在 Azure Cosmos DB 中,有兩種方式可以驗證您與資料庫服務的互動:

  • 在與 Azure 入口網站互動時,使用您的 Microsoft Entra 身分識別,
  • 從 API 和 SDK 發出呼叫時,使用 Azure Cosmos DB 金鑰資源權杖

每種驗證方法都可讓您存取不同的作業集,但有一些重疊:

每個驗證類型的作業分割

在某些案例中,您可能想要限制組織的某些使用者只執行資料作業 (亦即 CRUD 要求和查詢)。 對於不需要建立或刪除資源的開發人員,或變更其處理中容器的佈建輸送量的開發人員,通常就是這種情況。

您可以套用下列步驟來限制存取:

  1. 為您想要限制其存取的使用者建立自訂 Microsoft Entra 角色。 自訂 Active Directory 角色應使用 Azure Cosmos DB 的細微動作,對作業具有更細緻的存取層級。
  2. 不允許使用索引鍵執行非資料作業。 您可以藉由將這些作業限制為僅 Azure Resource Manager 呼叫來實現此目的。

本文的後續各節會說明如何執行這些步驟。

注意

若要在接下來的幾節中執行命令,您必須安裝 Azure PowerShell Module 3.0.0 或更新版本,以及對您嘗試修改的訂用帳戶具有 Azure 擁有者角色

在接下來幾節的 PowerShell 指令碼中,將下列預留位置取代為您環境特有的值:

  • $MySubscriptionId - 包含 Azure Cosmos DB 帳戶 (您想要在其中限制權限) 的訂用帳戶識別碼。 例如: e5c8766a-eeb0-40e8-af56-0eb142ebf78e
  • $MyResourceGroupName - 包含 Azure Cosmos DB 帳戶的資源群組。 例如: myresourcegroup
  • $MyAzureCosmosDBAccountName - Azure Cosmos DB 帳戶名稱。 例如: mycosmosdbsaccount
  • $MyUserName - 您要限制其存取的使用者的登入 (username@domain)。 例如: cosmosdbuser@contoso.com

選取您的 Azure 訂用帳戶

Azure PowerShell 命令會要求您登入,並選取要執行命令的訂用帳戶:

Login-AzAccount
Select-AzSubscription $MySubscriptionId

建立自定義 Microsoft Entra 角色

下列指令碼會為 Azure Cosmos DB 帳戶建立存取權為「僅限金鑰」的 Microsoft Entra 角色指派。 角色基於 Azure 自訂角色Azure Cosmos DB 的細微動作。 這些角色和動作是 Microsoft.DocumentDB Microsoft Entra 命名空間的一部分。

  1. 首先,使用下列內容建立名為 AzureCosmosKeyOnlyAccess.json 的 JSON 文件:

    {
        "Name": "Azure Cosmos DB Key Only Access Custom Role",
        "Id": "00000000-0000-0000-0000-0000000000",
        "IsCustom": true,
        "Description": "This role restricts the user to read the account keys only.",
        "Actions":
        [
            "Microsoft.DocumentDB/databaseAccounts/listKeys/action"
        ],
        "NotActions": [],
        "DataActions": [],
        "NotDataActions": [],
        "AssignableScopes":
        [
            "/subscriptions/$MySubscriptionId"
        ]
    }
    
  2. 執行下列命令來建立角色指派,並將其指派給使用者:

    New-AzRoleDefinition -InputFile "AzureCosmosKeyOnlyAccess.json"
    New-AzRoleAssignment -SignInName $MyUserName -RoleDefinitionName "Azure Cosmos DB Key Only Access Custom Role" -ResourceGroupName $MyResourceGroupName -ResourceName $MyAzureCosmosDBAccountName -ResourceType "Microsoft.DocumentDb/databaseAccounts"
    

不允許執行非資料作業

下列命令會移除您使用金鑰執行下列動作的能力:

  • 建立、修改或刪除資源
  • 更新容器設定 (包括編制索引原則、輸送量等)。
$cdba = Get-AzResource -ResourceType "Microsoft.DocumentDb/databaseAccounts" -ApiVersion "2015-04-08" -ResourceGroupName $MyResourceGroupName -ResourceName $MyAzureCosmosDBAccountName
$cdba.Properties.disableKeyBasedMetadataWriteAccess="True"
$cdba | Set-AzResource -Force

下一步