共用方式為


Azure Cosmos DB 中的角色型存取控制

適用於:NoSQL MongoDB Cassandra Gremlin 桌子

注意

本文說明 Azure Cosmos DB 中管理平面作業的角色型存取控制。 如果您使用資料平面作業,則會使用主要金鑰、資源權杖或 Azure Cosmos DB RBAC 來保護資料。

若要深入了解 API for NoSQL 中資料平面作業的角色型存取控制,請參閱安全存取資料Azure Cosmos DB RBAC 文章。 如需 Azure Cosmos DB API for MongoDB 相關資訊,請參閱 API for MongoDB 中的資料平面 RBAC

Azure Cosmos DB 針對 Azure Cosmos DB 中常見的管理案例提供了內建的 Azure 角色型存取控制 (Azure RBAC)。 在 Microsoft Entra ID 中具有設定檔的個人可以將這些 Azure 角色指派給使用者、群組、服務主體或受控識別,以授與或拒絕對 Azure Cosmos DB 資源上資源和作業的存取權。 角色指派的範圍僅限於控制平面存取,其中包括存取 Azure Cosmos DB 帳戶、資料庫、容器,以及供應項目 (輸送量)。

內建角色

以下是 Azure Cosmos DB 支援的內建角色:

內建角色 說明
DocumentDB 帳戶參與者 可管理 Azure Cosmos DB 帳戶。
Cosmos DB 帳戶讀取者角色 可讀取 Azure Cosmos DB 帳戶資料。
CosmosBackupOperator 可以針對已啟用定期備份的資料庫或容器,在 Azure 入口網站中提交還原要求。 可以在 Azure 入口網站中修改備份間隔和保留期。 無法存取任何資料或使用資料總管。
CosmosRestoreOperator 可針對連續備份模式的 Azure Cosmos DB 帳戶執行還原動作。
Cosmos DB 操作員 可以佈建 Azure Cosmos DB 帳戶、資料庫和容器。 無法存取任何資料或使用資料總管。

身分識別與存取權管理 (IAM)

Azure 入口網站中的 [存取控制 (IAM)] 窗格可用來設定 Azure Cosmos DB 資源上的 Azure 角色型存取控制。 角色會套用至 Active Directory 中的使用者、群組、服務主體和受控識別。 您可以針對個人和群組使用內建角色或自訂角色。 以下螢幕擷取畫面顯示在 Azure 入口網站中使用存取控制 (IAM) 的 Active Directory 整合 (Azure RBAC):

Azure 入口網站 中的存取控制 (IAM) - 示範資料庫安全性。

自訂角色

除了內建角色之外,使用者也可以在 Azure 中建立自訂角色,並將這些角色套用至其 Active Directory 租用戶中所有訂用帳戶的服務主體。 自訂角色可讓使用者使用一組自訂的資源提供者作業來建立 Azure 角色定義。 若要了解哪些作業可用於建立 Azure Cosmos DB 的自訂角色,請參閱 Azure Cosmos DB 資源提供者作業

提示

自訂角色若需要存取儲存在 Azure Cosmos DB 中的資料或在 Azure 入口網站中使用資料總管,則必須具有 Microsoft.DocumentDB/databaseAccounts/listKeys/* 動作。

注意

自訂角色指派不一定會顯示在 Azure 入口網站中。

警告

管理 RBAC 變更之後,不會自動輪替或撤銷帳戶金鑰。 這些金鑰可讓您存取資料平面作業。 移除使用者金鑰的存取權時,也建議您輪替金鑰。 針對 RBAC 資料平面,角色/宣告不再相符之後,Cosmos DB 後端將會拒絕要求。 如果使用者需要暫時存取資料平面作業,則建議使用 Azure Cosmos DB RBAC 資料平面。

防止 Azure Cosmos DB SDK 的變更

您可以鎖定 Azure Cosmos DB 資源提供者,以防止使用帳戶金鑰連線的用戶端資源變更 (該用戶端是透過 Azure Cosmos DB SDK 進行連線的應用程式)。 對於希望生產環境具有更高度控制和治理能力的使用者而言,這項功能可能是理想的選擇。 防止 SDK 的變更也可啟用資源鎖定和診斷記錄等功能,以進行控制平面作業。 從 Azure Cosmos DB SDK 連線的用戶端將無法變更 Azure Cosmos DB 帳戶、資料庫、容器和輸送量的任何屬性。 涉及對 Azure Cosmos DB 容器本身讀取和寫入資料的作業不會受到影響。

啟用這項功能時,您只能從具有適當 Azure 角色和 Microsoft Entra 認證 (包含受控服務身分識別) 的使用者進行變更。

警告

啟用此功能可能會對您的應用程式造成影響。 在啟用之前,請確定您已了解其影響。

啟用前檢查清單

這項設定會防止任何使用帳戶金鑰 (包括任何 Azire Cosmos DB SDK) 連線的用戶端、透過帳戶金鑰連線的任何工具,對 Azure Cosmos DB 資源進行任何變更。 若要在啟用這項功能之後防止應用程式發生問題,請檢查應用程式是否在啟用這項功能前執行下列任何動作,包括:

  • 建立、刪除子資源,例如資料庫和容器。 這包括其他 API 的資源,例如 Cassandra、MongoDB、Gremlin 和資料表資源。

  • 正在讀取或更新資料庫或容器層級資源的輸送量。

  • 修改容器屬性,包括索引原則、TTL 和唯一索引鍵。

  • 修改預存程序、觸發程序和使用者定義函式。

如果您的應用程式 (或使用者透過 Azure 入口網站) 執行上述任何一項動作,就必須將其移轉為透過 ARM 範本PowerShellAzure CLI、REST 或 Azure 管理程式庫來執行。 請注意,Azure 管理提供多種語言

透過 ARM 範本進行設定

若要使用 ARM 範本來設定此屬性,請更新現有的範本,或為目前的部署匯出新範本,然後將 "disableKeyBasedMetadataWriteAccess": true 加入至 databaseAccounts 資源的屬性。 以下是使用此屬性設定 Azure Resource Manager 範本的基本範例。

{
    {
      "type": "Microsoft.DocumentDB/databaseAccounts",
      "name": "[variables('accountName')]",
      "apiVersion": "2020-04-01",
      "location": "[parameters('location')]",
      "kind": "GlobalDocumentDB",
      "properties": {
        "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
        "locations": "[variables('locations')]",
        "databaseAccountOfferType": "Standard",
        "disableKeyBasedMetadataWriteAccess": true
        }
    }
}

重要

當您使用此屬性重新部署時,請確定您包含帳戶和子資源的其他屬性。 請勿依原樣部署此範本,否則將會重設您帳戶的所有屬性。

透過 Azure CLI 設定

若要使用 Azure CLI 啟用,請使用下列命令:

az cosmosdb update  --name [CosmosDBAccountName] --resource-group [ResourceGroupName]  --disable-key-based-metadata-write-access true

透過 PowerShell 設定

若要使用 Azure PowerShell 啟用,請使用下列命令:

Update-AzCosmosDBAccount -ResourceGroupName [ResourceGroupName] -Name [CosmosDBAccountName] -DisableKeyBasedMetadataWriteAccess true

下一步